vkd3d-shader/hlsl: Output sm1 semantics with unique register_index values.

Match the register_index values from the d3dbc reader.
This commit is contained in:
Elizabeth Figura
2025-06-23 20:12:23 -05:00
committed by Henri Verbeet
parent 41cacba5ce
commit ecb19b33ba
Notes: Henri Verbeet 2025-06-25 17:08:41 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1597
2 changed files with 19 additions and 1 deletions

View File

@@ -2076,6 +2076,13 @@ static void d3dbc_write_semantic_dcl(struct d3dbc_compiler *d3dbc,
VKD3D_ASSERT(ret);
reg.reg.type = output ? VKD3DSPR_OUTPUT : VKD3DSPR_INPUT;
reg.reg.idx[0].offset = element->register_index;
if (!vkd3d_shader_ver_ge(version, 3, 0))
{
if (reg.reg.idx[0].offset > SM1_RASTOUT_REGISTER_OFFSET)
reg.reg.idx[0].offset -= SM1_RASTOUT_REGISTER_OFFSET;
else if (reg.reg.idx[0].offset > SM1_COLOR_REGISTER_OFFSET)
reg.reg.idx[0].offset -= SM1_COLOR_REGISTER_OFFSET;
}
}
token = VKD3D_SM1_OP_DCL;

View File

@@ -8020,8 +8020,19 @@ static void generate_vsir_signature_entry(struct hlsl_ctx *ctx, struct vsir_prog
if ((!output && !var->last_read) || (output && !var->first_write))
return;
if (!sm1_register_from_semantic_name(&program->shader_version,
if (sm1_register_from_semantic_name(&program->shader_version,
var->semantic.name, var->semantic.index, output, &sysval, &type, &register_index))
{
if (!vkd3d_shader_ver_ge(&program->shader_version, 3, 0))
{
if (type == VKD3DSPR_RASTOUT)
register_index += SM1_RASTOUT_REGISTER_OFFSET;
else if (type == VKD3DSPR_ATTROUT
|| (type == VKD3DSPR_INPUT && program->shader_version.type == VKD3D_SHADER_TYPE_PIXEL))
register_index += SM1_COLOR_REGISTER_OFFSET;
}
}
else
{
enum vkd3d_decl_usage usage;
unsigned int usage_idx;