Mesa (arb_geometry_shader4): gs: add geometry shader semantics
Zack Rusin
zack at kemper.freedesktop.org
Thu Jul 16 03:29:44 UTC 2009
Module: Mesa
Branch: arb_geometry_shader4
Commit: a6dead44a1a880ad0deaf861fbec7f7389e9ed64
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6dead44a1a880ad0deaf861fbec7f7389e9ed64
Author: Zack Rusin <zackr at vmware.com>
Date: Wed Jul 15 23:33:43 2009 -0400
gs: add geometry shader semantics
---
src/gallium/auxiliary/draw/draw_gs.c | 2 +-
src/gallium/auxiliary/tgsi/tgsi_dump.c | 4 +++-
src/gallium/include/pipe/p_shader_tokens.h | 20 +++++++++++---------
src/mesa/state_tracker/st_program.c | 12 +++++++++++-
4 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
index 9132ded..bdef375 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -161,7 +161,7 @@ void draw_geometry_shader_run(struct draw_geometry_shader *shader,
for (k = 0; k < max_primitives; ++k) {
for (j = 0; j < num_vertices; j++) {
- int idx = (k * num_vertices + j) * shader->info.num_inputs;
+ int idx = ((i + k) * num_vertices + j) * shader->info.num_inputs;
#if 1
debug_printf("%d) Prim, %d) Input vert:\n", i, idx);
for (slot = 0; slot < shader->info.num_inputs; slot++) {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index a6994ec..76201de 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -110,7 +110,9 @@ static const char *semantic_names[] =
"PSIZE",
"GENERIC",
"NORMAL",
- "FACE"
+ "FACE",
+ "VERTICES_IN",
+ "PRIM_ID"
};
static const char *immediate_type_names[] =
diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
index b00cfe3..c374c5b 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -124,15 +124,17 @@ struct tgsi_declaration_range
unsigned Last : 16; /**< UINT */
};
-#define TGSI_SEMANTIC_POSITION 0
-#define TGSI_SEMANTIC_COLOR 1
-#define TGSI_SEMANTIC_BCOLOR 2 /**< back-face color */
-#define TGSI_SEMANTIC_FOG 3
-#define TGSI_SEMANTIC_PSIZE 4
-#define TGSI_SEMANTIC_GENERIC 5
-#define TGSI_SEMANTIC_NORMAL 6
-#define TGSI_SEMANTIC_FACE 7
-#define TGSI_SEMANTIC_COUNT 8 /**< number of semantic values */
+#define TGSI_SEMANTIC_POSITION 0
+#define TGSI_SEMANTIC_COLOR 1
+#define TGSI_SEMANTIC_BCOLOR 2 /**< back-face color */
+#define TGSI_SEMANTIC_FOG 3
+#define TGSI_SEMANTIC_PSIZE 4
+#define TGSI_SEMANTIC_GENERIC 5
+#define TGSI_SEMANTIC_NORMAL 6
+#define TGSI_SEMANTIC_FACE 7
+#define TGSI_SEMANTIC_VERTICES 8
+#define TGSI_SEMANTIC_PRIMID 9
+#define TGSI_SEMANTIC_COUNT 10 /**< number of semantic values */
struct tgsi_declaration_semantic
{
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 27862cd..720e257 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -647,6 +647,16 @@ st_translate_geometry_program(struct st_context *st,
gs_num_inputs++;
switch (attr) {
+ case GEOM_ATTRIB_VERTICES:
+ stgp->input_semantic_name[slot] = TGSI_SEMANTIC_VERTICES;
+ stgp->input_semantic_index[slot] = 0;
+ interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
+ break;
+ case GEOM_ATTRIB_PRIMITIVE_ID:
+ stgp->input_semantic_name[slot] = TGSI_SEMANTIC_PRIMID;
+ stgp->input_semantic_index[slot] = 0;
+ interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
+ break;
case GEOM_ATTRIB_POSITION:
stgp->input_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
stgp->input_semantic_index[slot] = 0;
@@ -672,7 +682,7 @@ st_translate_geometry_program(struct st_context *st,
stgp->input_semantic_index[slot] = num_generic++;
interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
break;
- case FRAG_ATTRIB_VAR0:
+ case GEOM_ATTRIB_VAR0:
/* fall-through */
default:
stgp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
More information about the mesa-commit
mailing list