[Mesa-dev] [PATCH 03/13] mesa: Add SYSTEM_VALUE_BASE_VERTEX

Ian Romanick idr at freedesktop.org
Fri Aug 8 14:47:15 PDT 2014


On 08/08/2014 11:31 AM, Roland Scheidegger wrote:
> Am 08.08.2014 20:06, schrieb Ian Romanick:
>> On 08/08/2014 12:37 AM, Kenneth Graunke wrote:
>>> On Friday, August 08, 2014 12:31:07 AM Kenneth Graunke wrote:
>>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>>
>>>> This system value represents the basevertex value passed to
>>>> glDrawElementsBaseVertex and related functions.
>>>>
>>>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>>>> ---
>>>>  src/mesa/main/mtypes.h                     | 15 ++++++++++++++-
>>>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |  1 +
>>>>  2 files changed, 15 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>>>> index c603007..99037c6 100644
>>>> --- a/src/mesa/main/mtypes.h
>>>> +++ b/src/mesa/main/mtypes.h
>>>> @@ -2084,7 +2084,12 @@ typedef enum
>>>>      * gl_VertexID gets basevertex added in.  This differs from DirectX where
>>>>      * SV_VertexID does \b not get basevertex added in.
>>>>      *
>>>> -    * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE
>>>> +    * \note
>>>> +    * If all system values are available, \c SYSTEM_VALUE_VERTEX_ID will be
>>>> +    * equal to \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus
>>>> +    * \c SYSTEM_VALUE_BASE_VERTEX.
>>>> +    *
>>>> +    * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_BASE_VERTEX
>>>>      */
>>>>     SYSTEM_VALUE_VERTEX_ID,
>>>>  
>>>> @@ -2126,6 +2131,14 @@ typedef enum
>>>>      * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_BASE_VERTEX
>>>>      */
>>>>     SYSTEM_VALUE_VERTEX_ID_ZERO_BASE,
>>>> +
>>>> +   /**
>>>> +    * Value of \c basevertex passed to \c glDrawElementsBaseVertex and similar
>>>> +    * functions.
>>>> +    *
>>>> +    * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE
>>>> +    */
>>>> +   SYSTEM_VALUE_BASE_VERTEX,
>>>>     /*@}*/
>>>
>>> Ian,
>>>
>>> It occurred to me that we're sort of abusing this system value in
>>> the i965 patches later in this series - we're using it to store
>>> gl_BaseVertexARB, but also using it to store the "first" parameter
>>> for glDrawArrays. I think in the glDrawArrays case, gl_BaseVertexARB
>>> is supposed to be 0.
>>
>> Yeah, you're right on all counts.  I sent some commentary on patch 7.
>> Short version... we'll have to do some rework to support
>> GL_ARB_shader_draw_parameters, but I think it's safe to leave this code
>> as-is until we implement that other extension.
> 
> So, are you saying the spec really meant the "first" parameter of Draw
> calls does not count as "baseVertex"? That behavior would look very
> inconsistent (and useless) to me.

I think that is correct.

The idea is that gl_BaseVertex can be used to recover the DX-style
VertexID from the GL-style gl_VertexID when used with
glDrawElementsBaseVertex and friends.

Does DX have anything like the "start" element for glDrawArrays?  What
does VertexID get in that case?

I'll have to look and see if there's a conformance test. :)  That will
be the "real" answer.

> gl_VertexId has similar language floating around ("gl_VertexID​ will
> have the base vertex applied to it") and that was resolved to include
> the first parameter of non-indexed draw too.

The language there is a bit different.  It says, basically, gl_VertexID
is that value that would have been passed to glArrayElement.

> Roland



More information about the mesa-dev mailing list