[PATCH v2 1/5] wined3d: Save pixel and vertex shader resource views in stateblocks.

Józef Kucia joseph.kucia at gmail.com
Thu Apr 6 04:55:00 CDT 2017


On Wed, Apr 5, 2017 at 7:03 PM, Henri Verbeet <hverbeet at gmail.com> wrote:
> On 5 April 2017 at 15:38, Józef Kucia <jkucia at codeweavers.com> wrote:
>> @@ -3129,6 +3129,8 @@ struct wined3d_saved_states
>>      WORD vertexShaderConstantsB;                /* WINED3D_MAX_CONSTS_B, 16 */
>>      WORD vertexShaderConstantsI;                /* WINED3D_MAX_CONSTS_I, 16 */
>>      BOOL vs_consts_f[WINED3D_MAX_VS_CONSTS_F];
>> +    DWORD pixel_shader_resource_views : 16;     /* MAX_FRAGMENT_SAMPLERS, 16 */
>> +    DWORD vertex_shader_resource_views : 4;     /* MAX_VERTEX_SAMPLERS,    4 */
>>      DWORD textures : 20;                        /* MAX_COMBINED_SAMPLERS, 20 */
>>      DWORD indices : 1;
>>      DWORD material : 1;
>> @@ -3137,17 +3139,18 @@ struct wined3d_saved_states
>>      DWORD pixelShader : 1;
>>      DWORD vertexShader : 1;
>>      DWORD scissorRect : 1;
>> -    DWORD padding : 5;
>> +    DWORD padding : 17;
>
> That doesn't do the right thing, unfortunately:

Yeah, it seems that 2 padding fields are required.

>
>     struct wined3d_saved_states {
>            DWORD                      transform[16];        /*     0    64 */
>            /* --- cacheline 1 boundary (64 bytes) --- */
>            WORD                       streamSource;         /*    64     2 */
>            WORD                       streamFreq;           /*    66     2 */
>            DWORD                      renderState[7];       /*    68    28 */
>            DWORD                      textureState[8];      /*    96    32 */
>            /* --- cacheline 2 boundary (128 bytes) --- */
>            WORD                       samplerState[20];     /*   128    40 */
>            DWORD                      clipplane;            /*   168     4 */
>            WORD                       pixelShaderConstantsB; /*   172     2 */
>            WORD                       pixelShaderConstantsI; /*   174     2 */
>            BOOL                       ps_consts_f[224];     /*   176   896 */
>            /* --- cacheline 16 boundary (1024 bytes) was 48 bytes ago --- */
>            WORD                       vertexShaderConstantsB; /*  1072     2 */
>            WORD                       vertexShaderConstantsI; /*  1074     2 */
>            BOOL                       vs_consts_f[256];     /*  1076  1024 */
>            /* --- cacheline 32 boundary (2048 bytes) was 52 bytes ago --- */
>            DWORD                      pixel_shader_resource_views:16;
> /*  2100:16  4 */
>            DWORD                      vertex_shader_resource_views:4;
> /*  2100:12  4 */
>
>            /* XXX 12 bits hole, try to pack */
>
>            DWORD                      textures:20;          /*  2104:12  4 */
>            DWORD                      indices:1;            /*  2104:11  4 */
>            DWORD                      material:1;           /*  2104:10  4 */
>            DWORD                      viewport:1;           /*  2104: 9  4 */
>            DWORD                      vertexDecl:1;         /*  2104: 8  4 */
>            DWORD                      pixelShader:1;        /*  2104: 7  4 */
>            DWORD                      vertexShader:1;       /*  2104: 6  4 */
>            DWORD                      scissorRect:1;        /*  2104: 5  4 */
>
>            /* XXX 5 bits hole, try to pack */
>
>            DWORD                      padding:17;           /*  2108:15  4 */
>            /* --- cacheline 33 boundary (2112 bytes) --- */
>
>            /* size: 2112, cachelines: 33, members: 24 */
>            /* bit holes: 2, sum bit holes: 17 bits */
>            /* bit_padding: 15 bits */
>     };
>
> Incidentally, this also illustrates the issue of the ps_consts_f and
> vs_consts_f fields using up way more space than needed.
>
>



More information about the wine-devel mailing list