[PATCH vkd3d v2 10/10] vkd3d-shader/hlsl: Lower numeric casts.

Zebediah Figura zfigura at codeweavers.com
Mon May 16 12:42:18 CDT 2022


On 5/16/22 09:58, Giovanni Mascellani wrote:
> Hi,
> 
> Il 13/05/22 01:18, Zebediah Figura ha scritto:
>> I don't think this feels like the right place. Can we handle this when
>> parsing explicit casts instead?
> 
> Hm, this is useful in many places beside explicit casts. Actually, most
> tests fixed by this commit are not explicit casts.

Eh, explicit or implicit, sorry. You can't implicitly cast scalars to 
structs or arrays (at least not in the places I checked) but I forgot 
that you can cast them to matrices.

> In principle we could
> do the same processing each time we add any cast, explicit or not, but
> that means we have to hook in many places, making everything more
> brittle.

Would it be many places, though? I think it'd only be the explicit cast 
parsing rule and add_implicit_conversion(). We'd want a helper function 
anyway, that wraps hlsl_new_cast() and handles scalar-to-structure casts.

> What's the problem with having this as an optimization pass?
> Why is that different from lower_broadcasts()?

Broadly, it's the principle of making the IR as simple as possible. In 
this case it's especially helpful to be able to assume that types larger 
than a vector can only be generated by HLSL_IR_LOAD instructions. But I 
think it'd also be desirable to handle scalar-to-vector broadcasts at 
parse time; I just didn't consider that when writing the pass.

[This certainly isn't the only place where we can generate instructions 
with matrix type. Most notably they can also come from per-component 
arithmetic instructions. But I suspect the answer is that we want to 
lower those at parse time as well; I think it shouldn't be too painful 
since we can do it in add_expr() or something close to it.]



More information about the wine-devel mailing list