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".