vkd3d-shader/hlsl: Introduce HLSL_REGSET_STREAM_OUTPUTS regset.

This commit is contained in:
Shaun Ren
2025-03-14 15:39:09 -04:00
committed by Henri Verbeet
parent 8059608af9
commit d620ad4942
Notes: Henri Verbeet 2025-04-23 18:18:33 +02:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1458
3 changed files with 13 additions and 3 deletions

View File

@@ -387,6 +387,9 @@ static enum hlsl_regset type_get_regset(const struct hlsl_type *type)
case HLSL_CLASS_UAV: case HLSL_CLASS_UAV:
return HLSL_REGSET_UAVS; return HLSL_REGSET_UAVS;
case HLSL_CLASS_STREAM_OUTPUT:
return HLSL_REGSET_STREAM_OUTPUTS;
default: default:
break; break;
} }
@@ -493,6 +496,10 @@ static void hlsl_type_calculate_reg_size(struct hlsl_ctx *ctx, struct hlsl_type
type->reg_size[HLSL_REGSET_UAVS] = 1; type->reg_size[HLSL_REGSET_UAVS] = 1;
break; break;
case HLSL_CLASS_STREAM_OUTPUT:
type->reg_size[HLSL_REGSET_STREAM_OUTPUTS] = 1;
break;
case HLSL_CLASS_DEPTH_STENCIL_STATE: case HLSL_CLASS_DEPTH_STENCIL_STATE:
case HLSL_CLASS_DEPTH_STENCIL_VIEW: case HLSL_CLASS_DEPTH_STENCIL_VIEW:
case HLSL_CLASS_EFFECT_GROUP: case HLSL_CLASS_EFFECT_GROUP:
@@ -511,7 +518,6 @@ static void hlsl_type_calculate_reg_size(struct hlsl_ctx *ctx, struct hlsl_type
case HLSL_CLASS_HULL_SHADER: case HLSL_CLASS_HULL_SHADER:
case HLSL_CLASS_GEOMETRY_SHADER: case HLSL_CLASS_GEOMETRY_SHADER:
case HLSL_CLASS_BLEND_STATE: case HLSL_CLASS_BLEND_STATE:
case HLSL_CLASS_STREAM_OUTPUT:
case HLSL_CLASS_NULL: case HLSL_CLASS_NULL:
break; break;
} }
@@ -984,6 +990,7 @@ struct hlsl_type *hlsl_new_stream_output_type(struct hlsl_ctx *ctx,
type->class = HLSL_CLASS_STREAM_OUTPUT; type->class = HLSL_CLASS_STREAM_OUTPUT;
type->e.so.so_type = so_type; type->e.so.so_type = so_type;
type->e.so.type = data_type; type->e.so.type = data_type;
hlsl_type_calculate_reg_size(ctx, type);
list_add_tail(&ctx->types, &type->entry); list_add_tail(&ctx->types, &type->entry);

View File

@@ -141,7 +141,8 @@ enum hlsl_regset
HLSL_REGSET_SAMPLERS, HLSL_REGSET_SAMPLERS,
HLSL_REGSET_TEXTURES, HLSL_REGSET_TEXTURES,
HLSL_REGSET_UAVS, HLSL_REGSET_UAVS,
HLSL_REGSET_LAST_OBJECT = HLSL_REGSET_UAVS, HLSL_REGSET_STREAM_OUTPUTS,
HLSL_REGSET_LAST_OBJECT = HLSL_REGSET_STREAM_OUTPUTS,
HLSL_REGSET_NUMERIC, HLSL_REGSET_NUMERIC,
HLSL_REGSET_LAST = HLSL_REGSET_NUMERIC, HLSL_REGSET_LAST = HLSL_REGSET_NUMERIC,
}; };

View File

@@ -5191,6 +5191,8 @@ static char get_regset_name(enum hlsl_regset regset)
return 't'; return 't';
case HLSL_REGSET_UAVS: case HLSL_REGSET_UAVS:
return 'u'; return 'u';
case HLSL_REGSET_STREAM_OUTPUTS:
return 'm';
case HLSL_REGSET_NUMERIC: case HLSL_REGSET_NUMERIC:
vkd3d_unreachable(); vkd3d_unreachable();
} }
@@ -13248,7 +13250,7 @@ static void process_entry_function(struct hlsl_ctx *ctx,
validate_and_record_prim_type(ctx, var); validate_and_record_prim_type(ctx, var);
prepend_input_var_copy(ctx, entry_func, var); prepend_input_var_copy(ctx, entry_func, var);
} }
else if (hlsl_get_stream_output_type(var->data_type)) else if (var->data_type->reg_size[HLSL_REGSET_STREAM_OUTPUTS])
{ {
if (profile->type != VKD3D_SHADER_TYPE_GEOMETRY) if (profile->type != VKD3D_SHADER_TYPE_GEOMETRY)
{ {