[v2 PATCH vkd3d 2/4] vkd3d-shader/hlsl: Cast round() input to float.

Zebediah Figura (she/her) zfigura at codeweavers.com
Wed Jan 19 17:42:07 CST 2022


On 1/19/22 06:03, Matteo Bruni wrote:
> On Mon, Dec 20, 2021 at 10:44 PM Zebediah Figura (she/her)
> <zfigura at codeweavers.com> wrote:
>>
>> On 12/20/21 12:15, Zebediah Figura (she/her) wrote:
>>> On 12/19/21 06:41, Nikolay Sivov wrote:
>>>> +static struct hlsl_ir_node *intrinsic_float_convert_arg(struct
>>>> hlsl_ctx *ctx,
>>>> +        const struct parse_initializer *params, struct hlsl_ir_node
>>>> *arg, const struct vkd3d_shader_location *loc)
>>>> +{
>>>> +    struct hlsl_type *type = arg->data_type;
>>>> +
>>>> +    if (type->base_type == HLSL_TYPE_FLOAT || type->base_type ==
>>>> HLSL_TYPE_HALF)
>>>> +        return arg;
>>>
>>> add_implicit_conversion() already does this.
>>
>> Sorry, turns out I'm wrong; this preserves the input type for half,
>> whereas add_implicit_conversion() alone would not.
> 
> I wonder if that's what it should do in the first place?

Yes, witness the following shader:

---

uint func(float x) { return 1; }
uint func(half x) { return 2; }

float4 main(void) : sv_target
{
     return float4(func(float(0)), func(half(0)), func(int(0)), 
func(uint(0)));
}

---

Native reduces this to (1, 2, 1, 1).



More information about the wine-devel mailing list