From: Francisco Casas fcasas@codeweavers.com
---
I doubt we will need to implement support for register reservations for structs in the near future, since it would require an implementation capable of handling many register() entries.
Nevertheless, I added the tests to ilustrate why the next patch is a step in the right direction. --- tests/hlsl/register-reservations.shader_test | 73 ++++++++++++++++++++ 1 file changed, 73 insertions(+)
diff --git a/tests/hlsl/register-reservations.shader_test b/tests/hlsl/register-reservations.shader_test index 7e109eca..13e2fac2 100644 --- a/tests/hlsl/register-reservations.shader_test +++ b/tests/hlsl/register-reservations.shader_test @@ -156,3 +156,76 @@ float4 main() : sv_target [test] draw quad probe all rgba (2.0, 2.0, 2.0, 99.0) + + +[require] +shader model >= 5.0 + +[texture 0] +size (2, 2) +0.0 0.0 0.0 99.0 +0.0 0.0 0.0 99.0 +0.0 0.0 0.0 99.0 +0.0 0.0 0.0 99.0 + +[texture 1] +size (2, 2) +1.0 1.0 1.0 99.0 +1.0 1.0 1.0 99.0 +0.0 0.0 0.0 99.0 +0.0 0.0 0.0 99.0 + +[sampler 0] +filter point point point +address clamp clamp clamp + +[sampler 1] +filter linear linear linear +address clamp clamp clamp + +% If a struct spans many object register sets and one is reserved, all other used object register sets must be. +[pixel shader fail todo] +struct +{ + Texture2D tex; + sampler sam; +} foo : register(t1); + +float4 main() : sv_target +{ + return foo.tex.Sample(foo.sam, float2(0.4, 0)); +} + + +[pixel shader todo] +struct +{ + Texture2D tex; + sampler sam; +} foo : register(t1) : register(s1); + +float4 main() : sv_target +{ + return foo.tex.Sample(foo.sam, float2(0, 0.5)); +} + +[test] +todo draw quad +todo probe all rgba (0.5, 0.5, 0.5, 99.0) + + +[pixel shader] +struct +{ + Texture2D tex; + sampler sam; // unused. +} foo : register(t1); + +float4 main() : sv_target +{ + return foo.tex.Load(int3(0, 0, 0)); +} + +[test] +draw quad +todo probe all rgba (1.0, 1.0, 1.0, 99.0)