diff --git a/Makefile.am b/Makefile.am index 46202358f..8f76e072d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -120,6 +120,8 @@ vkd3d_shader_tests = \ tests/hlsl/effect-annotations-fx_4.shader_test \ tests/hlsl/effect-assignments-fx_5.shader_test \ tests/hlsl/effect-compile.shader_test \ + tests/hlsl/effect-constructgswithso-4.shader_test \ + tests/hlsl/effect-constructgswithso-5.shader_test \ tests/hlsl/effect-initial-values-fx_2.shader_test \ tests/hlsl/effect-initial-values-fx_4.shader_test \ tests/hlsl/effect-pass-states-fx_4.shader_test \ diff --git a/tests/hlsl/effect-compile.shader_test b/tests/hlsl/effect-compile.shader_test index c01f7c7b1..e443bff24 100644 --- a/tests/hlsl/effect-compile.shader_test +++ b/tests/hlsl/effect-compile.shader_test @@ -284,3 +284,62 @@ technique10 T0 PixelShader = compile ps_4_0 fun(4); } } + +[effect todo] +float4 vs( float4 Pos : POSITION ) : SV_POSITION { return Pos; } +float4 ps( float4 Pos : SV_POSITION ) : SV_Target { return float4( 1.0f, 1.0f, 0.0f, 1.0f ); } + +PixelShader p = CompileShader( ps_4_0, ps() ); +VertexShader v = CompileShader( vs_4_0, vs() ) ; + +VertexShader v0 = NULL; + +technique10 t0 +{ + pass p0 + { + PixelShader = p; + VertexShader = v; + } + + pass p1 + { + PixelShader = p; + VertexShader = v0; + } + + pass p2 + { + PixelShader = CompileShader( ps_4_0, ps() ); + VertexShader = CompileShader( vs_4_0, vs() ) ; + } + + pass p3 + { + PixelShader = NULL; + VertexShader = NULL; + } +} + +[effect todo] +float4 vs( float4 pos : POSITION ) : SV_POSITION { return pos; } +float4 vs2( float4 pos : POSITION ) : SV_POSITION { return pos + pos; } +float4 ps( float4 pos : SV_POSITION ) : SV_Target { return float4( 1.0f, 1.0f, 0.0f, 1.0f ); } + +VertexShader v[2] = { CompileShader( vs_4_0, vs() ), CompileShader( vs_4_0, vs2() ) }; +PixelShader p = CompileShader( ps_4_0, ps() ); + +technique10 t0 +{ + pass p0 + { + SetPixelShader(p); + SetVertexShader(v[0]); + } + + pass p1 + { + SetPixelShader(p); + SetVertexShader(v[1]); + } +} diff --git a/tests/hlsl/effect-constructgswithso-4.shader_test b/tests/hlsl/effect-constructgswithso-4.shader_test new file mode 100644 index 000000000..8c5e97a59 --- /dev/null +++ b/tests/hlsl/effect-constructgswithso-4.shader_test @@ -0,0 +1,40 @@ +[require] +shader model >= 4.0 +shader model < 6.0 + +[effect todo] +float4 main() : sv_position { return 0; } + +VertexShader vs = CompileShader(vs_4_0, main()); +GeometryShader gs = ConstructGSWithSO(vs, "foo"); + +technique11 +{ + pass p1 + { + SetGeometryShader(gs); + } + + pass p2 + { + SetGeometryShader(ConstructGSWithSO(gs, "mew")); + } +} + +[effect todo] +float4 main() : sv_position { return 0; } +GeometryShader chain = ConstructGSWithSO(CompileShader(vs_4_0, main()), "foo"); +GeometryShader chained = ConstructGSWithSO(ConstructGSWithSO(chain, "nya"), "mew"); + +technique11 +{ + pass p1 + { + SetGeometryShader(chain); + } + + pass p2 + { + SetGeometryShader(chained); + } +} diff --git a/tests/hlsl/effect-constructgswithso-5.shader_test b/tests/hlsl/effect-constructgswithso-5.shader_test new file mode 100644 index 000000000..07b86ff0d --- /dev/null +++ b/tests/hlsl/effect-constructgswithso-5.shader_test @@ -0,0 +1,26 @@ +[require] +shader model >= 5.0 +shader model < 6.0 + +[effect todo] +float4 main() : sv_position { return 0; } + +VertexShader vs = CompileShader(vs_4_0, main()); +GeometryShader gs = ConstructGSWithSO(vs, "foo", "nya", "mew", "boop", 1); + +technique11 +{ + pass p1 + { + SetGeometryShader(gs); + } + + pass p2 + { + SetGeometryShader(ConstructGSWithSO(CompileShader(vs_4_0, main()), "foo", NULL, NULL, NULL, 5)); + } +} + +[effect todo] +float4 main() : sv_position { return 0; } +GeometryShader gs = ConstructGSWithSO(CompileShader(vs_4_0, main()), "foo", NULL, NULL, NULL, 3 + 4 - 2);