From 13c081664ee0d113183932fcac67bb93d22b77e9 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Thu, 21 May 2020 14:39:30 +0100 Subject: [PATCH] Add missing inverseModelView UBO to fix hdr sample --- data/hlsl/README.md | 2 +- data/shaders/hdr/bloom.frag.spv | Bin 2516 -> 2516 bytes data/shaders/hdr/bloom.vert.spv | Bin 956 -> 956 bytes data/shaders/hdr/composition.frag.spv | Bin 636 -> 636 bytes data/shaders/hdr/composition.vert.spv | Bin 956 -> 956 bytes data/shaders/hdr/gbuffer.frag | 45 ++++++++++++++------------ data/shaders/hdr/gbuffer.frag.spv | Bin 5836 -> 6256 bytes data/shaders/hdr/gbuffer.vert | 12 +++---- data/shaders/hdr/gbuffer.vert.spv | Bin 3388 -> 3332 bytes examples/hdr/hdr.cpp | 16 +++++---- 10 files changed, 40 insertions(+), 35 deletions(-) diff --git a/data/hlsl/README.md b/data/hlsl/README.md index 208553bc..33c11849 100644 --- a/data/hlsl/README.md +++ b/data/hlsl/README.md @@ -34,7 +34,7 @@ Shaders written to mirror the GLSL versions at `eddd724`. There have been change | gears | ☑ | ☑ | ☑ | ☑ | geometryshader | ☑ | ☑ | ☑ | ☑ | gltfscene | - | - | ☑ | ☑ -| hdr | ☑ | ❌ | ☑ | ❌ +| hdr | ☑ | ❌ | ☑ | ☑ | imgui | ☑ | ☑ | ☑ | ☑ | indirectdraw | ☑ | ☑ | ☑ | ☑ | inlineuniformblocks | ☑ | ☑ | ☑ | ☑ diff --git a/data/shaders/hdr/bloom.frag.spv b/data/shaders/hdr/bloom.frag.spv index 57d69057395ff8b2f076e5af7fb2a7fb01c309c9..65e7d3829b6622b1bc8db526eaa3b9434d136b4a 100644 GIT binary patch delta 18 Zcmca2d_|a(nMs+Qfq{{MVp#1D*f? delta 18 Zcmca2d_|a(nMs+Qfq{{MeIw^-P5>pw1DyZ> diff --git a/data/shaders/hdr/bloom.vert.spv b/data/shaders/hdr/bloom.vert.spv index 4040f608bd837727d1051a6539a15338d11242ae..ffcd1a8449e738b2d9e7085c5a9f84d7a55e501a 100644 GIT binary patch delta 18 ZcmdnPzK5NYnMs+Qfq{{MVQc6p;gbq$%h1xO59)#0hZ;4lUq_Q-vtvgaZi6X}Ol)ci-Kw*QDB;heMYdH1HJ zDf1qeB!?wa`R}o$F^)~9pd`t(q%EDhdoSo+I8h&5xOmBFMjVxt(m-R5PTG?eW-;1d zsp>cu7`OyO%BJ)K5=-5bkysNrpRsUG3wpwuoUCo``< zdkrUUOS$^kcFRH;? z)4o)yhZgsoi}4>iS8Lk0N_BO1(#Bbr60X6=oc-Iv)HGWRw8rNm~f?pZ`^DH(zfoo-$!8I><; z)R>T$Yb)#ZhP@4Y(|CEJS{_N)xDtC}Ec)J>?8W}?XVH@EQ)`~JHN8Kz&GmD9wB9Sv z`yJ-4OU7ywo5$1p;qy^*lykbV2mVJZCHJCnjnZ28G1rILO)f#!$$meOB z*9js|t(fOM&F5*Gw;e>DTI6+SzYR6dXzX0z2s`$z?enn*rOfX;Ks)lgGuz*~@xB|P zXRaU5&~+THuNL_}%l!JB7olH&lCqJH;Hs%gs&Z5lr{Eit! zwljBt6Yw3$tZjY=_EF5ns%!giYNwECf97YlYc6Q= z#u`t-_Pq8a&g?yK&tZEHw9P-4*)!XR@OQ)YyPo>a61-qZA7 zhJ9fF{^jA{fxY|YSbI15X-dk78t$h`l;f;~{MhYI#+!S-8{ujltNZ(o_S-S6Ily)S2bKEG@E ze7|jBoBv>D|BY@>gFF7kd&iitr^0~z1E)H_v7H^*k66i zsqeE>H^=wWY~Z^oYCHjM%m$wLbmk`lW7N&}S*!hnwcVS0a8E0VU%>n%Fb~WJ*6d(@ zGEhH1tNGMSW8&|hsp;OI23Hpj_w6|&=M=bg)FbCqxVmr@bDoZ7j&&kuAzWQJB4;f< z^PTw&;9jh4Z1m-HxbM&CEq_|2x%O7yPR`~tcqXuhe*5KbK`rW>0r$NdbQqVo#rqrXKw{3$Esfvpxr|E*x>z$XSMFj(X%QhpP)mF=qvuIr*M;Vyg>B zKMqy*mePth#;hJ)suy&xIQwb`QK8+(hqvmz@WUQE%thqxO8@ zetfq2eNS53e(Q@`tKj+PyBga(a2(7&)J7xH0Nc`=#)x ztv_n}-qjbiUk0~U*e{3Y_uY?ejC$0*2p+ZdM{VEX`mEK?Tn3)ys_a>Bf)8f8Jsg0m zMf@;aE$j;1{YL)9aAVXX<`r<)y*gWC1a6$VYYZ`~MSK;WU!#WYeTg;3;Kry&&MV>h zHO8@xQ+JI~X0?dl40qkIx4?~w{%wWZzXiZp{o%U=9=I`d6HE#BjA z$uxC`b*BL1?eklKJ-C*>yY}0FIqDH}Gu$&qPu>n!+YRD*y#u}r=!;tKgj-La-x}9@ z7f^SE_HMYEdkbw(rn%R(^u@Ei2bgdC9#99-1AY0wMUKFZ@8)~q^T2%InL3!?2h?59 z+V9Uare^Oxkm>py?$7;1&IjSvQICFq2(B(1#heeLnPZ*E`3PKHI3g#$n;%7UFV;5J zGx)4N22KO>B$ z&G?zjUjq5x?U%9bRs3$h0#}RrUxizvJ^S1BYjF401B}&w8;IZT?QqvHF7B;b{@zZ* zw!U}rn_vcr-hC_6)E&`>*x$F&jPbeN&3q3y0PX_T^!N8&pdP=`@4?Mek9+iexV2{k z{eBO;Z$AKc0{yYaAHwedYxwKmJ^u)(8QTI{K^rIm&upwQk^f_OBfs(Y|4*>hgd@%v zf0z6M&6tD0diOG`$?s#nAH-RI3D+O?ui(bq%B~(@{xvX0-G6iamf7)7cCPO?;19rm z+sI?jzk}!Z{CjLQ;fOuErw6h1`;4t`Eo+AFp@PpC*RkJ!1m?%Oe}Yef==GoBYR3J) aUK?wS_u&!dzXG*~f$MA6!N1w@Qt%(0og;Yw literal 5836 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 diff --git a/data/shaders/hdr/gbuffer.vert b/data/shaders/hdr/gbuffer.vert index 5d69f03c..ef9f0ad7 100644 --- a/data/shaders/hdr/gbuffer.vert +++ b/data/shaders/hdr/gbuffer.vert @@ -8,6 +8,7 @@ layout (constant_id = 0) const int type = 0; layout (binding = 0) uniform UBO { mat4 projection; mat4 modelview; + mat4 inverseModelview; } ubo; layout (location = 0) out vec3 outUVW; @@ -15,14 +16,13 @@ layout (location = 1) out vec3 outPos; layout (location = 2) out vec3 outNormal; layout (location = 3) out vec3 outViewVec; layout (location = 4) out vec3 outLightVec; -layout (location = 5) out mat4 outInvModelView; -out gl_PerVertex +out gl_PerVertex { vec4 gl_Position; }; -void main() +void main() { outUVW = inPos; @@ -37,11 +37,9 @@ void main() break; } outPos = vec3(ubo.modelview * vec4(inPos, 1.0)); - outNormal = mat3(ubo.modelview) * inNormal; - - outInvModelView = inverse(ubo.modelview); + outNormal = mat3(ubo.modelview) * inNormal; vec3 lightPos = vec3(0.0f, -5.0f, 5.0f); outLightVec = lightPos.xyz - outPos.xyz; - outViewVec = -outPos.xyz; + outViewVec = -outPos.xyz; } diff --git a/data/shaders/hdr/gbuffer.vert.spv b/data/shaders/hdr/gbuffer.vert.spv index 2743ab4487ebd1e777138797631c5a2df9376ccd..6563548ce0d1b30126b81d389de28d432f7f9dd3 100644 GIT binary patch delta 422 zcmYjO!AiqG5S>lBX)Xb^7NMY*A|iSfgrW!@^kBhj?*C`#S=djba4a@Z$%>X3T0c6!7@ZE7ipH7PC)H5KzN=Sz;`r>J2?aC4SEI%**#7^Hm(M2NQ>7lq>uS`4Vu4$5EdG>|vdLE@7?o ZUn6IK{y*;qIcw}Sh~z)`C%dAQ`~q&6Io<#O delta 478 zcmXv}J4?f06uoI4ZNNGhGgwi43?kN15Ja&!h@fl1!AXM_#A;2O)K?nY#W8%Ni~S9* zf?XZ_4gLma5j-a*4TpQrIrrZ0bWnM#l=Z@5QACrXlw^>U*R=6uXW70Mk$WIcuAWs@ zYfW21soD1TE;!Nk5x_o)D3Z!YkbY(poolSizes.size()), poolSizes.data(), numDescriptorSets); VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolInfo, nullptr, &descriptorPool)); } @@ -621,12 +622,12 @@ public: void setupDescriptorSetLayout() { std::vector setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0), vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), }; - VkDescriptorSetLayoutCreateInfo descriptorLayoutInfo = + VkDescriptorSetLayoutCreateInfo descriptorLayoutInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), static_cast(setLayoutBindings.size())); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayoutInfo, nullptr, &descriptorSetLayouts.models)); @@ -691,7 +692,7 @@ public: }; vkUpdateDescriptorSets(device, static_cast(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, NULL); - // Bloom filter + // Bloom filter allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.bloomFilter, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.bloomFilter)); @@ -744,7 +745,7 @@ public: VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo( - 1, + 1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilState = @@ -839,7 +840,7 @@ public: dir = 0; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.bloom[1])); - // Object rendering pipelines + // Object rendering pipelines rasterizationState.cullMode = VK_CULL_MODE_BACK_BIT; // Vertex bindings an attributes for model rendering @@ -922,6 +923,7 @@ public: { uboVS.projection = camera.matrices.perspective; uboVS.modelview = camera.matrices.view; + uboVS.inverseModelview = glm::inverse(camera.matrices.view); memcpy(uniformBuffers.matrices.mapped, &uboVS, sizeof(uboVS)); }