From ad447e10c45fdd02e04f53d400c9cfe4fd834270 Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Fri, 29 Jan 2021 09:58:41 +0100 Subject: [PATCH] Added HLSL shader for descriptor indexing sample --- .../descriptorindexing.frag | 2 ++ .../descriptorindexing.vert | 2 ++ data/shaders/hlsl/compile.py | 1 + .../descriptorindexing.frag | 17 ++++++++++ .../descriptorindexing.frag.spv | Bin 0 -> 1116 bytes .../descriptorindexing.vert | 32 ++++++++++++++++++ .../descriptorindexing.vert.spv | Bin 0 -> 1588 bytes 7 files changed, 54 insertions(+) create mode 100644 data/shaders/hlsl/descriptorindexing/descriptorindexing.frag create mode 100644 data/shaders/hlsl/descriptorindexing/descriptorindexing.frag.spv create mode 100644 data/shaders/hlsl/descriptorindexing/descriptorindexing.vert create mode 100644 data/shaders/hlsl/descriptorindexing/descriptorindexing.vert.spv diff --git a/data/shaders/glsl/descriptorindexing/descriptorindexing.frag b/data/shaders/glsl/descriptorindexing/descriptorindexing.frag index 786e7d65..ce97215a 100644 --- a/data/shaders/glsl/descriptorindexing/descriptorindexing.frag +++ b/data/shaders/glsl/descriptorindexing/descriptorindexing.frag @@ -1,3 +1,5 @@ +// Copyright 2021 Sascha Willems + #version 450 #extension GL_EXT_nonuniform_qualifier : require diff --git a/data/shaders/glsl/descriptorindexing/descriptorindexing.vert b/data/shaders/glsl/descriptorindexing/descriptorindexing.vert index b613f3ba..a0428445 100644 --- a/data/shaders/glsl/descriptorindexing/descriptorindexing.vert +++ b/data/shaders/glsl/descriptorindexing/descriptorindexing.vert @@ -1,3 +1,5 @@ +// Copyright 2021 Sascha Willems + #version 450 layout (location = 0) in vec3 inPos; diff --git a/data/shaders/hlsl/compile.py b/data/shaders/hlsl/compile.py index a1bba730..24a9f250 100644 --- a/data/shaders/hlsl/compile.py +++ b/data/shaders/hlsl/compile.py @@ -64,5 +64,6 @@ for root, dirs, files in os.walk(dir_path): '-fspv-extension=SPV_NV_ray_tracing', '-fspv-extension=SPV_KHR_multiview', '-fspv-extension=SPV_KHR_shader_draw_parameters', + '-fspv-extension=SPV_EXT_descriptor_indexing', hlsl_file, '-Fo', spv_out]) diff --git a/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag b/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag new file mode 100644 index 00000000..03a1a0f8 --- /dev/null +++ b/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag @@ -0,0 +1,17 @@ +// Copyright 2021 Sascha Willems +// Non-uniform access is enabled at compile time via SPV_EXT_descriptor_indexing (see compile.py) + +Texture2D textures[] : register(t1); +SamplerState samplerColorMap : register(s1); + +struct VSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] int TextureIndex : TEXTUREINDEX0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +}; + +float4 main(VSOutput input) : SV_TARGET +{ + return textures[NonUniformResourceIndex(input.TextureIndex)].Sample(samplerColorMap, input.UV); +} \ No newline at end of file diff --git a/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag.spv b/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e1ef9249ef5361986cc934f782fed165bf655a85 GIT binary patch literal 1116 zcmYk5OHTq(427>Cf^YFHh=T5kabZl1CPoQyp%_4PM@E^LN#v1XH2S~PjepFIiRZh_ z=#-T9w7tEjw~$Qiri~dh#>|-=eIr?uuo3L%@(6!~_DgokWK83_)vnw%+Z}iK;Cq9h z@3*~P$9?sBkLr}Peds!GCe64ke%JAOBob08h^M3rLgYn6UedylcPkm{BhB zXJbCxh_9$WoQqQWujVo5;6N<`r*CyD$R4Yf8QDLzU}oBu z(ytNb`E5~is$R^&Ug1leGt9w$iGxS)KANGWGtA1)sVPctb%M7lNr`hGav~P+CjKMF GhtgjOKvWO_ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert b/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert new file mode 100644 index 00000000..74cad39d --- /dev/null +++ b/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert @@ -0,0 +1,32 @@ +// Copyright 2021 Sascha Willems + +struct VSInput +{ +[[vk::location(0)]] float3 Pos : POSITION0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +[[vk::location(2)]] int TextureIndex : TEXTUREINDEX0; +}; + +struct Matrices { + float4x4 projection; + float4x4 view; + float4x4 model; +}; + +cbuffer matrices : register(b0) { Matrices matrices; }; + +struct VSOutput +{ + float4 Pos : SV_POSITION; +[[vk::location(0)]] int TextureIndex : TEXTUREINDEX0; +[[vk::location(1)]] float2 UV : TEXCOORD0; +}; + +VSOutput main(VSInput input) +{ + VSOutput output = (VSOutput)0; + output.UV = input.UV; + output.TextureIndex = input.TextureIndex; + output.Pos = mul(matrices.projection, mul(matrices.view, mul(matrices.model, float4(input.Pos.xyz, 1.0)))); + return output; +} \ No newline at end of file diff --git a/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert.spv b/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..cab40d817b1c45896e832896d91339a7f39349e0 GIT binary patch literal 1588 zcmZva-A_|N5XG04TTm24A6{4uFHkRkK8TAc5bNZQ1UUjXT9$CL!dV^%H;>mBX#C3Hs38_=9*33xh<)p z_oR#*`pYsF7|mdMfcY!qlRH{G)&^|2SakXLRxt?G;r#)s9b%y(u)m6GkI% z1)X3t;g1B2CeAdBChl(-O}ukB)T4>FY8XxYZ}3|&(LpT>UDrBoQTuz5S2Xl{# zj9M`FT#|AAXPv@bsxtKR-!ORG?U{_6@s{Nqk2hev=km!JZzad$Z5VG=KDm9}fq(cy z7Ry)`dnrGbaX*W#g%~s4(