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 00000000..e1ef9249 Binary files /dev/null and b/data/shaders/hlsl/descriptorindexing/descriptorindexing.frag.spv differ 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 00000000..cab40d81 Binary files /dev/null and b/data/shaders/hlsl/descriptorindexing/descriptorindexing.vert.spv differ