[require] shader model >= 4.0 [vertex shader] struct vs_in { uint instance_id : SV_InstanceId; uint vertex_id : SV_VertexId; }; struct vs_out { float4 position : SV_Position; float4 color : Color; }; void main(vs_in i, out vs_out o) { float2 vertices[] = { {0.0, 0.0}, { 0.0, 2.0}, {-2.0, 0.0}, {0.0, 0.0}, { 2.0, 0.0}, { 0.0, 2.0}, {0.0, 0.0}, { 0.0, -2.0}, { 2.0, 0.0}, {0.0, 0.0}, {-2.0, 0.0}, { 0.0, -2.0}, }; uint pos = i.vertex_id % 3; o.position = float4(vertices[pos + i.instance_id * 3], 0.0, 1.0); float color = 0.25 + i.instance_id * 0.25; o.color = float4(0.0, color, 0.0, color); } [pixel shader] struct vs_out { float4 position : SV_Position; float4 color : Color; }; float4 main(vs_out i) : SV_Target { return i.color; } [test] todo(glsl | msl) draw triangle list 3 4 probe rtv 0 (160, 120) rgba (0.0, 0.25, 0.0, 0.25) probe rtv 0 (480, 120) rgba (0.0, 0.5, 0.0, 0.5) probe rtv 0 (480, 360) rgba (0.0, 0.75, 0.0, 0.75) probe rtv 0 (160, 360) rgba (0.0, 1.0, 0.0, 1.0)