]> git.nega.tv - josh/narcissus/commitdiff
Use uniform std430 layout and row_major attribute
authorJoshua Simmons <josh@nega.tv>
Sun, 12 Mar 2023 11:35:49 +0000 (12:35 +0100)
committerJoshua Simmons <josh@nega.tv>
Sun, 12 Mar 2023 12:44:16 +0000 (13:44 +0100)
bins/narcissus/src/shaders/basic.vert.glsl
bins/narcissus/src/shaders/basic.vert.spv
bins/narcissus/src/shaders/text.vert.glsl
libs/narcissus-gpu/src/backend/vulkan/mod.rs

index 569def4a29c848421858ac5d5d0575e0d6ce284e..8488ce1d03fc5807a12668634e0f9cf669e1e613 100644 (file)
@@ -1,5 +1,7 @@
 #version 460
 
+#extension GL_EXT_scalar_block_layout : require
+
 struct VertexData {
     vec4 position;
     vec4 normal;
@@ -10,7 +12,7 @@ struct TransformData {
     vec4 transform[3];
 };
 
-layout(set = 0, binding = 0) uniform uniformBuffer {
+layout(std430, row_major, set = 0, binding = 0) uniform uniformBuffer {
     mat4 viewProj;
 };
 
@@ -30,13 +32,13 @@ void main() {
     VertexData vd = vertices[gl_VertexIndex];
 
     mat3 modelRot = mat3(
-        td.transform[0].x, td.transform[0].y, td.transform[0].z,
-        td.transform[0].w, td.transform[1].x, td.transform[1].y,
-        td.transform[1].z, td.transform[1].w, td.transform[2].x
+        td.transform[0].x, td.transform[0].w, td.transform[1].z,
+        td.transform[0].y, td.transform[1].x, td.transform[1].w,
+        td.transform[0].z, td.transform[1].y, td.transform[2].x
     );
     vec3 modelOff = vec3(td.transform[2].y, td.transform[2].z, td.transform[2].w);
-    vec3 posWorld = transpose(modelRot) * vd.position.xyz + modelOff;
-    vec4 posClip = transpose(viewProj) * vec4(posWorld, 1.0);
+    vec3 posWorld = modelRot * vd.position.xyz + modelOff;
+    vec4 posClip = viewProj * vec4(posWorld, 1.0);
     gl_Position = posClip;
 
     outNormal = vd.normal.xyz;
index f22e6089d9b0ae3f67572dd1cfddd5812c048728..4e644f272e34ce328fe13482daf21a531da0c6ce 100644 (file)
Binary files a/bins/narcissus/src/shaders/basic.vert.spv and b/bins/narcissus/src/shaders/basic.vert.spv differ
index dc8ce74c150e65522787031e975c754b0d946678..0efddaf1f937332dcb0899ad9b95a8ea955f7abc 100644 (file)
@@ -1,5 +1,7 @@
 #version 460
 
+#extension GL_EXT_scalar_block_layout : require
+
 struct CachedGlyph {
     uint x0;
     uint x1;
@@ -19,7 +21,7 @@ struct GlyphInstance {
     uint color;
 };
 
-layout(set = 0, binding = 0) uniform uniformBuffer {
+layout(std430, set = 0, binding = 0) uniform uniformBuffer {
     uint screenWidth;
     uint screenHeight;
     uint atlasWidth;
index 5a3389075cf32c317a543f04c876d03bf37d3585..4349296870a2b768f19fa73c4236a8e844c898c1 100644 (file)
@@ -1042,12 +1042,7 @@ impl VulkanDevice {
             .iter()
             .copied()
             .find(|&physical_device| {
-                let (
-                    physical_device_properties,
-                    _physical_device_properties_11,
-                    _physical_device_properties_12,
-                    _physical_device_properties_13,
-                ) = {
+                let (properties, _properties_11, _properties_12, _properties_13) = {
                     let mut properties_13 = vk::PhysicalDeviceVulkan13Properties::default();
                     let mut properties_12 = vk::PhysicalDeviceVulkan12Properties {
                         _next: &mut properties_13 as *mut vk::PhysicalDeviceVulkan13Properties
@@ -1071,12 +1066,7 @@ impl VulkanDevice {
                     (properties, properties_11, properties_12, properties_13)
                 };
 
-                let (
-                    _physical_device_features,
-                    _physical_device_features_11,
-                    physical_device_features_12,
-                    physical_device_features_13,
-                ) = {
+                let (_features, _features_11, features_12, features_13) = {
                     let mut features_13 = vk::PhysicalDeviceVulkan13Features::default();
                     let mut features_12 = vk::PhysicalDeviceVulkan12Features {
                         _next: &mut features_13 as *mut vk::PhysicalDeviceVulkan13Features
@@ -1100,13 +1090,13 @@ impl VulkanDevice {
                     (features.features, features_11, features_12, features_13)
                 };
 
-                physical_device_properties.properties.api_version >= vk::VERSION_1_3
-                    && physical_device_features_13.dynamic_rendering == vk::Bool32::True
-                    && physical_device_features_12.timeline_semaphore == vk::Bool32::True
-                    && physical_device_features_12.descriptor_indexing == vk::Bool32::True
-                    && physical_device_features_12.descriptor_binding_partially_bound
-                        == vk::Bool32::True
-                    && physical_device_features_12.draw_indirect_count == vk::Bool32::True
+                properties.properties.api_version >= vk::VERSION_1_3
+                    && features_13.dynamic_rendering == vk::Bool32::True
+                    && features_12.timeline_semaphore == vk::Bool32::True
+                    && features_12.descriptor_indexing == vk::Bool32::True
+                    && features_12.descriptor_binding_partially_bound == vk::Bool32::True
+                    && features_12.draw_indirect_count == vk::Bool32::True
+                    && features_12.uniform_buffer_standard_layout == vk::Bool32::True
             })
             .expect("no supported physical devices reported");
 
@@ -1154,6 +1144,7 @@ impl VulkanDevice {
                 descriptor_indexing: vk::Bool32::True,
                 descriptor_binding_partially_bound: vk::Bool32::True,
                 draw_indirect_count: vk::Bool32::True,
+                uniform_buffer_standard_layout: vk::Bool32::True,
                 ..default()
             };
             let enabled_features_11 = vk::PhysicalDeviceVulkan11Features {