From f4ba15b15a9b0cf5102b79781a48745bda1f5c33 Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Sun, 12 Mar 2023 12:35:49 +0100 Subject: [PATCH] Use uniform std430 layout and row_major attribute --- bins/narcissus/src/shaders/basic.vert.glsl | 14 +++++---- bins/narcissus/src/shaders/basic.vert.spv | Bin 2464 -> 2432 bytes bins/narcissus/src/shaders/text.vert.glsl | 4 ++- libs/narcissus-gpu/src/backend/vulkan/mod.rs | 29 +++++++------------ 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/bins/narcissus/src/shaders/basic.vert.glsl b/bins/narcissus/src/shaders/basic.vert.glsl index 569def4..8488ce1 100644 --- a/bins/narcissus/src/shaders/basic.vert.glsl +++ b/bins/narcissus/src/shaders/basic.vert.glsl @@ -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; diff --git a/bins/narcissus/src/shaders/basic.vert.spv b/bins/narcissus/src/shaders/basic.vert.spv index f22e6089d9b0ae3f67572dd1cfddd5812c048728..4e644f272e34ce328fe13482daf21a531da0c6ce 100644 GIT binary patch literal 2432 zcmZ9M>x)%o6vlt&?0wEmPHNs}ybfb#UKv6rQAA}B9IJsw%TI8@jWFAp>BFar`eWf3rNlwti!N z;q%Xo*hCY7#%yL|Jh#BT)my)4Yy)P1Pk@8KkHD|M@4!P~iIz>k82AXd#E8vN1rFrD zG5UJ{$6WB0&$m3(^W}ppwf6tcV6mTr-&Hayqyu_T-9>rD69%4RQ z+q!+O_VpCkvin@cimP|k=c;W@kM+GrxgO2CSWTbzF3+;7ejl4i?n^WgS3TWJ@v?_@ z^)x@0nSDKlb=v6er7&yCPh}M5vzQ$1ZN2KP7G`_9P#4;sZ44uBKTXsyXPPGN*ZZEK zjhVb}Yww_CGI!xQmi7n9XD=-qAacZJX@ZxSKDFo_l}{~-?W2jEYn!9q)W94qTY(QD zurq0^H!=BaPd?t2e6)82yDon^XBRhLTRj?Y{asnB>pfy$a+IgP+0#_>c}Mbf zx1HUFF61U=KXszU#HzmdPhtNi=8g+{otQHfuTS&4EiZL&IJF`# zea5MaBk7Zu`t;i*R<)le*5~jdu|9{FiOIoS_jn>_s9dpy#JtOjI|VUUKle<=RS$E| zW?aAC`NaD57BjbB??T4)>s^GnJI@N^(99RfTb}YN{L9cs$HAV3e-*nY>RV6T_i7oU zmU+h1tSi~G&*MsBeZJo&=3Le5YCIG1`oCr}IA4R+(5A6Si?R_a6{iRF9sT+gRUu{l)Pw2#tCQdz6@Yf2U?2Cog>~jN-fS1R`Ib Owf#Pby<@;B2D}G=RD72J literal 2464 zcmZ9OTW?iW6otQY_CBX*Efo=36`IxxsF;QbB@G0d#>5tELeZM|AR!>$E!QfELZFiH ztS`comw(BN3Hj!kGwisM=IlAFk-tZAIeD9mp$wPA1TRd2O0(>V)uq3zmBKjP+SqJ}y9X=1+4 zdx|#p>W?R~*+l)pdsE^fZIdNkhpuVt-K?*RvsqdfhaNo|(xuY5f} zXCz}u@y!Lsp} zlegz3H?=9|UcXFTh{;7;Eqdyws;}lUUXMGqEm*$BA`0JV{Ir=6a6r=N>9oY%#IQ6RV6T zd$kTx%RFOh4;$ID%lDJSx_mbilW+CE0^-~}JD0tz{Re~a zUxdgpZYQxz5V$>77{q=3I`6QWQ7_)zZy<1cYk!+q?eBYtTCT!=NUXc(9}|<;24kW3 zEr@*M_51e7*}LFBCH68#e%||^@-2|x2Q*= 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 { -- 2.49.0