[PATCH vkd3d 4/9] vkd3d-shader: Handle modifiers for float64 register ops.

Henri Verbeet hverbeet at gmail.com
Tue Jun 15 16:53:22 CDT 2021


On Mon, 14 Jun 2021 at 05:27, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
>  libs/vkd3d-shader/spirv.c | 34 ++++++++++++++++++++--------------
>  1 file changed, 20 insertions(+), 14 deletions(-)
>
There's an existing usage of
vkd3d_dxbc_compiler_get_constant_float_vector() in
vkd3d_dxbc_compiler_emit_rcp() as well.

The neg/abs/sat changes are three separate changes.

>  static uint32_t vkd3d_dxbc_compiler_get_constant_float_vector(struct vkd3d_dxbc_compiler *compiler,
> -        float value, unsigned int component_count)
> +        float value, unsigned int component_count, enum vkd3d_data_type data_type)
>  {
> -    const float values[] = {value, value, value, value};
> -    return vkd3d_dxbc_compiler_get_constant(compiler, VKD3D_SHADER_COMPONENT_FLOAT,
> -            component_count, (const uint32_t *)values);
> +    if (data_type == VKD3D_DATA_DOUBLE)
> +    {
> +        const double values[] = {value, value};
> +        return vkd3d_dxbc_compiler_get_constant(compiler, VKD3D_SHADER_COMPONENT_DOUBLE,
> +                component_count, (const uint32_t *)values);
> +    }
> +    else
> +    {
> +        const float values[] = {value, value, value, value};
> +        return vkd3d_dxbc_compiler_get_constant(compiler, VKD3D_SHADER_COMPONENT_FLOAT,
> +                component_count, (const uint32_t *)values);
> +    }
>  }
>
I think it would be preferable to just introduce
vkd3d_dxbc_compiler_get_constant_double_vector(), instead of hacking
double support into vkd3d_dxbc_compiler_get_constant_float_vector().



More information about the wine-devel mailing list