mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/hlsl: Forbid output parameters in geometry shaders.
Outputs in geometry shaders must be written to streams.
This commit is contained in:
Notes:
Henri Verbeet
2025-03-12 22:20:50 +01:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1405
@@ -12604,6 +12604,9 @@ static void process_entry_function(struct hlsl_ctx *ctx,
|
|||||||
if (profile->type == VKD3D_SHADER_TYPE_HULL && !ctx->is_patch_constant_func)
|
if (profile->type == VKD3D_SHADER_TYPE_HULL && !ctx->is_patch_constant_func)
|
||||||
hlsl_error(ctx, &var->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_MODIFIER,
|
hlsl_error(ctx, &var->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_MODIFIER,
|
||||||
"Output parameters are not supported in hull shader control point functions.");
|
"Output parameters are not supported in hull shader control point functions.");
|
||||||
|
else if (profile->type == VKD3D_SHADER_TYPE_GEOMETRY)
|
||||||
|
hlsl_error(ctx, &var->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_MODIFIER,
|
||||||
|
"Output parameters are not allowed in geometry shaders.");
|
||||||
else
|
else
|
||||||
append_output_var_copy(ctx, entry_func, var);
|
append_output_var_copy(ctx, entry_func, var);
|
||||||
}
|
}
|
||||||
@@ -12611,7 +12614,11 @@ static void process_entry_function(struct hlsl_ctx *ctx,
|
|||||||
}
|
}
|
||||||
if (entry_func->return_var)
|
if (entry_func->return_var)
|
||||||
{
|
{
|
||||||
if (entry_func->return_var->data_type->class != HLSL_CLASS_STRUCT && !entry_func->return_var->semantic.name)
|
if (profile->type == VKD3D_SHADER_TYPE_GEOMETRY)
|
||||||
|
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_INCOMPATIBLE_PROFILE,
|
||||||
|
"Geometry shaders cannot return values.");
|
||||||
|
else if (entry_func->return_var->data_type->class != HLSL_CLASS_STRUCT
|
||||||
|
&& !entry_func->return_var->semantic.name)
|
||||||
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
|
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
|
||||||
"Entry point \"%s\" is missing a return value semantic.", entry_func->func->name);
|
"Entry point \"%s\" is missing a return value semantic.", entry_func->func->name);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user