Mesa (instanced-arrays): tgsi: Support system values in ureg.

Michał Król michal at kemper.freedesktop.org
Wed Dec 30 13:19:54 PST 2009


Module: Mesa
Branch: instanced-arrays
Commit: 5754185d39c147cd81b97fd331ccf78aebfad5e7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5754185d39c147cd81b97fd331ccf78aebfad5e7

Author: Michal Krol <michal at vmware.com>
Date:   Wed Dec 30 21:52:01 2009 +0100

tgsi: Support system values in ureg.

---

 src/gallium/auxiliary/tgsi/tgsi_ureg.c |   36 ++++++++++++++++++++++++++++++++
 src/gallium/auxiliary/tgsi/tgsi_ureg.h |    6 +++++
 2 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index 1e730e5..2713372 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -64,6 +64,7 @@ struct ureg_tokens {
 };
 
 #define UREG_MAX_INPUT PIPE_MAX_ATTRIBS
+#define UREG_MAX_SYSTEM_VALUE PIPE_MAX_ATTRIBS
 #define UREG_MAX_OUTPUT PIPE_MAX_ATTRIBS
 #define UREG_MAX_CONSTANT_RANGE 32
 #define UREG_MAX_IMMEDIATE 32
@@ -95,6 +96,13 @@ struct ureg_program
    unsigned nr_gs_inputs;
 
    struct {
+      unsigned index;
+      unsigned semantic_name;
+      unsigned semantic_index;
+   } system_value[UREG_MAX_SYSTEM_VALUE];
+   unsigned nr_system_values;
+
+   struct {
       unsigned semantic_name;
       unsigned semantic_index;
    } output[UREG_MAX_OUTPUT];
@@ -299,6 +307,25 @@ ureg_DECL_gs_input(struct ureg_program *ureg,
 }
 
 
+struct ureg_src
+ureg_DECL_system_value(struct ureg_program *ureg,
+                       unsigned index,
+                       unsigned semantic_name,
+                       unsigned semantic_index)
+{
+   if (ureg->nr_system_values < UREG_MAX_SYSTEM_VALUE) {
+      ureg->system_value[ureg->nr_system_values].index = index;
+      ureg->system_value[ureg->nr_system_values].semantic_name = semantic_name;
+      ureg->system_value[ureg->nr_system_values].semantic_index = semantic_index;
+      ureg->nr_system_values++;
+   } else {
+      set_bad(ureg);
+   }
+
+   return ureg_src_register(TGSI_FILE_SYSTEM_VALUE, index);
+}
+
+
 struct ureg_dst 
 ureg_DECL_output( struct ureg_program *ureg,
                   unsigned name,
@@ -1003,6 +1030,15 @@ static void emit_decls( struct ureg_program *ureg )
       }
    }
 
+   for (i = 0; i < ureg->nr_system_values; i++) {
+      emit_decl(ureg,
+                TGSI_FILE_SYSTEM_VALUE,
+                ureg->system_value[i].index,
+                ureg->system_value[i].semantic_name,
+                ureg->system_value[i].semantic_index,
+                TGSI_INTERPOLATE_CONSTANT);
+   }
+
    for (i = 0; i < ureg->nr_outputs; i++) {
       emit_decl( ureg, 
                  TGSI_FILE_OUTPUT, 
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index 7e3e7bc..179862d 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -137,6 +137,12 @@ struct ureg_src
 ureg_DECL_gs_input(struct ureg_program *,
                    unsigned index);
 
+struct ureg_src
+ureg_DECL_system_value(struct ureg_program *,
+                       unsigned index,
+                       unsigned semantic_name,
+                       unsigned semantic_index);
+
 struct ureg_dst
 ureg_DECL_output( struct ureg_program *,
                   unsigned semantic_name,



More information about the mesa-commit mailing list