vkd3d/tests/matrix-semantics.shader_test
Francisco Casas d96e9665b1 vkd3d-shader/hlsl: Error out when an output semantic is used more than once.
The use of the hlsl_semantic.reported_duplicated_output_next_index field
allows reporting multiple overlapping indexes, such as in the following
vertex shader:

    void main(out float1x3 x : OVERLAP0, out float1x3 y : OVERLAP1)
    {
        x = float3(1.0, 2.0, 3.2);
        y = float3(5.0, 6.0, 5.0);
    }

    apple.hlsl:1:41: E5013: Output semantic "OVERLAP1" is used multiple times.
    apple.hlsl:1:13: First use of "OVERLAP1" is here.
    apple.hlsl:1:41: E5013: Output semantic "OVERLAP2" is used multiple times.
    apple.hlsl:1:13: First use of "OVERLAP2" is here.

While at the same time avoiding reporting overlaps more than once for
large arrays:

    struct apple
    {
        float2 p : sv_position;
    };

    void main(out apple aps[4])
    {
    }

    apple.hlsl:3:8: E5013: Output semantic "sv_position0" is used multiple times.
    apple.hlsl:3:8: First use of "sv_position0" is here.
2023-05-01 22:18:22 +02:00

103 lines
1.8 KiB
Plaintext

[pixel shader]
float4x1 main() : sv_target
{
return float4(1.0, 2.0, 3.0, 4.0);
}
[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader]
row_major float1x4 main() : sv_target
{
return float4(1.0, 2.0, 3.0, 4.0);
}
[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 4.0)
[require]
shader model >= 4.0
[render target 0]
format r32 float
size (640, 480)
[render target 1]
format r32 float
size (640, 480)
[render target 2]
format r32 float
size (640, 480)
[render target 3]
format r32 float
size (640, 480)
[pixel shader]
row_major float4x1 main() : sv_target
{
return float4(1.0, 2.0, 3.0, 4.0);
}
[test]
draw quad
probe render target 0 all r (1.0)
probe render target 1 all r (2.0)
probe render target 2 all r (3.0)
probe render target 3 all r (4.0)
[pixel shader]
float1x4 main() : sv_target
{
return float4(1.0, 2.0, 3.0, 4.0);
}
[test]
draw quad
probe render target 0 all r (1.0)
probe render target 1 all r (2.0)
probe render target 2 all r (3.0)
probe render target 3 all r (4.0)
[pixel shader fail]
void main(out float1x2 x : sv_target0, out float1x2 y : sv_target1)
{
x = float2(1.0, 2.0);
y = float2(5.0, 6.0);
}
[pixel shader]
void main(out float1x2 x : sv_target0, out float1x2 y : sv_target2)
{
x = float2(1.0, 2.0);
y = float2(5.0, 6.0);
}
[test]
draw quad
probe render target 0 all r (1.0)
probe render target 1 all r (2.0)
probe render target 2 all r (5.0)
probe render target 3 all r (6.0)
[render target 0]
format r32g32b32a32 float
size (640, 480)
[pixel shader]
void main(out row_major float1x4 x : sv_target0, out float1x2 y : sv_target1)
{
x = float4(1.0, 2.0, 3.0, 4.0);
y = float2(5.0, 6.0);
}
[test]
draw quad
probe render target 0 all rgba (1.0, 2.0, 3.0, 4.0)
probe render target 1 all r (5.0)
probe render target 2 all r (6.0)