[PATCH vkd3d 2/9] vkd3d-shader: Add double data type.

Henri Verbeet hverbeet at gmail.com
Tue Jun 15 16:52:41 CDT 2021


On Mon, 14 Jun 2021 at 05:27, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
> index d2cf87e3..cd90354a 100644
> --- a/libs/vkd3d-shader/dxbc.c
> +++ b/libs/vkd3d-shader/dxbc.c
> @@ -1001,6 +1001,7 @@ static void shader_sm5_read_sync(struct vkd3d_shader_instruction *ins,
>   * R -> VKD3D_DATA_RESOURCE
>   * S -> VKD3D_DATA_SAMPLER
>   * U -> VKD3D_DATA_UAV
> + * d -> VKD3D_DATA_DOUBLE
>   */
>  static const struct vkd3d_sm4_opcode_info opcode_table[] =
>  {
> @@ -1335,6 +1336,8 @@ static enum vkd3d_data_type map_data_type(char t)
>              return VKD3D_DATA_SAMPLER;
>          case 'U':
>              return VKD3D_DATA_UAV;
> +        case 'd':
> +            return VKD3D_DATA_DOUBLE;
>          default:
>              ERR("Invalid data type '%c'.\n", t);
>              return VKD3D_DATA_FLOAT;
This is unused in this patch.

> +static inline unsigned int vkd3d_write_mask_component_count_typed(DWORD write_mask,
> +        enum vkd3d_data_type data_type)
> +{
> +    unsigned int component_count = vkd3d_write_mask_component_count(write_mask);
> +    if (data_type == VKD3D_DATA_DOUBLE)
> +        component_count /= 2u;
> +    assert(component_count != 0);
> +    return component_count;
> +}
> +
Having both vkd3d_write_mask_component_count() and
vkd3d_write_mask_component_count_typed() isn't very nice. If we're
going to handle this in the backend, it would seem best to
consistently pass type information to
vkd3d_write_mask_component_count().

Alternatively, how hard would it be to fix things up in the frontend
so that we would never have to deal with this here?



More information about the wine-devel mailing list