Francisco Casas (@fcasas) commented about libs/vkd3d-shader/hlsl_codegen.c:
+ + if ((string = hlsl_type_to_string(ctx, type))) + hlsl_error(ctx, &instr->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE, + "Wrong type for argument %u of [numthreads]: expected int or uint, but got %s.", + i, string->buffer); + hlsl_release_string_buffer(ctx, string); + break; + } + + if (instr->type != HLSL_IR_CONSTANT) + { + hlsl_fixme(ctx, &instr->loc, "Non-constant expression in [numthreads] initializer."); + break; + } + + if (!(ctx->thread_count[i] = hlsl_ir_constant(instr)->value[0].u)) I don't think this is covering the case when instr is a negative signed integer.
-- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/43#note_12851