[Mesa-dev] [PATCH 2/3] anv: only expose up to 28 vertex attributes

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Jul 25 10:10:54 UTC 2017


Cool, got it :)

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

I think we might want this in stable right?

On 25/07/17 09:30, Iago Toral wrote:
> On Tue, 2017-07-25 at 00:46 +0100, Lionel Landwerlin wrote:
>> On 21/07/17 09:26, Iago Toral Quiroga wrote:
>>> We were exposing 31 because the hardware allows for 33 and we need
>>> to reserve one vertex buffer to upload VertexIndex/InstanceIndex
>>> and
>>> another to upload DrawID when needed, however, there is another
>>> restriction in the hardware regarding the size of the VUE entries
>>> that limits this down to 30 (28 after VertexIndex and DrawID):
>> Something's weird here in the description from the PRMs (sorry, not
>> your
>> fault).
>> EU limit of 128 GRFs should allow 32 vertex elements of 4 GRFs.
>> Looking at the PRMs, it seems the limits arises from the maximum
>> value
>> allowed in "Vertex URB Entry Read Length" in SIMD8, which is 15.
>> And 15 * 8 = 120 gives us a limit to 30 vertex elements.
>>
>> Is that a fair description?
> Yeah, I copied the description from the PRMs but you are right, the
> limit comes from the vertex urb entry size. I'll update the commit log.
> Thanks!
>
>>>   Than
>>>   From 3DSTATE_VS, Vertex URB entry read length:
>>>
>>>     "For SIMD8 dispatch, each vertex element requires 4 GRFs of
>>>      payload data, therefore the number of GRFs with vertex data
>>> will
>>>      be 8 times the value programmed in this field. The EU limit of
>>> 128
>>>      GRFs imposes a maximum limit of 30 elements per vertex pushed
>>> into
>>>      the payload, though the pactical limit may be lower."
>>>
>>> There is an assertion in place to check that we don't exceed this
>>> limit
>>> and that is triggered when we expose more than 28 attributes and we
>>> have
>>> shaders that use more than 30 attributes in total (including
>>> VertexIndex/InstanceIndex and DrawID).
>>> ---
>>>    src/intel/vulkan/anv_private.h | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/intel/vulkan/anv_private.h
>>> b/src/intel/vulkan/anv_private.h
>>> index 4dce360c76..f83f49b671 100644
>>> --- a/src/intel/vulkan/anv_private.h
>>> +++ b/src/intel/vulkan/anv_private.h
>>> @@ -89,7 +89,7 @@ struct gen_l3_config;
>>>     */
>>>    #define ANV_HZ_FC_VAL 1.0f
>>>    
>>> -#define MAX_VBS         31
>>> +#define MAX_VBS         28
>>>    #define MAX_SETS         8
>>>    #define MAX_RTS          8
>>>    #define MAX_VIEWPORTS   16
>>
>>



More information about the mesa-dev mailing list