gallium: add TGSI_SEMANTIC_VERTEXID_NOBASE and TGSI_SEMANTIC_BASEVERTEX

Plus a new PIPE_CAP_VERTEXID_NOBASE query. The idea is that drivers not
supporting vertex ids with base vertex offset applied (so, only support
d3d10-style vertex ids) will get such a d3d10-style vertex id instead -
with the caveat they'll also need to handle the basevertex system value
too (this follows what core mesa already does).
Additionally, this is also useful for other state trackers (for instance
llvmpipe / draw right now implement the d3d10 behavior on purpose, but
with different semantics it can just do both).
Doesn't do anything yet.
And fix up the docs wrt similar values.

v2: incorporate feedback from Brian and others, better names, better docs.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Roland Scheidegger
2014-12-12 04:13:43 +01:00
parent 3c8ef3a74b
commit ade8b26bf5
19 changed files with 84 additions and 6 deletions

View File

@@ -233,6 +233,14 @@ The integer capabilities:
* ``PIPE_CAP_CLIP_HALFZ``: Whether the driver supports the
pipe_rasterizer_state::clip_halfz being set to true. This is required
for enabling ARB_clip_control.
* ``PIPE_CAP_VERTEXID_NOBASE``: If true, the driver only supports
TGSI_SEMANTIC_VERTEXID_NOBASE (and not TGSI_SEMANTIC_VERTEXID). This means
state trackers for APIs whose vertexIDs are offset by basevertex (such as GL)
will need to lower TGSI_SEMANTIC_VERTEXID to TGSI_SEMANTIC_VERTEXID_NOBASE
and TGSI_SEMANTIC_BASEVERTEX, so drivers setting this must handle both these
semantics. Only relevant if geometry shaders are supported.
(Currently not possible to query availability of these two semantics outside
this, at least BASEVERTEX should be exposed separately too).
.. _pipe_capf:

View File

@@ -2651,7 +2651,7 @@ TGSI_SEMANTIC_VIEWPORT_INDEX
For geometry shaders, this semantic label indicates that an output
contains the index of the viewport (and scissor) to use.
Only the X value is used.
This is an integer value, and only the X component is used.
TGSI_SEMANTIC_LAYER
@@ -2659,7 +2659,8 @@ TGSI_SEMANTIC_LAYER
For geometry shaders, this semantic label indicates that an output
contains the layer value to use for the color and depth/stencil surfaces.
Only the X value is used. (Also known as rendertarget array index.)
This is an integer value, and only the X component is used.
(Also known as rendertarget array index.)
TGSI_SEMANTIC_CULLDIST
@@ -2700,7 +2701,8 @@ TGSI_SEMANTIC_SAMPLEID
""""""""""""""""""""""
For fragment shaders, this semantic label indicates that a system value
contains the current sample id (i.e. gl_SampleID). Only the X value is used.
contains the current sample id (i.e. gl_SampleID).
This is an integer value, and only the X component is used.
TGSI_SEMANTIC_SAMPLEPOS
"""""""""""""""""""""""
@@ -2720,8 +2722,48 @@ TGSI_SEMANTIC_INVOCATIONID
""""""""""""""""""""""""""
For geometry shaders, this semantic label indicates that a system value
contains the current invocation id (i.e. gl_InvocationID). Only the X value is
used.
contains the current invocation id (i.e. gl_InvocationID).
This is an integer value, and only the X component is used.
TGSI_SEMANTIC_INSTANCEID
""""""""""""""""""""""""
For vertex shaders, this semantic label indicates that a system value contains
the current instance id (i.e. gl_InstanceID). It does not include the base
instance. This is an integer value, and only the X component is used.
TGSI_SEMANTIC_VERTEXID
""""""""""""""""""""""
For vertex shaders, this semantic label indicates that a system value contains
the current vertex id (i.e. gl_VertexID). It does (unlike in d3d10) include the
base vertex. This is an integer value, and only the X component is used.
TGSI_SEMANTIC_VERTEXID_NOBASE
"""""""""""""""""""""""""""""""
For vertex shaders, this semantic label indicates that a system value contains
the current vertex id without including the base vertex (this corresponds to
d3d10 vertex id, so TGSI_SEMANTIC_VERTEXID_NOBASE + TGSI_SEMANTIC_BASEVERTEX
== TGSI_SEMANTIC_VERTEXID). This is an integer value, and only the X component
is used.
TGSI_SEMANTIC_BASEVERTEX
""""""""""""""""""""""""
For vertex shaders, this semantic label indicates that a system value contains
the base vertex (i.e. gl_BaseVertex). Note that for non-indexed draw calls,
this contains the first (or start) value instead.
This is an integer value, and only the X component is used.
TGSI_SEMANTIC_PRIMID
""""""""""""""""""""
For geometry and fragment shaders, this semantic label indicates the value
contains the primitive id (i.e. gl_PrimitiveID). This is an integer value,
and only the X component is used.
FIXME: This right now can be either a ordinary input or a system value...
Declaration Interpolate
^^^^^^^^^^^^^^^^^^^^^^^