yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Jay KwakSupport for dynamic array of textures access for Texture footprint. (#6392)187ec4444

master
1.9 KiB76 linesraw
1//DISABLE_TEST:SIMPLE:-target dxil-assembly -entry fragmentMain -profile sm_6_5 -stage fragment -DNV_SHADER_EXTN_SLOT=u0 
2
3//TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -entry fragmentMain -stage fragment
4//TEST:SIMPLE(filecheck=DXIL):-target dxil-assembly -entry fragmentMain -profile sm_6_5 -stage fragment -DNV_SHADER_EXTN_SLOT=u0 
5//TEST:SIMPLE(filecheck=HLSL):-target hlsl -entry fragmentMain -stage fragment
6
7//DISABLED_TEST:SIMPLE:-target spirv-assembly -entry fragmentMain -stage fragment
8//DISABLED_TEST:SIMPLE:-target dxil-assembly -entry fragmentMain -stage fragment
9//DISABLED_TEST:SIMPLE:-target hlsl -entry fragmentMain -stage fragment
10
11uniform Texture2D textures[] : register(t2, space10);
12uniform SamplerState sampler;
13uniform RWStructuredBuffer<uint> outputBuffer;
14
15static Texture2D _getBindlessTexture2d(uint texIdx)
16{
17    return textures[NonUniformResourceIndex(texIdx)];
18}
19
20void accumulate(inout uint r, uint u)
21{
22    r = r ^ u;
23}
24
25void accumulate(inout uint r, bool b)
26{
27    accumulate(r, uint(b));
28}
29
30void accumulate(inout uint r, uint2 u)
31{
32    accumulate(r, u.x);
33    accumulate(r, u.y);
34}
35
36void accumulate(inout uint r, uint3 u)
37{
38    accumulate(r, u.x);
39    accumulate(r, u.y);
40    accumulate(r, u.z);
41}
42
43void accumulate(inout uint r, TextureFootprint2D f)
44{
45    accumulate(r, f.anchor);
46    accumulate(r, f.offset);
47    accumulate(r, f.mask);
48    accumulate(r, f.lod);
49    accumulate(r, f.granularity);
50    accumulate(r, f.isSingleLevel);
51}
52
53cbuffer Uniforms
54{
55    uniform float2 coords;
56    uniform uint granularity;
57};
58
59void fragmentMain(
60    float v : VARYING)
61{
62    uint index = uint(v);
63    uint r = 0;
64
65    accumulate(r, _getBindlessTexture2d(index).queryFootprintCoarse(granularity, sampler, coords));
66
67// SPIRV: Extension  "SPV_NV_shader_image_footprint"
68// SPIRV: ImageSampleFootprintNV
69
70// DXIL: struct struct.NvShaderExtnStruct
71
72// HLSL: NvFootprintCoarse
73
74    outputBuffer[index] = r;
75}
76