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