Files
vkd3d/tests/hlsl/geometry.shader_test

113 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

[require]
shader model >= 4.0
geometry-shader
[input layout]
0 r32g32b32a32-float SV_POSITION
0 r32g32b32a32-float COLOR
[vb 0]
0.0 0.0 1.0 1.0 0.0 1.0 1.0 1.0
[vertex shader]
struct vs_data
{
float4 pos : SV_POSITION;
float4 color : COLOR;
};
void main(in struct vs_data vs_input, out struct vs_data vs_output)
{
vs_output.pos = vs_input.pos;
vs_output.color = vs_input.color;
}
[geometry shader]
struct gs_data
{
float4 pos : SV_POSITION;
float4 color : COLOR;
};
[maxvertexcount(4)]
void main(point struct gs_data vin[1], inout TriangleStream<gs_data> vout)
{
float offset = 0.2 * vin[0].pos.w;
gs_data v;
v.color = vin[0].color;
v.pos = float4(vin[0].pos.x - offset, vin[0].pos.y - offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x - offset, vin[0].pos.y + offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x + offset, vin[0].pos.y - offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x + offset, vin[0].pos.y + offset, vin[0].pos.z, 1.0);
vout.Append(v);
}
[pixel shader]
struct ps_data
{
float4 pos : SV_POSITION;
float4 color : COLOR;
};
float4 main(struct ps_data ps_input) : SV_Target
{
return ps_input.color;
}
[test]
2025-07-26 13:58:27 +02:00
clear rtv 0 0.0 0.0 0.0 0.0
todo(glsl) draw point list 1
probe rtv 0 (320, 190) f32(0.0, 0.0, 0.0, 0.0)
probe rtv 0 (255, 240) f32(0.0, 0.0, 0.0, 0.0)
probe rtv 0 (320, 240) f32(0.0, 1.0, 1.0, 1.0)
probe rtv 0 (385, 240) f32(0.0, 0.0, 0.0, 0.0)
probe rtv 0 (320, 290) f32(0.0, 0.0, 0.0, 0.0)
2025-07-26 13:58:27 +02:00
[require]
shader model >= 5.0
geometry-shader
[geometry shader todo]
2025-07-26 13:58:27 +02:00
struct gs_data
{
float4 pos : SV_POSITION;
float4 color : COLOR;
};
[maxvertexcount(4)][instance(5)]
void main(point struct gs_data vin[1], inout TriangleStream<gs_data> vout,
uint inst_id : SV_GSInstanceID)
{
float offset = 0.2 * vin[0].pos.w;
gs_data v;
if (inst_id != 3)
return;
v.color = vin[0].color;
v.pos = float4(vin[0].pos.x - offset, vin[0].pos.y - offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x - offset, vin[0].pos.y + offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x + offset, vin[0].pos.y - offset, vin[0].pos.z, 1.0);
vout.Append(v);
v.pos = float4(vin[0].pos.x + offset, vin[0].pos.y + offset, vin[0].pos.z, 1.0);
vout.Append(v);
}
[test]
clear rtv 0 0.0 0.0 0.0 0.0
todo draw point list 1
2025-07-26 13:58:27 +02:00
probe rtv 0 (320, 190) f32(0.0, 0.0, 0.0, 0.0)
probe rtv 0 (255, 240) f32(0.0, 0.0, 0.0, 0.0)
% Broken on WARP with SM < 6
if(!warp | sm>=6) probe rtv 0 (320, 240) f32(0.0, 1.0, 1.0, 1.0)
2025-07-26 13:58:27 +02:00
probe rtv 0 (385, 240) f32(0.0, 0.0, 0.0, 0.0)
probe rtv 0 (320, 290) f32(0.0, 0.0, 0.0, 0.0)