Zebediah Figura (@zfigura) commented about libs/vkd3d-shader/hlsl_codegen.c:
+static void calculate_buffer_offset(struct hlsl_ctx *ctx, struct hlsl_ir_var *var) { + unsigned int var_reg_size = var->data_type->reg_size[HLSL_REGSET_NUMERIC]; struct hlsl_buffer *buffer = var->buffer;
- buffer->size = hlsl_type_get_sm4_offset(var->data_type, buffer->size); + if (var->offset_reservation.type == 'c') + { + unsigned int proper_offset = hlsl_type_get_sm4_offset(var->data_type, + var->offset_reservation.index); + if (proper_offset != var->offset_reservation.index) + { + hlsl_error(ctx, &var->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_RESERVATION, + "Invalid packoffset() swizzle in reservation."); + } + var->buffer_offset = proper_offset; This is correct, and it probably *shouldn't* matter to me that much, but semantically it makes me wince. I'd rather see "var->buffer_offset = var->offset_reservation.index".
-- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/106#note_25673