[PATCH] wined3d: Add #defines and logs for missing new SM5 modifiers.

Józef Kucia joseph.kucia at gmail.com
Mon Jun 6 05:54:57 CDT 2016


This patch isn't very useful on its own. It just changes FIXME()
messages. It would be much better to save the decoded modifiers in
wined3d_shader_instruction and print them in the shader tracing
backend (see shader_trace_init() in shader.c). Other than that, the
patch has some coding style issues.

On Thu, Jun 2, 2016 at 3:49 PM, Guillaume Charifi
<guillaume.charifi at sfr.fr> wrote:
> Signed-off-by: Guillaume Charifi <guillaume.charifi at sfr.fr>
> ---
>  dlls/wined3d/shader_sm4.c | 78 ++++++++++++++++++++++++++++++++---------------
>  1 file changed, 54 insertions(+), 24 deletions(-)
>
> diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
> index eb8e4e5..3adaf70 100644
> --- a/dlls/wined3d/shader_sm4.c
> +++ b/dlls/wined3d/shader_sm4.c
> @@ -25,6 +25,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
>  WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
>
>  #define WINED3D_SM4_INSTRUCTION_MODIFIER        (0x1u << 31)
> +#define WINED3D_SM4_MODIFIER_TYPE_MASK          0x3f
>
>  #define WINED3D_SM4_MODIFIER_AOFFIMMI           0x1
>  #define WINED3D_SM4_AOFFIMMI_U_SHIFT            9
> @@ -34,6 +35,22 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
>  #define WINED3D_SM4_AOFFIMMI_W_SHIFT            17
>  #define WINED3D_SM4_AOFFIMMI_W_MASK             (0xfu << WINED3D_SM4_AOFFIMMI_W_SHIFT)
>
> +#define WINED3D_SM5_MODIFIER_RESDIM             0x2
> +#define WINED3D_SM5_RESDIM_RES_TYPE_SHIFT       6
> +#define WINED3D_SM5_RESDIM_RES_TYPE_MASK        (0x1fu << WINED3D_SM5_RESDIM_RES_TYPE_SHIFT)
> +#define WINED3D_SM5_RESDIM_BUF_STRIDE_SHIFT     11
> +#define WINED3D_SM5_RESDIM_BUF_STRIDE_MASK      (0xfffu << WINED3D_SM5_RESDIM_BUF_STRIDE_SHIFT)
> +
> +#define WINED3D_SM5_MODIFIER_RETTYPE            0x3
> +#define WINED3D_SM5_RETTYPE_X_SHIFT             6
> +#define WINED3D_SM5_RETTYPE_X_MASK              (0xfu << WINED3D_SM5_RETTYPE_X_SHIFT)
> +#define WINED3D_SM5_RETTYPE_Y_SHIFT             10
> +#define WINED3D_SM5_RETTYPE_Y_MASK              (0xfu << WINED3D_SM5_RETTYPE_Y_SHIFT)
> +#define WINED3D_SM5_RETTYPE_Z_SHIFT             14
> +#define WINED3D_SM5_RETTYPE_Z_MASK              (0xfu << WINED3D_SM5_RETTYPE_Z_SHIFT)
> +#define WINED3D_SM5_RETTYPE_W_SHIFT             18
> +#define WINED3D_SM5_RETTYPE_W_MASK              (0xfu << WINED3D_SM5_RETTYPE_W_SHIFT)
> +
>  #define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT    24
>  #define WINED3D_SM4_INSTRUCTION_LENGTH_MASK     (0x1fu << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)
>
> @@ -1163,32 +1180,45 @@ static BOOL shader_sm4_read_dst_param(struct wined3d_sm4_data *priv, const DWORD
>
>  static void shader_sm4_read_instruction_modifier(DWORD modifier, struct wined3d_shader_instruction *ins)
>  {
> -    static const DWORD recognized_bits = WINED3D_SM4_INSTRUCTION_MODIFIER
> -            | WINED3D_SM4_MODIFIER_AOFFIMMI
> -            | WINED3D_SM4_AOFFIMMI_U_MASK
> -            | WINED3D_SM4_AOFFIMMI_V_MASK
> -            | WINED3D_SM4_AOFFIMMI_W_MASK;
> -
> -    if (modifier & ~recognized_bits)
> +    switch (modifier & WINED3D_SM4_MODIFIER_TYPE_MASK)
>      {
> -        FIXME("Unhandled modifier 0x%08x.\n", modifier);
> -    }
> -    else
> -    {
> -        /* Bit fields are used for sign extension */
> -        struct
> +        case WINED3D_SM4_MODIFIER_AOFFIMMI:
>          {
> -            int u : 4;
> -            int v : 4;
> -            int w : 4;
> -        }
> -        aoffimmi;
> -        aoffimmi.u = (modifier & WINED3D_SM4_AOFFIMMI_U_MASK) >> WINED3D_SM4_AOFFIMMI_U_SHIFT;
> -        aoffimmi.v = (modifier & WINED3D_SM4_AOFFIMMI_V_MASK) >> WINED3D_SM4_AOFFIMMI_V_SHIFT;
> -        aoffimmi.w = (modifier & WINED3D_SM4_AOFFIMMI_W_MASK) >> WINED3D_SM4_AOFFIMMI_W_SHIFT;
> -        ins->texel_offset.u = aoffimmi.u;
> -        ins->texel_offset.v = aoffimmi.v;
> -        ins->texel_offset.w = aoffimmi.w;
> +            /* Bit fields are used for sign extension */
> +            struct {
> +                int u : 4;
> +                int v : 4;
> +                int w : 4;
> +            } aoffimmi;

Generally, in wined3d, curly braces should be put on their own line, i.e.
struct
{
...
}
aoffimmi;

The unnamed structs seem to be an exception. The following formatting
is acceptable as well:
struct
{
...
} aofimmi;

> +
> +            aoffimmi.u = (modifier & WINED3D_SM4_AOFFIMMI_U_MASK) >> WINED3D_SM4_AOFFIMMI_U_SHIFT;
> +            aoffimmi.v = (modifier & WINED3D_SM4_AOFFIMMI_V_MASK) >> WINED3D_SM4_AOFFIMMI_V_SHIFT;
> +            aoffimmi.w = (modifier & WINED3D_SM4_AOFFIMMI_W_MASK) >> WINED3D_SM4_AOFFIMMI_W_SHIFT;
> +            ins->texel_offset.u = aoffimmi.u;
> +            ins->texel_offset.v = aoffimmi.v;
> +            ins->texel_offset.w = aoffimmi.w;
> +            break;
> +        };

Please remove stray ";".

> +
> +        case WINED3D_SM5_MODIFIER_RESDIM:
> +            FIXME("Unhandled modifier 0x%08x (WINED3D_SM5_MODIFIER_RESDIM, res_type=0x%02x).\n",
> +                    modifier,
> +                    (modifier & WINED3D_SM5_RESDIM_RES_TYPE_MASK) >> WINED3D_SM5_RESDIM_RES_TYPE_SHIFT
> +            );

Please avoid leaving ");" on its own line.

> +            break;
> +
> +        case WINED3D_SM5_MODIFIER_RETTYPE:
> +            FIXME("Unhandled modifier 0x%08x (WINED3D_SM5_MODIFIER_RETTYPE, x=0x%01x, y=0x%01x, z=0x%01x, w=0x%01x).\n",
> +                    modifier,
> +                    (modifier & WINED3D_SM5_RETTYPE_X_MASK) >> WINED3D_SM5_RETTYPE_X_SHIFT,
> +                    (modifier & WINED3D_SM5_RETTYPE_Y_MASK) >> WINED3D_SM5_RETTYPE_Y_SHIFT,
> +                    (modifier & WINED3D_SM5_RETTYPE_Z_MASK) >> WINED3D_SM5_RETTYPE_Z_SHIFT,
> +                    (modifier & WINED3D_SM5_RETTYPE_W_MASK) >> WINED3D_SM5_RETTYPE_W_SHIFT
> +            );
> +            break;
> +
> +        default:
> +            FIXME("Unhandled modifier 0x%08x.\n", modifier);
>      }
>  }
>
> --
> 2.7.4
>
>
>

Thanks for working on this.



More information about the wine-devel mailing list