vkd3d/tests/register-reservations.shader_test
Francisco Casas ef7cf9b1ad vkd3d-shader/hlsl: Support resource arrays when writting SM4.
The new fixmes can be triggered in presence of object components within
structs (for SM5).

In shaders such as this one:

    struct apple
    {
        Texture2D tex : TEX;
        float4 color : COLOR;
    };

    float4 main(struct apple input) : sv_target
    {
        return input.tex.Load(int3(1, 2, 3));
    }

Or this one:

    struct
    {
        Texture2D tex;
        float4 color;
    } s;

    float4 main() : sv_target
    {
        return s.tex.Load(int3(1, 2, 3));
    }
2023-05-08 20:24:15 +02:00

84 lines
1.3 KiB
Plaintext

[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
% If a single component in a texture array is used, all registers are reserved.
[pixel shader]
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]
draw quad
probe all rgba (41.0, 41.0, 41.0, 1089.0)
% 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]
draw quad
probe all rgba (0.0, 0.0, 0.0, 99.0)
% Register reservations force to reserve all the resource registers. Even if unused.
[pixel shader]
Texture2D unused : register(t0);
Texture2D tex;
float4 main() : sv_target
{
return tex.Load(int3(0, 0, 0));
}
[test]
draw quad
probe all rgba (1.0, 1.0, 1.0, 99.0)
[pixel shader]
Texture2D unused[2][2] : register(t0);
Texture2D tex;
float4 main() : sv_target
{
return tex.Load(int3(0, 0, 0));
}
[test]
draw quad
probe all rgba (4.0, 4.0, 4.0, 99.0)