]> git.nega.tv - josh/narcissus/commitdiff
Tidy embedded spir-v
authorJoshua Simmons <josh@nega.tv>
Sat, 3 Dec 2022 20:17:03 +0000 (21:17 +0100)
committerJoshua Simmons <josh@nega.tv>
Sat, 3 Dec 2022 20:17:03 +0000 (21:17 +0100)
narcissus-gpu/src/backend/vulkan/mod.rs
narcissus/src/main.rs

index e68a7606a83641e186e5fa3b99ff740c64d2b3af..d8a78d0cd1faaf6b87c32f4d67e599979d2b8651 100644 (file)
@@ -8,7 +8,7 @@ use std::{
 };
 
 use narcissus_core::{
-    cstr, cstr_from_bytes_until_nul, default, manual_arc,
+    cstr, cstr_from_bytes_until_nul, default, is_aligned_to, manual_arc,
     manual_arc::ManualArc,
     raw_window::{AsRawWindow, RawWindow},
     Arena, HybridArena, Mutex, PhantomUnsend, Pool,
@@ -1843,6 +1843,10 @@ impl Device for VulkanDevice {
         };
 
         let shader_module = |code: &[u8]| {
+            assert!(
+                is_aligned_to(code.as_ptr(), 4),
+                "spir-v must be aligned on a 4 byte boundary"
+            );
             let create_info = vk::ShaderModuleCreateInfo {
                 code: code.into(),
                 ..default()
index 903b9cac1efc32a34f600527cc7fc43f52b8bde8..b8a20bc5fc0bd8a22ed7f50a18b8b48f7e51e75b 100644 (file)
@@ -1,7 +1,7 @@
 use std::{path::Path, time::Instant};
 
 use narcissus_app::{create_app, Event, Key, WindowDesc};
-use narcissus_core::{cstr, default, obj, rand::Pcg64};
+use narcissus_core::{cstr, default, include_bytes_align, obj, rand::Pcg64};
 use narcissus_gpu::{
     create_device, Access, Bind, BindGroupLayoutDesc, BindGroupLayoutEntryDesc, BindingType,
     BlendMode, Buffer, BufferDesc, BufferImageCopy, BufferUsageFlags, ClearValue, CompareOp,
@@ -295,11 +295,8 @@ pub fn main() {
 
     let mut thread_token = ThreadToken::new();
 
-    #[repr(align(4))]
-    struct Spirv<const LEN: usize>([u8; LEN]);
-
-    let vert_spv = Spirv(*include_bytes!("shaders/basic.vert.spv"));
-    let frag_spv = Spirv(*include_bytes!("shaders/basic.frag.spv"));
+    let vert_spv = include_bytes_align!(4, "shaders/basic.vert.spv");
+    let frag_spv = include_bytes_align!(4, "shaders/basic.frag.spv");
 
     let uniform_bind_group_layout = device.create_bind_group_layout(&BindGroupLayoutDesc {
         entries: &[BindGroupLayoutEntryDesc {
@@ -342,11 +339,11 @@ pub fn main() {
     let pipeline = device.create_graphics_pipeline(&GraphicsPipelineDesc {
         vertex_shader: ShaderDesc {
             entry: cstr!("main"),
-            code: &vert_spv.0,
+            code: vert_spv,
         },
         fragment_shader: ShaderDesc {
             entry: cstr!("main"),
-            code: &frag_spv.0,
+            code: frag_spv,
         },
         bind_group_layouts: &[uniform_bind_group_layout, storage_bind_group_layout],
         layout: GraphicsPipelineLayout {