On Wed, Dec 10, 2014 at 10:22 PM, <srol...@vmware.com> wrote: > From: Roland Scheidegger <srol...@vmware.com> > > Plus a new PIPE_CAP_VERTEXID_NOOFFSET 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. > --- > src/gallium/auxiliary/tgsi/tgsi_scan.c | 6 ++++ > src/gallium/auxiliary/tgsi/tgsi_scan.h | 2 ++ > src/gallium/auxiliary/tgsi/tgsi_strings.c | 2 ++ > src/gallium/docs/source/screen.rst | 6 ++++ > src/gallium/docs/source/tgsi.rst | 36 > ++++++++++++++++++++++++ > src/gallium/drivers/freedreno/freedreno_screen.c | 1 + > src/gallium/drivers/i915/i915_screen.c | 1 + > src/gallium/drivers/ilo/ilo_screen.c | 2 ++ > src/gallium/drivers/llvmpipe/lp_screen.c | 2 ++ > src/gallium/drivers/nouveau/nv30/nv30_screen.c | 1 + > src/gallium/drivers/nouveau/nv50/nv50_screen.c | 1 + > src/gallium/drivers/r300/r300_screen.c | 1 + > src/gallium/drivers/r600/r600_pipe.c | 1 + > src/gallium/drivers/radeonsi/si_pipe.c | 1 + > src/gallium/drivers/softpipe/sp_screen.c | 2 ++ > src/gallium/drivers/svga/svga_screen.c | 1 + > src/gallium/drivers/vc4/vc4_screen.c | 1 + > src/gallium/include/pipe/p_defines.h | 1 + > src/gallium/include/pipe/p_shader_tokens.h | 4 ++- > 19 files changed, 71 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c > b/src/gallium/auxiliary/tgsi/tgsi_scan.c > index 649c327..954eb10 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c > @@ -213,6 +213,12 @@ tgsi_scan_shader(const struct tgsi_token *tokens, > else if (semName == TGSI_SEMANTIC_VERTEXID) { > info->uses_vertexid = TRUE; > } > + else if (semName == TGSI_SEMANTIC_VERTEXID_ZEROBASE) { > + info->uses_vertexid_zerobase = TRUE; > + } > + else if (semName == TGSI_SEMANTIC_BASEVERTEX) { > + info->uses_basevertex = TRUE; > + } > else if (semName == TGSI_SEMANTIC_PRIMID) { > info->uses_primid = TRUE; > } > diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h > b/src/gallium/auxiliary/tgsi/tgsi_scan.h > index 61ce813..b353097 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h > +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h > @@ -74,6 +74,8 @@ struct tgsi_shader_info > boolean uses_kill; /**< KILL or KILL_IF instruction used? */ > boolean uses_instanceid; > boolean uses_vertexid; > + boolean uses_vertexid_zerobase; > + boolean uses_basevertex; > boolean uses_primid; > boolean uses_frontface; > boolean writes_psize; > diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c > b/src/gallium/auxiliary/tgsi/tgsi_strings.c > index 01fa5a9..7a45e2d 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c > @@ -86,6 +86,8 @@ const char *tgsi_semantic_names[TGSI_SEMANTIC_COUNT] = > "SAMPLEPOS", > "SAMPLEMASK", > "INVOCATIONID", > + "VERTEXID_ZEROBASE", > + "BASEVERTEX", > }; > > const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] = > diff --git a/src/gallium/docs/source/screen.rst > b/src/gallium/docs/source/screen.rst > index e711ad4..6ccbe5b 100644 > --- a/src/gallium/docs/source/screen.rst > +++ b/src/gallium/docs/source/screen.rst > @@ -233,6 +233,12 @@ 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_NOOFFSET``: Whether the driver needs lowering of the > + vertex id to not include the basevertex offset. If so vertex id will > + use TGSI_SEMANTIC_VERTEXID_ZEROBASE and TGSI_SEMANTIC_BASEVERTEX instead > + of TGSI_SEMANTIC_VERTEXID. Only relevant if geometry shaders are supported. > + (Currently not possible to query availability of these two semantics > outside > + of this). > > > .. _pipe_capf: > diff --git a/src/gallium/docs/source/tgsi.rst > b/src/gallium/docs/source/tgsi.rst > index cbb8f74..c12858d 100644 > --- a/src/gallium/docs/source/tgsi.rst > +++ b/src/gallium/docs/source/tgsi.rst > @@ -2723,6 +2723,42 @@ 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. > > +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. Only the X value 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. Only the X value is used. > + > +TGSI_SEMANTIC_VERTEXID_ZEROBASE > +""""""""""""""""""""""""""""""" > + > +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_ZEROBASE + > TGSI_SEMANTIC_BASEVERTEX > +== TGSI_SEMANTIC_VERTEXID). Only the X value is used. > + > +TGSI_SEMANTIC_BASEVERTEX > +"""""""""""""""""""""""" > + > +For vertex shaders, this semantic label indicates that a system value > contains > +the base vertex (i.e. gl_BaseVertex). Only the X value is used. > + > +TGSI_SEMANTIC_PRIMID > +"""""""""""""""""""" > + > +For geometry and fragment shaders, this semantic label indicates the value > +contains the primitive id (i.e. gl_PrimitiveID). Only the X value is used. > +FIXME: This right now can be either a ordinary input or a system value... > + > + > Declaration Interpolate > ^^^^^^^^^^^^^^^^^^^^^^^ > > diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c > b/src/gallium/drivers/freedreno/freedreno_screen.c > index ce105b8..43f5366 100644 > --- a/src/gallium/drivers/freedreno/freedreno_screen.c > +++ b/src/gallium/drivers/freedreno/freedreno_screen.c > @@ -228,6 +228,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: > case PIPE_CAP_SAMPLER_VIEW_TARGET: > case PIPE_CAP_CLIP_HALFZ: > + case PIPE_CAP_VERTEXID_NOOFSET:
NOOFFSET Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev