[PATCH vkd3d 3/5] vkd3d-shader: Print offending values for more error messages.

Zebediah Figura (she/her) zfigura at codeweavers.com
Thu Mar 4 20:31:39 CST 2021


On 3/4/21 3:54 AM, Matteo Bruni wrote:
> On Tue, Mar 2, 2021 at 10:35 PM Zebediah Figura <zfigura at codeweavers.com> wrote:
>>
>> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
>> ---
>>  libs/vkd3d-shader/hlsl.y | 97 ++++++++++++++++++++++++++++++----------
>>  1 file changed, 74 insertions(+), 23 deletions(-)
> 
> I'm hijacking this one just to refer to the existing code.
> 
>> @@ -1438,7 +1459,8 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
>>                  if (size < type->dimx * type->dimy)
>>                  {
>>                      hlsl_error(ctx, v->loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,
>> -                            "Wrong number of parameters in numeric initializer.");
>> +                            "Expected %u components in numeric initializer, but got %u.",
>> +                            type->dimx * type->dimy, size);
>>                      free_parse_initializer(&v->initializer);
>>                      vkd3d_free(v);
>>                      continue;
> 
> It would be interesting to know (or probably, remember) why this is
> complaining if the initializer is smaller than required but not if
> it's larger. Native _43 seems to report an error in both cases, maybe
> older compilers didn't? Or maybe it's just wrong...
> 

I believe you're half right, which unfortunately isn't enough. I think
the point of this is to catch

float4 a;
float3 b = {a.x, a.y};

but it also catches

float4 a;
float4 b = a.xy;

and may in fact have been written with solely the latter in mind, in
which case truncation is not an error. The tricky thing is that

float4 a;
float3 b = {a.x, a.y, a.z, a.w};

is invalid (native says "initializer does not match type"), and so is

float4 a;
float3 b = {a.xyzw};

but

float4 a;
float3 b = a.xyzw;

only yields an "implicit truncation" warning.

We get the warning and type checking from the add_assignment() call, for
what it's worth, so we really only need to check when there are explicit
braces.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20210304/d52e68db/attachment.sig>


More information about the wine-devel mailing list