-- v6: tests: Test entry point semantics on function declarations. tests: Add more tests for early return from the entry point. tests: Add some tests for early return from user-defined functions. vkd3d-shader/hlsl: Emit a hlsl_fixme() for HLSL_IR_CALL instructions.
From: Zebediah Figura zfigura@codeweavers.com
Avoid outputting invalid shaders. --- libs/vkd3d-shader/hlsl_sm1.c | 4 ++ libs/vkd3d-shader/hlsl_sm4.c | 4 ++ tests/hlsl-function.shader_test | 8 ++-- tests/hlsl-numthreads.shader_test | 2 +- ...lsl-return-implicit-conversion.shader_test | 40 +++++++++---------- tests/hlsl-static-initializer.shader_test | 4 +- tests/hlsl-storage-qualifiers.shader_test | 4 +- tests/uav-out-param.shader_test | 4 +- 8 files changed, 39 insertions(+), 31 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl_sm1.c b/libs/vkd3d-shader/hlsl_sm1.c index a66d4028..facf81b8 100644 --- a/libs/vkd3d-shader/hlsl_sm1.c +++ b/libs/vkd3d-shader/hlsl_sm1.c @@ -824,6 +824,10 @@ static void write_sm1_instructions(struct hlsl_ctx *ctx, struct vkd3d_bytecode_b
switch (instr->type) { + case HLSL_IR_CALL: + hlsl_fixme(ctx, &instr->loc, "Inline call instructions.\n"); + break; + case HLSL_IR_CONSTANT: write_sm1_constant(ctx, buffer, instr); break; diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c index af59b7c7..fb14889d 100644 --- a/libs/vkd3d-shader/hlsl_sm4.c +++ b/libs/vkd3d-shader/hlsl_sm4.c @@ -2360,6 +2360,10 @@ static void write_sm4_block(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *
switch (instr->type) { + case HLSL_IR_CALL: + hlsl_fixme(ctx, &instr->loc, "Inline call instructions.\n"); + break; + case HLSL_IR_CONSTANT: write_sm4_constant(ctx, buffer, hlsl_ir_constant(instr)); break; diff --git a/tests/hlsl-function.shader_test b/tests/hlsl-function.shader_test index eee6f2d1..e3ed5819 100644 --- a/tests/hlsl-function.shader_test +++ b/tests/hlsl-function.shader_test @@ -118,7 +118,7 @@ void func() { }
-[pixel shader] +[pixel shader todo]
float func(in float a, out float b, inout float c) { @@ -139,10 +139,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.5, 0.6, 0.7, 0)
-[pixel shader] +[pixel shader todo]
void func(in float a, inout float2 b) { @@ -160,7 +160,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.6, 0.1, 0.5, 0)
% Recursion is forbidden. diff --git a/tests/hlsl-numthreads.shader_test b/tests/hlsl-numthreads.shader_test index 404d7d76..0d75a924 100644 --- a/tests/hlsl-numthreads.shader_test +++ b/tests/hlsl-numthreads.shader_test @@ -153,7 +153,7 @@ static int x = 1; [numthreads((x = 2), 1, 1)] void main() {}
-[compute shader] +[compute shader todo]
static int x = 1;
diff --git a/tests/hlsl-return-implicit-conversion.shader_test b/tests/hlsl-return-implicit-conversion.shader_test index e88a4109..a58d015d 100644 --- a/tests/hlsl-return-implicit-conversion.shader_test +++ b/tests/hlsl-return-implicit-conversion.shader_test @@ -38,7 +38,7 @@ float4x1 main() : sv_target draw quad probe all rgba (0.4, 0.3, 0.2, 0.1)
-[pixel shader] +[pixel shader todo] float3 func() { return float3x1(0.4, 0.3, 0.2); @@ -50,10 +50,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
-[pixel shader] +[pixel shader todo] float3 func() { return float1x3(0.4, 0.3, 0.2); @@ -65,10 +65,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
-[pixel shader] +[pixel shader todo] float1x3 func() { return float3(0.4, 0.3, 0.2); @@ -80,10 +80,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
-[pixel shader] +[pixel shader todo] float3x1 func() { return float3(0.4, 0.3, 0.2); @@ -95,7 +95,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
[pixel shader fail] @@ -120,7 +120,7 @@ float4 main() : sv_target return float4(func(), 0.0); }
-[pixel shader] +[pixel shader todo] float3 func() { return float4(0.4, 0.3, 0.2, 0.1); @@ -132,10 +132,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
-[pixel shader] +[pixel shader todo] float3 func() { return float4x1(0.4, 0.3, 0.2, 0.1); @@ -147,10 +147,10 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
-[pixel shader] +[pixel shader todo] float3 func() { return float1x4(0.4, 0.3, 0.2, 0.1); @@ -162,7 +162,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
[pixel shader fail todo] @@ -176,7 +176,7 @@ float4 main() : sv_target return float4(func(), 0.0); }
-[pixel shader] +[pixel shader todo] float3x1 func() { return float4x1(0.4, 0.3, 0.2, 0.1); @@ -188,7 +188,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
[pixel shader fail] @@ -202,7 +202,7 @@ float4 main() : sv_target return float4(func(), 0.0); }
-[pixel shader] +[pixel shader todo] float1x3 func() { return float4(0.4, 0.3, 0.2, 0.1); @@ -214,7 +214,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0)
[pixel shader fail] @@ -228,7 +228,7 @@ float4 main() : sv_target return float4(func(), 0.0); }
-[pixel shader] +[pixel shader todo] float1x3 func() { return float1x4(0.4, 0.3, 0.2, 0.1); @@ -240,5 +240,5 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.4, 0.3, 0.2, 0.0) diff --git a/tests/hlsl-static-initializer.shader_test b/tests/hlsl-static-initializer.shader_test index 6dc874f9..286145c4 100644 --- a/tests/hlsl-static-initializer.shader_test +++ b/tests/hlsl-static-initializer.shader_test @@ -1,4 +1,4 @@ -[pixel shader] +[pixel shader todo] float myfunc() { return 0.6; @@ -12,7 +12,7 @@ float4 main() : sv_target }
[test] -draw quad +todo draw quad todo probe all rgba (0.8, 0.0, 0.0, 0.0)
diff --git a/tests/hlsl-storage-qualifiers.shader_test b/tests/hlsl-storage-qualifiers.shader_test index 59066c5f..965101e8 100644 --- a/tests/hlsl-storage-qualifiers.shader_test +++ b/tests/hlsl-storage-qualifiers.shader_test @@ -1,4 +1,4 @@ -[pixel shader] +[pixel shader todo] void sub2(in uniform float4 i, out float4 o) { o = i; @@ -17,5 +17,5 @@ void main(in uniform float4 a, uniform float4 b, out float4 o : sv_target) [test] uniform 0 float4 0.1 0.0 0.0 0.0 uniform 4 float4 0.2 0.0 0.0 0.0 -draw quad +todo draw quad todo probe all rgba (0.1, 0.2, 0.3, 0.4) diff --git a/tests/uav-out-param.shader_test b/tests/uav-out-param.shader_test index 054a2da6..646d14f6 100644 --- a/tests/uav-out-param.shader_test +++ b/tests/uav-out-param.shader_test @@ -7,7 +7,7 @@ size (1, 1)
0.1 0.2 0.3 0.4
-[compute shader] +[compute shader todo]
RWTexture2D<float4> u;
@@ -23,5 +23,5 @@ void main() }
[test] -dispatch 1 1 1 +todo dispatch 1 1 1 todo probe uav 0 (0, 0) rgba (0.1, 0.3, 0.3, 0.5)
From: Zebediah Figura zfigura@codeweavers.com
--- Makefile.am | 1 + tests/function-return.shader_test | 315 ++++++++++++++++++++++++++++++ 2 files changed, 316 insertions(+) create mode 100644 tests/function-return.shader_test
diff --git a/Makefile.am b/Makefile.am index a2625a5c..a8f91ca4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -62,6 +62,7 @@ vkd3d_shader_tests = \ tests/exp.shader_test \ tests/floor.shader_test \ tests/frac.shader_test \ + tests/function-return.shader_test \ tests/hlsl-array-dimension.shader_test \ tests/hlsl-attributes.shader_test \ tests/hlsl-bool-cast.shader_test \ diff --git a/tests/function-return.shader_test b/tests/function-return.shader_test new file mode 100644 index 00000000..32fd01f9 --- /dev/null +++ b/tests/function-return.shader_test @@ -0,0 +1,315 @@ +% Test early return from a user-defined function. + +[pixel shader todo] + +float func(out float o) +{ + o = 0.1; + return 0.2; + o = 0.3; + return 0.4; +} + +void func2(out float o) +{ + o = 0.5; + return; + o = 0.6; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.z = 0.7; + ret.x = func(ret.y); + func2(ret.w); + ret.z = 0.8; + return ret; +} + +[test] +todo draw quad +probe all rgba (0.2, 0.1, 0.8, 0.5); + +[pixel shader todo] + +uniform float f; + +float func(out float o) +{ + o = 0.1; + if (f < 0.3) + { + return 0.2; + o = 0.3; + } + else if (f < 0.7) + { + o = 0.4; + return 0.5; + } + o = 0.6; + return 0.7; +} + +float func2(out float o) +{ + o = 0.1; + if (f < 0.5) + { + o = 0.2; + } + else + { + o = 0.4; + return 0.3; + } + return 0.5; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.x = func(ret.y); + ret.z = func2(ret.w); + ret += 0.1; + return ret; +} + +[test] +uniform 0 float 0.1 +todo draw quad +probe all rgba (0.3, 0.2, 0.6, 0.3) 1 +uniform 0 float 0.4 +todo draw quad +probe all rgba (0.6, 0.5, 0.6, 0.3) 1 +uniform 0 float 0.6 +todo draw quad +probe all rgba (0.6, 0.5, 0.4, 0.5) 1 +uniform 0 float 0.8 +todo draw quad +probe all rgba (0.8, 0.7, 0.4, 0.5) 1 + +[pixel shader todo] + +uniform float f; + +float func(out float o) +{ + o = 0.1; + if (f < 0.3) + { + return 0.2; + } + o += 0.3; + if (f < 0.7) + { + return 0.5; + } + o += 0.5; + return 1.0; +} + +float func2(out float o) +{ + o = 0.1; + if (f < 0.7) + { + if (f < 0.3) + return 0.2; + o += 0.3; + } + o += 0.5; + return 1.0; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.x = func(ret.y); + ret.z = func2(ret.w); + return ret; +} + +[test] +uniform 0 float 0.1 +todo draw quad +probe all rgba (0.2, 0.1, 0.2, 0.1) 1 +uniform 0 float 0.5 +todo draw quad +probe all rgba (0.5, 0.4, 1.0, 0.9) 1 +uniform 0 float 0.9 +todo draw quad +probe all rgba (1.0, 0.9, 1.0, 0.6) 1 + +[pixel shader todo] + +float func(out float o) +{ + o = 0.1; + for (;;) + { + o *= 2; + return 0.3; + o *= 3; + } + o = 0; + return 0.4; +} + +float func2(out float o) +{ + o = 0.1; + for (;;) + { + if (o > 0.5) + return 0.2; + o *= 2; + } + o = 0; + return 0.3; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.x = func(ret.y); + ret.z = func2(ret.w); + ret += 0.1; + return ret; +} + +[test] +todo draw quad +probe all rgba (0.4, 0.3, 0.3, 0.9) 1 + +[pixel shader todo] + +uniform float f; + +float func(out float o) +{ + int i; + + o = 0.1; + for (i = 0; i < 4; ++i) + { + if (o > f) + return 0.2; + o *= 2; + } + o = 0; + return 0.3; +} + +float func2(out float o) +{ + if (f < 0.5) + { + o = 0.1; + for (;;) + { + o *= 2; + return 0.2; + } + o *= 3; + return 0.3; + } + else + { + o = 0.4; + } + o = 0.5; + return 0.6; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.x = func(ret.y); + ret.z = func2(ret.w); + ret += 0.1; + return ret; +} + +[test] +uniform 0 float 0.0 +todo draw quad +probe all rgba (0.3, 0.2, 0.3, 0.3) 1 + +uniform 0 float 0.1 +todo draw quad +probe all rgba (0.3, 0.3, 0.3, 0.3) 1 + +uniform 0 float 0.3 +todo draw quad +probe all rgba (0.3, 0.5, 0.3, 0.3) 1 + +uniform 0 float 0.7 +todo draw quad +probe all rgba (0.3, 0.9, 0.7, 0.6) 1 + +uniform 0 float 0.9 +todo draw quad +probe all rgba (0.4, 0.1, 0.7, 0.6) 1 + +[pixel shader todo] + +uniform float4 f[3]; + +float func(out float o) +{ + int i, j; + + o = 0.1; + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 3; ++j) + { + if (o > f[j].x) + return 0.2; + } + o *= 2; + } + o = 0; + return 0.3; +} + +float4 main() : sv_target +{ + float4 ret; + + ret.x = func(ret.y); + ret.zw = 0.5; + ret += 0.1; + return ret; +} + +[test] + +uniform 0 float4 0.3 0.0 0.0 0.0 +uniform 4 float4 0.0 0.0 0.0 0.0 +uniform 8 float4 0.1 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.3, 0.2, 0.6, 0.6) 1 + +uniform 4 float4 0.35 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.3, 0.3, 0.6, 0.6) 1 + +uniform 8 float4 0.5 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.3, 0.5, 0.6, 0.6) 1 + +uniform 0 float4 1.0 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.3, 0.5, 0.6, 0.6) 1 + +uniform 4 float4 2.0 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.4, 0.1, 0.6, 0.6) 1
From: Zebediah Figura zfigura@codeweavers.com
--- Makefile.am | 2 +- tests/hlsl-return-void.shader_test | 11 -- tests/return.shader_test | 263 +++++++++++++++++++++++++++++ 3 files changed, 264 insertions(+), 12 deletions(-) delete mode 100644 tests/hlsl-return-void.shader_test create mode 100644 tests/return.shader_test
diff --git a/Makefile.am b/Makefile.am index a8f91ca4..959da8f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -102,7 +102,6 @@ vkd3d_shader_tests = \ tests/hlsl-numeric-types.shader_test \ tests/hlsl-numthreads.shader_test \ tests/hlsl-return-implicit-conversion.shader_test \ - tests/hlsl-return-void.shader_test \ tests/hlsl-shape.shader_test \ tests/hlsl-single-numeric-initializer.shader_test \ tests/hlsl-smoothstep.shader_test \ @@ -130,6 +129,7 @@ vkd3d_shader_tests = \ tests/preproc-invalid.shader_test \ tests/preproc-macro.shader_test \ tests/preproc-misc.shader_test \ + tests/return.shader_test \ tests/round.shader_test \ tests/sampler.shader_test \ tests/sampler-offset.shader_test \ diff --git a/tests/hlsl-return-void.shader_test b/tests/hlsl-return-void.shader_test deleted file mode 100644 index d7231d6c..00000000 --- a/tests/hlsl-return-void.shader_test +++ /dev/null @@ -1,11 +0,0 @@ -[pixel shader] -void main(out float4 ret : sv_target) -{ - ret = float4(0.1, 0.2, 0.3, 0.4); - return; - ret = float4(0.5, 0.6, 0.7, 0.8); -} - -[test] -draw quad -todo probe all rgba (0.1, 0.2, 0.3, 0.4) diff --git a/tests/return.shader_test b/tests/return.shader_test new file mode 100644 index 00000000..e913d15d --- /dev/null +++ b/tests/return.shader_test @@ -0,0 +1,263 @@ +% Test early return from the entry point. + +[pixel shader] + +float4 main() : sv_target +{ + return float4(0.1, 0.2, 0.3, 0.4); + return float4(0.5, 0.6, 0.7, 0.8); +} + +[test] +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) + +[pixel shader] + +void main(out float4 ret : sv_target) +{ + ret = float4(0.1, 0.2, 0.3, 0.4); + return; + ret = float4(0.5, 0.6, 0.7, 0.8); +} + +[test] +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) + +[pixel shader] + +uniform float f; + +float4 main() : sv_target +{ + if (f < 0.5) + return float4(0.1, 0.2, 0.3, 0.4); + return float4(0.5, 0.6, 0.7, 0.8); +} + +[test] +uniform 0 float 0.2 +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) +uniform 0 float 0.8 +draw quad +probe all rgba (0.5, 0.6, 0.7, 0.8) + +[pixel shader] + +uniform float f; + +void main(out float4 ret : sv_target) +{ + ret = float4(0.1, 0.2, 0.3, 0.4); + if (f < 0.5) + { + ret += 0.1; + } + else + { + return; + ret += 0.3; + } + ret += 0.1; +} + +[test] +uniform 0 float 0.2 +draw quad +probe all rgba (0.3, 0.4, 0.5, 0.6) +uniform 0 float 0.8 +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) + +[pixel shader] + +uniform float f; + +void main(out float4 ret : sv_target) +{ + ret = float4(0.1, 0.2, 0.3, 0.4); + if (f < 0.3) + { + return; + } + ret += 0.1; + if (f < 0.7) + { + return; + } + ret += 0.3; +} + +[test] +uniform 0 float 0.1 +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) 1 +uniform 0 float 0.5 +draw quad +todo probe all rgba (0.2, 0.3, 0.4, 0.5) 1 +uniform 0 float 0.9 +draw quad +probe all rgba (0.5, 0.6, 0.7, 0.8) 1 + +[pixel shader] + +uniform float f; + +void main(out float4 ret : sv_target) +{ + ret = float4(0.1, 0.2, 0.3, 0.4); + if (f < 0.7) + { + if (f < 0.3) + return; + ret += 0.1; + } + ret += 0.3; +} + +[test] +uniform 0 float 0.1 +draw quad +todo probe all rgba (0.1, 0.2, 0.3, 0.4) 1 +uniform 0 float 0.5 +draw quad +probe all rgba (0.5, 0.6, 0.7, 0.8) 1 +uniform 0 float 0.9 +draw quad +probe all rgba (0.4, 0.5, 0.6, 0.7) 1 + +[pixel shader todo] + +void main(out float4 ret : sv_target) +{ + ret = float4(0.1, 0.2, 0.3, 0.4); + for (;;) + { + ret *= 2; + return; + ret *= 3; + } + ret += 0.1; +} + +[test] +todo draw quad +todo probe all rgba (0.2, 0.4, 0.6, 0.8) + +[pixel shader] + +uniform float f; + +void main(out float4 ret : sv_target) +{ + int i; + + ret = 0.1; + for (i = 0; i < 4; ++i) + { + if (ret.x > f) + return; + ret *= 2; + } + ret = 0.9; +} + +[test] +uniform 0 float 0.0 +draw quad +todo probe all rgba (0.1, 0.1, 0.1, 0.1) 1 + +uniform 0 float 0.1 +draw quad +todo probe all rgba (0.2, 0.2, 0.2, 0.2) 1 + +uniform 0 float 0.3 +draw quad +todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1 + +uniform 0 float 0.7 +draw quad +todo probe all rgba (0.8, 0.8, 0.8, 0.8) 1 + +uniform 0 float 0.9 +draw quad +todo probe all rgba (0.9, 0.9, 0.9, 0.9) 1 + +[pixel shader todo] + +uniform float f; + +void main(out float4 ret : sv_target) +{ + if (f < 0.5) + { + ret = 0.1; + for (;;) + { + ret *= 2; + return; + } + ret *= 3; + return; + } + else + { + ret = 0.4; + } + ret = 0.5; +} + +[test] +uniform 0 float 0.2 +todo draw quad +todo probe all rgba (0.2, 0.2, 0.2, 0.2) +uniform 0 float 0.8 +todo draw quad +todo probe all rgba (0.5, 0.5, 0.5, 0.5) + +[pixel shader todo] + +uniform float4 f[3]; + +void main(out float4 ret : sv_target) +{ + int i, j; + + ret = 0.1; + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 3; ++j) + { + if (ret.x > f[j].x) + return; + } + ret *= 2; + } + ret = 0.9; +} + +[test] + +uniform 0 float4 0.3 0.0 0.0 0.0 +uniform 4 float4 0.0 0.0 0.0 0.0 +uniform 8 float4 0.1 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.1, 0.1, 0.1, 0.1) 1 + +uniform 4 float4 0.35 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.2, 0.2, 0.2, 0.2) 1 + +uniform 8 float4 0.5 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1 + +uniform 0 float4 1.0 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1 + +uniform 4 float4 2.0 0.0 0.0 0.0 +todo draw quad +todo probe all rgba (0.9, 0.9, 0.9, 0.9) 1
From: Zebediah Figura zfigura@codeweavers.com
--- Makefile.am | 1 + tests/entry-point-semantics.shader_test | 52 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 tests/entry-point-semantics.shader_test
diff --git a/Makefile.am b/Makefile.am index 959da8f5..f9199472 100644 --- a/Makefile.am +++ b/Makefile.am @@ -59,6 +59,7 @@ vkd3d_shader_tests = \ tests/cbuffer.shader_test \ tests/compute.shader_test \ tests/conditional.shader_test \ + tests/entry-point-semantics.shader_test \ tests/exp.shader_test \ tests/floor.shader_test \ tests/frac.shader_test \ diff --git a/tests/entry-point-semantics.shader_test b/tests/entry-point-semantics.shader_test new file mode 100644 index 00000000..a32a0e7b --- /dev/null +++ b/tests/entry-point-semantics.shader_test @@ -0,0 +1,52 @@ +% Test how semantics are determined when spread across the entry point's +% definition and its declarations. + +[vertex shader] +void main(out float tex : texcoord, inout float4 pos : sv_position) +{ + tex = 0.2; +} + +[pixel shader fail] + +float4 main(float tex : texcoord) : sv_target; + +float4 main(float tex) +{ + return tex; +} + +[pixel shader fail] + +float4 main(float tex) +{ + return tex; +} + +float4 main(float tex : texcoord) : sv_target; + +[pixel shader] + +float4 main(float tex : bogus) : bogus; + +float4 main(float tex : texcoord) : sv_target +{ + return tex; +} + +[test] +draw quad +probe (0, 0) rgba (0.2, 0.2, 0.2, 0.2) + +[pixel shader] + +float4 main(float tex : texcoord) : sv_target +{ + return tex; +} + +float4 main(float tex : bogus) : bogus; + +[test] +draw quad +probe (0, 0) rgba (0.2, 0.2, 0.2, 0.2)
This merge request was approved by Henri Verbeet.