summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2014-12-12 04:14:02 +0100
committerRoland Scheidegger <[email protected]>2014-12-16 04:23:00 +0100
commitfef58979e191e4410fbab2f7dd14cafc340712da (patch)
tree3beddf6699d6a2fcff365f4017ad0495b38bf1ae
parent97dc3d826e0c04e747ff5dbecf3026b6a16737fd (diff)
st/mesa: use vertex id lowering according to pipe cap bit.
Tested with llvmpipe by setting the cap bit temporarily, seems to work, though no driver requests it for now.
-rw-r--r--src/mesa/state_tracker/st_extensions.c4
-rw-r--r--src/mesa/state_tracker/st_glsl_to_tgsi.cpp8
2 files changed, 10 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 20a6845e3b2..e472b84a833 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -674,6 +674,10 @@ void st_init_extensions(struct pipe_screen *screen,
consts->NativeIntegers = GL_TRUE;
consts->MaxClipPlanes = 8;
+ if (screen->get_param(screen, PIPE_CAP_VERTEXID_NOBASE)) {
+ consts->VertexID_is_zero_based = GL_TRUE;
+ }
+
/* Extensions that either depend on GLSL 1.30 or are a subset thereof. */
extensions->ARB_conservative_depth = GL_TRUE;
extensions->ARB_shading_language_packing = GL_TRUE;
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 80dd1028a52..5bc70a4925b 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4195,8 +4195,8 @@ const unsigned _mesa_sysval_to_semantic[SYSTEM_VALUE_MAX] = {
*/
TGSI_SEMANTIC_VERTEXID,
TGSI_SEMANTIC_INSTANCEID,
- 0,
- 0,
+ TGSI_SEMANTIC_VERTEXID_NOBASE,
+ TGSI_SEMANTIC_BASEVERTEX,
/* Geometry shader
*/
@@ -4907,6 +4907,10 @@ st_translate_program(
TGSI_SEMANTIC_SAMPLEMASK);
assert(_mesa_sysval_to_semantic[SYSTEM_VALUE_INVOCATION_ID] ==
TGSI_SEMANTIC_INVOCATIONID);
+ assert(_mesa_sysval_to_semantic[SYSTEM_VALUE_VERTEX_ID_ZERO_BASE] ==
+ TGSI_SEMANTIC_VERTEXID_NOBASE);
+ assert(_mesa_sysval_to_semantic[SYSTEM_VALUE_BASE_VERTEX] ==
+ TGSI_SEMANTIC_BASEVERTEX);
t = CALLOC_STRUCT(st_translate);
if (!t) {