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:
return HLSL_REGSET_UAVS;
case HLSL_CLASS_STREAM_OUTPUT:
return HLSL_REGSET_STREAM_OUTPUTS;
default:
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;
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_VIEW:
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_GEOMETRY_SHADER:
case HLSL_CLASS_BLEND_STATE:
case HLSL_CLASS_STREAM_OUTPUT:
case HLSL_CLASS_NULL:
break;
}
@@ -984,6 +990,7 @@ struct hlsl_type *hlsl_new_stream_output_type(struct hlsl_ctx *ctx,
type->class = HLSL_CLASS_STREAM_OUTPUT;
type->e.so.so_type = so_type;
type->e.so.type = data_type;
hlsl_type_calculate_reg_size(ctx, type);
list_add_tail(&ctx->types, &type->entry);

View File

@@ -141,7 +141,8 @@ enum hlsl_regset
HLSL_REGSET_SAMPLERS,
HLSL_REGSET_TEXTURES,
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_LAST = HLSL_REGSET_NUMERIC,
};

View File

@@ -5191,6 +5191,8 @@ static char get_regset_name(enum hlsl_regset regset)
return 't';
case HLSL_REGSET_UAVS:
return 'u';
case HLSL_REGSET_STREAM_OUTPUTS:
return 'm';
case HLSL_REGSET_NUMERIC:
vkd3d_unreachable();
}
@@ -13248,7 +13250,7 @@ static void process_entry_function(struct hlsl_ctx *ctx,
validate_and_record_prim_type(ctx, 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)
{