From 39603f4bc26909e2ec2943a6ff5119e56d7728dc Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Thu, 29 May 2025 19:06:40 +0200 Subject: [PATCH] vkd3d-shader/dxil: Emit 16-bit structured TGSMs as minimum precision. --- libs/vkd3d-shader/dxil.c | 5 ++++- tests/hlsl/tgsm.shader_test | 18 +++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index 50be8a4f5..7f62ed5e2 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -3744,7 +3744,10 @@ static void sm6_parser_declare_tgsm_structured(struct sm6_parser *sm6, const str dst_param_init(&ins->declaration.tgsm_structured.reg); dst->value_type = VALUE_TYPE_GROUPSHAREDMEM; dst->u.groupsharedmem.id = sm6->tgsm_count++; - dst->structure_stride = elem_type->u.width / 8u; + dst->structure_stride = elem_type->u.width / CHAR_BIT; + /* Convert minimum precision types to their 32-bit equivalent. */ + if (dst->structure_stride == 2) + dst->structure_stride = 4; sm6_register_from_value(&ins->declaration.tgsm_structured.reg.reg, dst, sm6); if (dst->structure_stride != 4) { diff --git a/tests/hlsl/tgsm.shader_test b/tests/hlsl/tgsm.shader_test index 6f567b694..03093707a 100644 --- a/tests/hlsl/tgsm.shader_test +++ b/tests/hlsl/tgsm.shader_test @@ -263,15 +263,15 @@ void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID) } [test] -todo dispatch 2 1 1 -todo probe uav 0 (0) u32(0x18) -todo probe uav 0 (1) u32(0x18) -todo probe uav 0 (2) u32(0x38) -todo probe uav 0 (3) u32(0x38) -todo probe uav 0 (4) u32(0x1a) -todo probe uav 0 (5) u32(0x1a) -todo probe uav 0 (6) u32(0x3a) -todo probe uav 0 (7) u32(0x3a) +todo(sm<6) dispatch 2 1 1 +probe uav 0 (0) u32(0x18) +probe uav 0 (1) u32(0x18) +probe uav 0 (2) u32(0x38) +probe uav 0 (3) u32(0x38) +probe uav 0 (4) u32(0x1a) +probe uav 0 (5) u32(0x1a) +probe uav 0 (6) u32(0x3a) +probe uav 0 (7) u32(0x3a) [uav 0] format r32-typeless