2023-02-09 17:43:49 -03:00
|
|
|
[require]
|
|
|
|
shader model >= 4.0
|
|
|
|
|
|
|
|
|
|
|
|
[texture 0]
|
|
|
|
size (1, 1)
|
|
|
|
0.0 0.0 0.0 99.0
|
|
|
|
|
|
|
|
[texture 1]
|
|
|
|
size (1, 1)
|
|
|
|
1.0 1.0 1.0 99.0
|
|
|
|
|
|
|
|
[texture 2]
|
|
|
|
size (1, 1)
|
|
|
|
2.0 2.0 2.0 99.0
|
|
|
|
|
|
|
|
[texture 3]
|
|
|
|
size (1, 1)
|
|
|
|
3.0 3.0 3.0 99.0
|
|
|
|
|
|
|
|
[texture 4]
|
|
|
|
size (1, 1)
|
|
|
|
4.0 4.0 4.0 99.0
|
|
|
|
|
|
|
|
|
2023-04-17 19:07:01 -04:00
|
|
|
% If a single component in a texture array is used, all registers are reserved.
|
2023-04-25 14:03:50 -04:00
|
|
|
[pixel shader]
|
2023-04-17 19:07:01 -04:00
|
|
|
Texture2D partially_used[2][2];
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return 10 * tex.Load(int3(0, 0, 0)) + partially_used[0][1].Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2023-09-14 19:29:24 +10:00
|
|
|
todo(sm>=6) draw quad
|
2023-04-25 14:03:50 -04:00
|
|
|
probe all rgba (41.0, 41.0, 41.0, 1089.0)
|
2023-04-17 19:07:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
% If no component in a texture array is used, and it doesn't have a register reservation, no
|
|
|
|
% register is reserved.
|
|
|
|
[pixel shader]
|
|
|
|
Texture2D unused[4];
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-04-17 19:07:01 -04:00
|
|
|
probe all rgba (0.0, 0.0, 0.0, 99.0)
|
|
|
|
|
|
|
|
|
|
|
|
% Register reservations force to reserve all the resource registers. Even if unused.
|
2023-02-09 17:43:49 -03:00
|
|
|
[pixel shader]
|
|
|
|
Texture2D unused : register(t0);
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-01-31 12:45:54 -03:00
|
|
|
probe all rgba (1.0, 1.0, 1.0, 99.0)
|
2023-02-09 17:43:49 -03:00
|
|
|
|
|
|
|
|
2023-06-18 12:06:55 +02:00
|
|
|
% Register reservation with incorrect register type.
|
2023-06-21 12:28:44 -05:00
|
|
|
[pixel shader]
|
2023-06-18 12:06:55 +02:00
|
|
|
Texture2D unused : register(s0);
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
2024-01-25 13:28:46 +10:00
|
|
|
[require]
|
|
|
|
shader model >= 4.0
|
|
|
|
shader model < 6.0
|
|
|
|
|
2023-06-18 12:06:55 +02:00
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-06-18 12:06:55 +02:00
|
|
|
probe all rgba (0.0, 0.0, 0.0, 99.0)
|
|
|
|
|
2024-01-25 13:28:46 +10:00
|
|
|
[require]
|
|
|
|
shader model >= 6.0
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
|
|
|
probe all rgba (1.0, 1.0, 1.0, 99.0)
|
|
|
|
|
|
|
|
[require]
|
|
|
|
shader model >= 4.0
|
|
|
|
|
2023-06-18 12:06:55 +02:00
|
|
|
|
|
|
|
% Register reservation with incorrect register type.
|
2023-09-14 19:29:24 +10:00
|
|
|
[pixel shader fail(sm>=6)]
|
2023-06-18 12:06:55 +02:00
|
|
|
sampler2D unused : register(t0);
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[test]
|
2023-06-21 12:28:44 -05:00
|
|
|
draw quad
|
2023-06-18 12:06:55 +02:00
|
|
|
probe all rgba (0.0, 0.0, 0.0, 99.0)
|
|
|
|
|
2023-02-09 17:43:49 -03:00
|
|
|
[pixel shader]
|
|
|
|
Texture2D unused[2][2] : register(t0);
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-04-25 12:41:38 -04:00
|
|
|
probe all rgba (4.0, 4.0, 4.0, 99.0)
|
2023-06-18 12:06:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
% Overlapping reservations, both overlapping objects are unused.
|
2023-06-21 12:21:19 -05:00
|
|
|
[pixel shader]
|
2023-06-18 12:06:55 +02:00
|
|
|
Texture2D tex1 : register(t0);
|
|
|
|
Texture2D tex2 : register(t0);
|
|
|
|
Texture2D tex3;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex3.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-06-18 12:06:55 +02:00
|
|
|
probe all rgba (1.0, 1.0, 1.0, 99.0)
|
|
|
|
|
|
|
|
|
|
|
|
% Overlapping reservations
|
2023-06-21 12:21:19 -05:00
|
|
|
[pixel shader]
|
2023-06-18 12:06:55 +02:00
|
|
|
Texture2D tex1 : register(t2);
|
|
|
|
Texture2D tex2 : register(t2);
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex1.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-06-18 12:06:55 +02:00
|
|
|
probe all rgba (2.0, 2.0, 2.0, 99.0)
|
2023-06-25 23:03:53 +02:00
|
|
|
|
|
|
|
|
2023-06-27 13:14:37 -05:00
|
|
|
[pixel shader]
|
2023-06-25 23:03:53 +02:00
|
|
|
Texture2D tex1 : register(t2);
|
|
|
|
Texture2D tex2 : register(t2);
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
return tex2.Load(int3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
2023-06-25 23:03:53 +02:00
|
|
|
probe all rgba (2.0, 2.0, 2.0, 99.0)
|
2023-09-11 18:44:39 -03:00
|
|
|
|
|
|
|
|
|
|
|
[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.
|
2023-09-14 19:29:24 +10:00
|
|
|
[pixel shader fail(sm<6) todo]
|
2023-09-11 18:44:39 -03:00
|
|
|
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]
|
2024-01-25 13:28:46 +10:00
|
|
|
draw quad
|
|
|
|
todo(sm<6) probe all rgba (1.0, 1.0, 1.0, 99.0)
|