summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2014-12-12 04:13:43 +0100
committerRoland Scheidegger <[email protected]>2014-12-16 04:23:00 +0100
commitade8b26bf515fa4f0cbf43e9df4885368e984277 (patch)
treec536a0936c5a55a4b6679f39527b97ec1f9cbab4 /src/gallium/auxiliary
parent3c8ef3a74b51d5c79bbbc3e73244085efd89206b (diff)
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 <[email protected]> Reviewed-by: Jose Fonseca <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c6
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h2
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_strings.c2
3 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 649c327d9c9..eb313e430d6 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_NOBASE) {
+ info->uses_vertexid_nobase = 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 61ce81342a4..375f75a3b98 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_nobase;
+ 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 01fa5a9f345..bd975448773 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_NOBASE",
+ "BASEVERTEX",
};
const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] =