Francisco Casas (@fcasas) commented about libs/vkd3d-shader/d3dbc.c:
|| var->data_type->base_type == HLSL_TYPE_TEXTURE))
if (regset == HLSL_REGSET_NUMERIC) {
assert(regset == HLSL_REGSET_SAMPLERS);
put_u32(buffer, vkd3d_make_u32(D3DXRS_SAMPLER, var->regs[regset].id));
put_u32(buffer, 1);
put_u32(buffer, vkd3d_make_u32(D3DXRS_FLOAT4, var->regs[regset].id));
put_u32(buffer, var->data_type->reg_size[regset] / 4); } else {
assert(regset == HLSL_REGSET_NUMERIC);
put_u32(buffer, vkd3d_make_u32(D3DXRS_FLOAT4, var->regs[regset].id));
put_u32(buffer, var->data_type->reg_size[regset] / 4);
put_u32(buffer, vkd3d_make_u32(D3DXRS_SAMPLER, var->regs[regset].id));
put_u32(buffer, 1);
I realized that here it is better to write `var->regs[regset].count` instead of 1 as soon as possible. Otherwise we are generating an incorrect CTAB in case the shader contains arrays of samplers.
Note that we are not allocating the proper number of registers (which depends on use) for numeric types yet. Instead we are just using the type's register size.