[PATCH vkd3d 10/12] vkd3d-shader/hlsl: Detect missing loads on rhs when splitting copies of non-numeric types.

Giovanni Mascellani gmascellani at codeweavers.com
Tue Apr 19 05:44:16 CDT 2022


Hi,

Il 18/04/22 08:34, Giovanni Mascellani ha scritto:
> Otherwise we can get failed assertions:
> assert(node->type == HLSL_IR_LOAD);
> because broadcasts to these types are not implemented yet.
> 
> Signed-off-by: Francisco Casas<fcasas at codeweavers.com>
> ---
>   libs/vkd3d-shader/hlsl_codegen.c | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
> 
> diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
> index 73e3b73f..2104c48b 100644
> --- a/libs/vkd3d-shader/hlsl_codegen.c
> +++ b/libs/vkd3d-shader/hlsl_codegen.c
> @@ -628,6 +628,13 @@ static bool split_array_copies(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr,
>       element_type = type->e.array.type;
>       element_size = hlsl_type_get_array_element_reg_size(element_type);
>   
> +    if (rhs->type != HLSL_IR_LOAD)
> +    {
> +        hlsl_error(ctx, &instr->loc, VKD3D_SHADER_ERROR_HLSL_NOT_IMPLEMENTED,
> +                "array store rhs is not HLSL_IR_LOAD, missing broadcast?");
> +        return false;
> +    }

If the problem here is that the compiler is missing a feature, then I 
don't think hlsl_error() is appropriate, because that would be for a 
user error. I guess hlsl_fixme() is what should be used here.

Also, notice that the error message is usually formatted with a leading 
upper case letter and with a trailing dot (but no trailing newline).

Last, I am not completely sure of what the issue is here, but if 
eventually properly implementing other parts of the compiler will make 
this code useless, then I'd add a comment saying that.

Thanks, Giovanni.



More information about the wine-devel mailing list