2023-07-25 01:46:54 -07:00
|
|
|
[require]
|
|
|
|
shader model >= 4.0
|
|
|
|
|
|
|
|
[sampler 0]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 1]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 2]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 3]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 4]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 5]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[sampler 6]
|
|
|
|
filter linear linear linear
|
|
|
|
address clamp clamp clamp
|
|
|
|
|
|
|
|
[texture 0]
|
|
|
|
size (1, 1)
|
|
|
|
0.0 0.0 0.0 1.0
|
|
|
|
|
|
|
|
[texture 1]
|
|
|
|
size (1, 1)
|
|
|
|
1.0 1.0 1.0 1.0
|
|
|
|
|
|
|
|
[texture 2]
|
|
|
|
size (1, 1)
|
|
|
|
2.0 2.0 2.0 1.0
|
|
|
|
|
|
|
|
[texture 3]
|
|
|
|
size (1, 1)
|
|
|
|
3.0 3.0 3.0 1.0
|
|
|
|
|
|
|
|
[texture 4]
|
|
|
|
size (1, 1)
|
|
|
|
4.0 4.0 4.0 1.0
|
|
|
|
|
|
|
|
[texture 5]
|
|
|
|
size (1, 1)
|
|
|
|
5.0 5.0 5.0 1.0
|
|
|
|
|
|
|
|
[texture 6]
|
|
|
|
size (1, 1)
|
|
|
|
6.0 6.0 6.0 1.0
|
|
|
|
|
|
|
|
[texture 7]
|
|
|
|
size (1, 1)
|
|
|
|
7.0 7.0 7.0 1.0
|
|
|
|
|
|
|
|
[texture 8]
|
|
|
|
size (1, 1)
|
|
|
|
8.0 8.0 8.0 1.0
|
|
|
|
|
|
|
|
[texture 9]
|
|
|
|
size (1, 1)
|
|
|
|
9.0 9.0 9.0 1.0
|
|
|
|
|
|
|
|
|
|
|
|
% Regarding resource allocation ordering in SM4, textures go in this order:
|
|
|
|
% 1. Textures created from SM1-style samples, in decreasing "bind count".
|
|
|
|
% In case there is a tie in the "bind count", the order is given by the order of appearance of
|
|
|
|
% the tex1D/tex2D/tex3D/texCube calls that create them.
|
|
|
|
% 2. Regular textures in order of declaration.
|
|
|
|
%
|
|
|
|
% Note that the "bind count" should not be confused with the "allocation size".
|
|
|
|
%
|
|
|
|
% The "bind count" appears in the RDEF table ("Count" row), and is determined by the last field
|
|
|
|
% actually used.
|
|
|
|
% The "allocation size" for textures affects the starting register id for the next resource in the
|
|
|
|
% table, and may be larger than the "bind count".
|
|
|
|
|
2023-08-25 06:05:51 -07:00
|
|
|
[require]
|
|
|
|
options: backcompat
|
|
|
|
|
2023-07-25 01:46:54 -07:00
|
|
|
[pixel shader]
|
|
|
|
// Name Type Format Dim HLSL Bind Count
|
|
|
|
// ------------------------------ ---------- ------- ----------- -------------- ------
|
|
|
|
// sam_arr_10 sampler NA NA s0 1
|
|
|
|
// sam_arr_01 sampler NA NA s1 2
|
|
|
|
// sam_arr_11 sampler NA NA s3 2
|
|
|
|
// samA sampler NA NA s5 1
|
|
|
|
// samB sampler NA NA s6 1
|
|
|
|
// sam_arr_11 texture float4 2d t0 2
|
|
|
|
// sam_arr_01 texture float4 2d t2 2
|
|
|
|
// samB texture float4 2d t4 1
|
|
|
|
// sam_arr_10 texture float4 2d t5 1
|
|
|
|
// samA texture float4 2d t6 1
|
|
|
|
// tex texture float4 2d t7 1
|
|
|
|
// texs texture float4 2d t8 2
|
|
|
|
|
|
|
|
Texture2D tex;
|
|
|
|
Texture2D texs[2];
|
|
|
|
sampler samA;
|
|
|
|
sampler samB;
|
|
|
|
sampler sam_arr_10[2];
|
|
|
|
sampler sam_arr_01[2];
|
|
|
|
sampler sam_arr_11[2];
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
float4 f = 0, g = 0, h = 0, res;
|
|
|
|
|
|
|
|
f += 100 * tex2D(samB, float2(0, 0));
|
|
|
|
f += 10 * tex2D(sam_arr_10[0], float2(0, 0));
|
|
|
|
f += 1 * tex2D(sam_arr_11[0], float2(0, 0));
|
|
|
|
g += 100 * tex2D(sam_arr_11[1], float2(0, 0));
|
|
|
|
g += 10 * tex2D(sam_arr_01[1], float2(0, 0));
|
|
|
|
g += 1 * texs[1].Load(int3(0, 0, 0));
|
|
|
|
h += 100 * texs[0].Load(int3(0, 0, 0));
|
|
|
|
h += 10 * tex.Load(int3(0, 0, 0));
|
|
|
|
h += 1 * tex2D(samA, float2(0, 0));
|
|
|
|
|
|
|
|
res.x = f.x;
|
|
|
|
res.y = g.x;
|
|
|
|
res.z = h.x;
|
|
|
|
res.w = f.w + g.w + h.w;
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
2023-08-04 12:02:39 -07:00
|
|
|
probe all rgba (450, 139, 876, 333)
|
2023-07-25 01:46:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
% Same as the first test, but inverting the declaration order.
|
|
|
|
% Regarding textures, only the allocation of those that are not created from samplers is affected.
|
|
|
|
[pixel shader]
|
|
|
|
// Name Type Format Dim HLSL Bind Count
|
|
|
|
// ------------------------------ ---------- ------- ----------- -------------- ------
|
|
|
|
// sam_arr_11 sampler NA NA s0 2
|
|
|
|
// sam_arr_01 sampler NA NA s2 2
|
|
|
|
// sam_arr_10 sampler NA NA s4 1
|
|
|
|
// samB sampler NA NA s5 1
|
|
|
|
// samA sampler NA NA s6 1
|
|
|
|
// sam_arr_11 texture float4 2d t0 2
|
|
|
|
// sam_arr_01 texture float4 2d t2 2
|
|
|
|
// samB texture float4 2d t4 1
|
|
|
|
// sam_arr_10 texture float4 2d t5 1
|
|
|
|
// samA texture float4 2d t6 1
|
|
|
|
// texs texture float4 2d t7 2
|
|
|
|
// tex texture float4 2d t9 1
|
|
|
|
|
|
|
|
sampler sam_arr_11[2];
|
|
|
|
sampler sam_arr_01[2];
|
|
|
|
sampler sam_arr_10[2];
|
|
|
|
sampler samB;
|
|
|
|
sampler samA;
|
|
|
|
Texture2D texs[2];
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
float4 f = 0, g = 0, h = 0, res;
|
|
|
|
|
|
|
|
f += 100 * tex2D(samB, float2(0, 0));
|
|
|
|
f += 10 * tex2D(sam_arr_10[0], float2(0, 0));
|
|
|
|
f += 1 * tex2D(sam_arr_11[0], float2(0, 0));
|
|
|
|
g += 100 * tex2D(sam_arr_11[1], float2(0, 0));
|
|
|
|
g += 10 * tex2D(sam_arr_01[1], float2(0, 0));
|
|
|
|
g += 1 * texs[1].Load(int3(0, 0, 0));
|
|
|
|
h += 100 * texs[0].Load(int3(0, 0, 0));
|
|
|
|
h += 10 * tex.Load(int3(0, 0, 0));
|
|
|
|
h += 1 * tex2D(samA, float2(0, 0));
|
|
|
|
|
|
|
|
res.x = f.x;
|
|
|
|
res.y = g.x;
|
|
|
|
res.z = h.x;
|
|
|
|
res.w = f.w + g.w + h.w;
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
2023-08-04 12:02:39 -07:00
|
|
|
probe all rgba (450, 138, 796, 333)
|
2023-07-25 01:46:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
% Same as the first test, but inverting the resource loads order.
|
|
|
|
% Regarding textures, only the allocation of those that are created from samplers is affected.
|
|
|
|
[pixel shader]
|
|
|
|
// Name Type Format Dim HLSL Bind Count
|
|
|
|
// ------------------------------ ---------- ------- ----------- -------------- ------
|
|
|
|
// sam_arr_10 sampler NA NA s0 1
|
|
|
|
// sam_arr_01 sampler NA NA s1 2
|
|
|
|
// sam_arr_11 sampler NA NA s3 2
|
|
|
|
// samA sampler NA NA s5 1
|
|
|
|
// samB sampler NA NA s6 1
|
|
|
|
// sam_arr_01 texture float4 2d t0 2
|
|
|
|
// sam_arr_11 texture float4 2d t2 2
|
|
|
|
// samA texture float4 2d t4 1
|
|
|
|
// sam_arr_10 texture float4 2d t5 1
|
|
|
|
// samB texture float4 2d t6 1
|
|
|
|
// tex texture float4 2d t7 1
|
|
|
|
// texs texture float4 2d t8 2
|
|
|
|
|
|
|
|
Texture2D tex;
|
|
|
|
Texture2D texs[2];
|
|
|
|
sampler samA;
|
|
|
|
sampler samB;
|
|
|
|
sampler sam_arr_10[2];
|
|
|
|
sampler sam_arr_01[2];
|
|
|
|
sampler sam_arr_11[2];
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
float4 f = 0, g = 0, h = 0, res;
|
|
|
|
|
|
|
|
f += 100 * tex2D(samA, float2(0, 0));
|
|
|
|
f += 10 * tex.Load(int3(0, 0, 0));
|
|
|
|
f += 1 * texs[0].Load(int3(0, 0, 0));
|
|
|
|
g += 100 * texs[1].Load(int3(0, 0, 0));
|
|
|
|
g += 10 * tex2D(sam_arr_01[1], float2(0, 0));
|
|
|
|
g += 1 * tex2D(sam_arr_11[1], float2(0, 0));
|
|
|
|
h += 100 * tex2D(sam_arr_11[0], float2(0, 0));
|
|
|
|
h += 10 * tex2D(sam_arr_10[0], float2(0, 0));
|
|
|
|
h += 1 * tex2D(samB, float2(0, 0));
|
|
|
|
|
|
|
|
res.x = f.x;
|
|
|
|
res.y = g.x;
|
|
|
|
res.z = h.x;
|
|
|
|
res.w = f.w + g.w + h.w;
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
2023-08-04 12:02:39 -07:00
|
|
|
probe all rgba (478, 913, 256, 333)
|
2023-07-25 01:46:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
% We can conclude that for declared texture arrays, if they are used, the "allocation size" is the
|
|
|
|
% whole array.
|
|
|
|
% On the other hand, for textures generated from samplers. the "allocation size" is the "bind count".
|
|
|
|
[pixel shader]
|
|
|
|
// Name Type Format Dim HLSL Bind Count
|
|
|
|
// ------------------------------ ---------- ------- ----------- -------------- ------
|
|
|
|
// sam_arr sampler NA NA s0 2
|
|
|
|
// sam sampler NA NA s2 1
|
|
|
|
// sam_arr texture float4 2d t0 2
|
|
|
|
// texs texture float4 2d t2 1
|
|
|
|
// tex texture float4 2d t5 1
|
|
|
|
|
|
|
|
sampler sam;
|
|
|
|
|
|
|
|
Texture2D texs[3];
|
|
|
|
sampler sam_arr[3];
|
|
|
|
Texture2D tex;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
float4 res = 0;
|
|
|
|
|
|
|
|
res += 100 * texs[0].Sample(sam, float2(0, 0));
|
|
|
|
res += 10 * tex2D(sam_arr[1], float2(0, 0));
|
|
|
|
res += 1 * tex.Sample(sam, float2(0, 0));
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
2023-08-04 12:02:39 -07:00
|
|
|
probe all rgba (215, 215, 215, 111)
|
2023-07-25 01:46:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
% Test that textures created from SM1-style samples allocation order is in decreasing "bind count".
|
|
|
|
[pixel shader]
|
|
|
|
// Name Type Format Dim HLSL Bind Count
|
|
|
|
// ------------------------------ ---------- ------- ----------- -------------- ------
|
|
|
|
// tex_100 sampler NA NA s0 1
|
|
|
|
// tex_010 sampler NA NA s1 2
|
|
|
|
// tex_001 sampler NA NA s3 3
|
|
|
|
// tex_001 texture float4 2d t0 3
|
|
|
|
// tex_010 texture float4 2d t3 2
|
|
|
|
// tex_100 texture float4 2d t5 1
|
|
|
|
sampler tex_100[3];
|
|
|
|
sampler tex_010[3];
|
|
|
|
sampler tex_001[3];
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
float4 res;
|
|
|
|
|
|
|
|
res.x = tex2D(tex_100[0], float2(0, 0)).x;
|
|
|
|
res.y = tex2D(tex_010[1], float2(0, 0)).x;
|
|
|
|
res.z = tex2D(tex_001[2], float2(0, 0)).x;
|
|
|
|
res.w = 0;
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
|
|
|
draw quad
|
2023-08-04 12:02:39 -07:00
|
|
|
probe all rgba (5, 4, 2, 0)
|