From aba355896ffb28ce3fccb202524c9b9776286332 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Sat, 26 Jul 2025 14:03:05 +0200 Subject: [PATCH] vkd3d-shader/hlsl: Reject geometry shaders with instance count. We currently emit a warning and miscompile them. --- libs/vkd3d-shader/hlsl_codegen.c | 2 ++ tests/hlsl/geometry.shader_test | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 3435c904d..41ac6f07f 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -7549,6 +7549,8 @@ static void parse_entry_function_attributes(struct hlsl_ctx *ctx, struct hlsl_ir entry_func->early_depth_test = true; else if (!strcmp(attr->name, "maxvertexcount") && profile->type == VKD3D_SHADER_TYPE_GEOMETRY) parse_maxvertexcount_attribute(ctx, attr); + else if (!strcmp(attr->name, "instance") && profile->type == VKD3D_SHADER_TYPE_GEOMETRY) + hlsl_fixme(ctx, &entry_func->attrs[i]->loc, "Geometry shader instance count"); else hlsl_warning(ctx, &entry_func->attrs[i]->loc, VKD3D_SHADER_WARNING_HLSL_UNKNOWN_ATTRIBUTE, "Ignoring unknown attribute \"%s\".", entry_func->attrs[i]->name); diff --git a/tests/hlsl/geometry.shader_test b/tests/hlsl/geometry.shader_test index f09ed708f..243e2b5d8 100644 --- a/tests/hlsl/geometry.shader_test +++ b/tests/hlsl/geometry.shader_test @@ -72,7 +72,7 @@ bug(mvk) probe rtv 0 (320, 290) rgba(0.0, 0.0, 0.0, 0.0) shader model >= 5.0 geometry-shader -[geometry shader] +[geometry shader todo] struct gs_data { float4 pos : SV_POSITION; @@ -103,10 +103,10 @@ void main(point struct gs_data vin[1], inout TriangleStream vout, [test] clear rtv 0 0.0 0.0 0.0 0.0 -todo(glsl | sm>=6) draw point list 1 +todo 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) % Broken on WARP with SM < 6 -if(!warp | sm>=6) todo probe rtv 0 (320, 240) f32(0.0, 1.0, 1.0, 1.0) +if(!warp | sm>=6) 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)