diff options
Diffstat (limited to 'tests/bindings')
| -rw-r--r-- | tests/bindings/binding0.hlsl | 12 | ||||
| -rw-r--r-- | tests/bindings/binding1.hlsl | 14 | ||||
| -rw-r--r-- | tests/bindings/explicit-binding.hlsl | 24 | ||||
| -rw-r--r-- | tests/bindings/glsl-parameter-blocks.slang.glsl | 6 | ||||
| -rw-r--r-- | tests/bindings/multi-file-extra.hlsl | 34 | ||||
| -rw-r--r-- | tests/bindings/multi-file.hlsl | 34 | ||||
| -rw-r--r-- | tests/bindings/packoffset.hlsl | 51 | ||||
| -rw-r--r-- | tests/bindings/resources-in-cbuffer.hlsl | 73 |
8 files changed, 131 insertions, 117 deletions
diff --git a/tests/bindings/binding0.hlsl b/tests/bindings/binding0.hlsl index 85f17e940..5516b0135 100644 --- a/tests/bindings/binding0.hlsl +++ b/tests/bindings/binding0.hlsl @@ -6,8 +6,15 @@ #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME +#define END_CBUFFER(NAME, REG) /**/ +#define CBUFFER_REF(NAME, FIELD) FIELD + #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME +#define END_CBUFFER(NAME, REG) ; cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define C C_0 #define t t_0 @@ -22,12 +29,13 @@ float4 use(Texture2D t, SamplerState s) { return t.Sample(s, 0.0); } Texture2D t R(: register(t0)); SamplerState s R(: register(s0)); -cbuffer C R(: register(b0)) +BEGIN_CBUFFER(C) { float c; } +END_CBUFFER(C, register(b0)) float4 main() : SV_TARGET { - return use(t,s) + use(c); + return use(t,s) + use(CBUFFER_REF(C,c)); }
\ No newline at end of file diff --git a/tests/bindings/binding1.hlsl b/tests/bindings/binding1.hlsl index 8709c31c6..47ab22bb9 100644 --- a/tests/bindings/binding1.hlsl +++ b/tests/bindings/binding1.hlsl @@ -13,8 +13,14 @@ #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME +#define END_CBUFFER(NAME, REG) /**/ +#define CBUFFER_REF(NAME, FIELD) FIELD #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME +#define END_CBUFFER(NAME, REG) ; cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define tB tB_0 #define sB sB_0 @@ -32,17 +38,19 @@ Texture2D tB R(: register(t1)); SamplerState sA R(: register(s0)); SamplerState sB R(: register(s1)); -cbuffer C0 R(: register(b0)) +BEGIN_CBUFFER(C0) { float c0; } +END_CBUFFER(C0, register(b0)) -cbuffer C1 R(: register(b1)) +BEGIN_CBUFFER(C1) { float c1; } +END_CBUFFER(C1, register(b1)) float4 main() : SV_TARGET { - return use(tB,sB) + use(c1); + return use(tB,sB) + use(CBUFFER_REF(C1,c1)); }
\ No newline at end of file diff --git a/tests/bindings/explicit-binding.hlsl b/tests/bindings/explicit-binding.hlsl index 9c38cdee0..420eafec1 100644 --- a/tests/bindings/explicit-binding.hlsl +++ b/tests/bindings/explicit-binding.hlsl @@ -5,8 +5,16 @@ #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME +#define BEGIN_CBUFFER_R(NAME, REG) cbuffer NAME : REG +#define END_CBUFFER(NAME, REG) /**/ +#define CBUFFER_REF(NAME, FIELD) FIELD #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME +#define BEGIN_CBUFFER_R(NAME, REG) BEGIN_CBUFFER(NAME) +#define END_CBUFFER(NAME, REG) ; cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define CA CA_0 #define ca ca_0 @@ -49,25 +57,29 @@ SamplerState sc : register(s1); // and even to make things non-contiguous. Here we bind // the third constnat buffer to register `b9` // -cbuffer CA R(: register(b0)) +BEGIN_CBUFFER(CA) { float ca; } +END_CBUFFER(CA, register(b0)) + // -cbuffer CB R(: register(b1)) +BEGIN_CBUFFER(CB) { float cb; } +END_CBUFFER(CB, register(b1)) // -cbuffer CC : register(b9) +BEGIN_CBUFFER_R(CC, register(b9)) { float cc; } +END_CBUFFER(CC, register(b9)) float4 main() : SV_TARGET { // Go ahead and use everything in this case: - return use(ta, sa) + use(ca) - + use(tb, sb) + use(cb) - + use(tc, sc) + use(cc); + return use(ta, sa) + use(CBUFFER_REF(CA,ca)) + + use(tb, sb) + use(CBUFFER_REF(CB,cb)) + + use(tc, sc) + use(CBUFFER_REF(CC,cc)); }
\ No newline at end of file diff --git a/tests/bindings/glsl-parameter-blocks.slang.glsl b/tests/bindings/glsl-parameter-blocks.slang.glsl index 3ade8bb6b..a27fbb3db 100644 --- a/tests/bindings/glsl-parameter-blocks.slang.glsl +++ b/tests/bindings/glsl-parameter-blocks.slang.glsl @@ -25,8 +25,8 @@ struct Test layout(binding = 0) uniform ParameterBlock_gTest { - Test gTest; -}; + Test _data; +} gTest; layout(binding = 1) uniform texture2D gTest_t; @@ -42,7 +42,7 @@ in vec2 uv; void main() { - vec4 temp_a = gTest.a; + vec4 temp_a = gTest._data.a; vec4 temp_sample = texture(sampler2D(gTest_t, gTest_s), uv); diff --git a/tests/bindings/multi-file-extra.hlsl b/tests/bindings/multi-file-extra.hlsl index 92227d54a..fe8766dcd 100644 --- a/tests/bindings/multi-file-extra.hlsl +++ b/tests/bindings/multi-file-extra.hlsl @@ -7,8 +7,14 @@ #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME +#define END_CBUFFER(NAME, REG) /**/ +#define CBUFFER_REF(NAME, FIELD) FIELD #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME +#define END_CBUFFER(NAME, REG) ; cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define sharedC sharedC_0 #define sharedCA sharedCA_0 @@ -50,13 +56,15 @@ float4 use(Texture2D t, SamplerState s) { return t.Sample(s, 0.0); } // Start with some parameters that will appear in both shaders Texture2D sharedT R(: register(t0)); SamplerState sharedS R(: register(s0)); -cbuffer sharedC R(: register(b0)) + +BEGIN_CBUFFER(sharedC) { - float3 sharedCA R(: packoffset(c0)); - float sharedCB R(: packoffset(c0.w)); - float3 sharedCC R(: packoffset(c1)); - float2 sharedCD R(: packoffset(c2)); + float3 sharedCA; + float sharedCB; + float3 sharedCC; + float2 sharedCD; } +END_CBUFFER(sharedC, register(b0)) // Then some parameters specific to this shader. // These will be placed *after* the ones from the main file, @@ -65,13 +73,15 @@ cbuffer sharedC R(: register(b0)) Texture2D fragmentT R(: register(t4)); SamplerState fragmentS R(: register(s2)); -cbuffer fragmentC R(: register(b2)) + +BEGIN_CBUFFER(fragmentC) { - float3 fragmentCA R(: packoffset(c0)); - float fragmentCB R(: packoffset(c0.w)); - float3 fragmentCC R(: packoffset(c1)); - float2 fragmentCD R(: packoffset(c2)); + float3 fragmentCA; + float fragmentCB; + float3 fragmentCC; + float2 fragmentCD; } +END_CBUFFER(fragmentC, register(b2)) // And end with some shared parameters again Texture2D sharedTV R(: register(t2)); @@ -82,9 +92,9 @@ float4 main() : SV_TARGET { // Go ahead and use everything here, just to make sure things got placed correctly return use(sharedT, sharedS) - + use(sharedCD) + + use(CBUFFER_REF(sharedC,sharedCD)) + use(fragmentT, fragmentS) - + use(fragmentCD) + + use(CBUFFER_REF(fragmentC, fragmentCD)) + use(sharedTF, sharedS) ; }
\ No newline at end of file diff --git a/tests/bindings/multi-file.hlsl b/tests/bindings/multi-file.hlsl index 6269c703e..8c719bbcf 100644 --- a/tests/bindings/multi-file.hlsl +++ b/tests/bindings/multi-file.hlsl @@ -8,8 +8,14 @@ #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME +#define END_CBUFFER(NAME, REG) /**/ +#define CBUFFER_REF(NAME, FIELD) FIELD #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME +#define END_CBUFFER(NAME, REG) ; cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define sharedC sharedC_0 #define sharedCA sharedCA_0 @@ -55,13 +61,15 @@ float4 use(Texture2D t, SamplerState s) // Start with some parameters that will appear in both shaders Texture2D sharedT R(: register(t0)); SamplerState sharedS R(: register(s0)); -cbuffer sharedC R(: register(b0)) + +BEGIN_CBUFFER(sharedC) { - float3 sharedCA R(: packoffset(c0)); - float sharedCB R(: packoffset(c0.w)); - float3 sharedCC R(: packoffset(c1)); - float2 sharedCD R(: packoffset(c2)); + float3 sharedCA; + float sharedCB; + float3 sharedCC; + float2 sharedCD; } +END_CBUFFER(sharedC, register(b0)) // Then some parameters specific to this shader // (these will get placed before the ones in the `extra` file, @@ -69,13 +77,15 @@ cbuffer sharedC R(: register(b0)) Texture2D vertexT R(: register(t1)); SamplerState vertexS R(: register(s1)); -cbuffer vertexC R(: register(b1)) + +BEGIN_CBUFFER(vertexC) { - float3 vertexCA R(: packoffset(c0)); - float vertexCB R(: packoffset(c0.w)); - float3 vertexCC R(: packoffset(c1)); - float2 vertexCD R(: packoffset(c2)); + float3 vertexCA; + float vertexCB; + float3 vertexCC; + float2 vertexCD; } +END_CBUFFER(vertexC, register(b1)) // And end with some shared parameters again Texture2D sharedTV R(: register(t2)); @@ -86,9 +96,9 @@ float4 main() : SV_POSITION { // Go ahead and use everything here, just to make sure things got placed correctly return use(sharedT, sharedS) - + use(sharedCD) + + use(CBUFFER_REF(sharedC, sharedCD)) + use(vertexT, vertexS) - + use(vertexCD) + + use(CBUFFER_REF(vertexC, vertexCD)) + use(sharedTV, vertexS) ; }
\ No newline at end of file diff --git a/tests/bindings/packoffset.hlsl b/tests/bindings/packoffset.hlsl deleted file mode 100644 index 81913d672..000000000 --- a/tests/bindings/packoffset.hlsl +++ /dev/null @@ -1,51 +0,0 @@ -//TEST:COMPARE_HLSL:-no-mangle -profile ps_4_0 -entry main - -// Let's make sure we generate correct output in cases -// where there are non-trivial `packoffset`s needed - -#ifdef __SLANG__ -#define R(X) /**/ -#else -#define R(X) X - -#define CA CA_0 -#define ca ca_0 -#define cb cb_0 -#define cc cc_0 -#define cd cd_0 -#define ce ce_0 - -#define ta CA_ta_0 -#define sa CA_sa_0 - -#endif - -float4 use(float val) { return val; }; -float4 use(float2 val) { return float4(val,0.0,0.0); }; -float4 use(float3 val) { return float4(val,0.0); }; -float4 use(float4 val) { return val; }; -float4 use(Texture2D t, SamplerState s) { return t.Sample(s, 0.0); } - -cbuffer CA R(: register(b0)) -{ - float4 ca R(: packoffset(c0)); - float3 cb R(: packoffset(c1.x)); - float cc R(: packoffset(c1.w)); - float2 cd R(: packoffset(c2.x)); - float2 ce R(: packoffset(c2.z)); - - Texture2D ta R(: register(t0)); - SamplerState sa R(: register(s0)); -} - -float4 main() : SV_TARGET -{ - // Go ahead and use everything in this case: - return use(ta, sa) - + use(ca) - + use(cb) - + use(cc) - + use(cd) - + use(ce) - ; -}
\ No newline at end of file diff --git a/tests/bindings/resources-in-cbuffer.hlsl b/tests/bindings/resources-in-cbuffer.hlsl index 4d3d381d9..71eaf40aa 100644 --- a/tests/bindings/resources-in-cbuffer.hlsl +++ b/tests/bindings/resources-in-cbuffer.hlsl @@ -2,12 +2,20 @@ // Confirm that resources inside constant buffers get correct locations, // including the case where there are *multiple* constant buffers -// with reosurces. +// with resources. #ifdef __SLANG__ #define R(X) /**/ +#define BEGIN_CBUFFER(NAME) cbuffer NAME { +#define MID_CBUFFER(NAME) /**/ +#define END_CBUFFER(NAME, REG) /**/ } +#define CBUFFER_REF(NAME, FIELD) FIELD #else #define R(X) X +#define BEGIN_CBUFFER(NAME) struct SLANG_ParameterGroup_##NAME { +#define MID_CBUFFER(NAME) }; +#define END_CBUFFER(NAME, REG) cbuffer NAME : REG { SLANG_ParameterGroup_##NAME NAME; } +#define CBUFFER_REF(NAME, FIELD) NAME.FIELD #define CA CA_0 #define caa caa_0 @@ -46,43 +54,52 @@ float4 use(float3 val) { return float4(val,0.0); }; float4 use(float4 val) { return val; }; float4 use(Texture2D t, SamplerState s) { return t.Sample(s, 0.0); } -cbuffer CA R(: register(b0)) -{ - float4 caa R(: packoffset(c0)); - float3 cab R(: packoffset(c1.x)); - float cac R(: packoffset(c1.w)); - float2 cad R(: packoffset(c2.x)); - float2 cae R(: packoffset(c2.z)); +BEGIN_CBUFFER(CA) + + float4 caa; + float3 cab; + float cac; + float2 cad; + float2 cae; + +MID_CBUFFER(CA) Texture2D ta R(: register(t0)); SamplerState sa R(: register(s0)); -} -cbuffer CB R(: register(b1)) -{ - float4 cba R(: packoffset(c0)); - float3 cbb R(: packoffset(c1.x)); - float cbc R(: packoffset(c1.w)); - float2 cbd R(: packoffset(c2.x)); - float2 cbe R(: packoffset(c2.z)); +END_CBUFFER(CA, register(b0)) + +BEGIN_CBUFFER(CB) + + float4 cba; + float3 cbb; + float cbc; + float2 cbd; + float2 cbe; + +MID_CBUFFER(CB) Texture2D tbx R(: register(t1)); Texture2D tby R(: register(t2)); SamplerState sb R(: register(s1)); -} -cbuffer CC R(: register(b2)) -{ - float4 cca R(: packoffset(c0)); - float3 ccb R(: packoffset(c1.x)); - float ccc R(: packoffset(c1.w)); - float2 ccd R(: packoffset(c2.x)); - float2 cce R(: packoffset(c2.z)); +END_CBUFFER(CB, register(b1)) + +BEGIN_CBUFFER(CC) + + float4 cca; + float3 ccb; + float ccc; + float2 ccd; + float2 cce; + +MID_CBUFFER(CC) Texture2D tc R(: register(t3)); SamplerState scx R(: register(s2)); SamplerState scy R(: register(s3)); -} + +END_CBUFFER(CC, register(b2)) float4 main() : SV_TARGET { @@ -91,8 +108,8 @@ float4 main() : SV_TARGET + use(tbx, sb) + use(tby, scx) + use(tc, scy) - + use(cae) - + use(cbe) - + use(cce) + + use(CBUFFER_REF(CA, cae)) + + use(CBUFFER_REF(CB, cbe)) + + use(CBUFFER_REF(CC, cce)) ; }
\ No newline at end of file |
