summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Krol <michal@vmware.com>2010-01-27 20:43:42 +0100
committerMichal Krol <michal@vmware.com>2010-01-28 14:08:22 +0100
commit9e895831bcb35b0a14f68538376b15ae4e94ae0d (patch)
tree2fc9e041fb44dbdb8148cc05b43b70b228715a00
parent3ba2ab3a23099f00366bdbec09f18612bfa71225 (diff)
tgsi: Constants declared with ureg_DECL_constant() are one-dimensional.
This is to maintain backward compatibility with drivers that don't support arrays of constant buffers.
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_ureg.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index d207097984b..f2610d07644 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -136,7 +136,8 @@ struct ureg_program
unsigned temps_active[UREG_MAX_TEMP / 32];
unsigned nr_temps;
- struct const_decl const_decls[PIPE_MAX_CONSTANT_BUFFERS];
+ struct const_decl const_decls;
+ struct const_decl const_decls2D[PIPE_MAX_CONSTANT_BUFFERS];
unsigned property_gs_input_prim;
unsigned property_gs_output_prim;
@@ -371,6 +372,9 @@ out:
/* Returns a new constant register. Keep track of which have been
* referred to so that we can emit decls later.
*
+ * Constant operands declared with this function must be addressed
+ * with a two-dimensional index.
+ *
* There is nothing in this code to bind this constant to any tracked
* value or manage any constant_buffer contents -- that's the
* resposibility of the calling code.
@@ -381,7 +385,7 @@ ureg_DECL_constant2D(struct ureg_program *ureg,
unsigned last,
unsigned index2D)
{
- struct const_decl *decl = &ureg->const_decls[index2D];
+ struct const_decl *decl = &ureg->const_decls2D[index2D];
assert(index2D < PIPE_MAX_CONSTANT_BUFFERS);
@@ -394,11 +398,16 @@ ureg_DECL_constant2D(struct ureg_program *ureg,
}
+/* A one-dimensional, depricated version of ureg_DECL_constant2D().
+ *
+ * Constant operands declared with this function must be addressed
+ * with a one-dimensional index.
+ */
struct ureg_src
ureg_DECL_constant(struct ureg_program *ureg,
unsigned index)
{
- struct const_decl *decl = &ureg->const_decls[0];
+ struct const_decl *decl = &ureg->const_decls;
unsigned minconst = index, maxconst = index;
unsigned i;
@@ -1241,8 +1250,17 @@ static void emit_decls( struct ureg_program *ureg )
ureg->sampler[i].Index, 1 );
}
+ if (ureg->const_decls.nr_constant_ranges) {
+ for (i = 0; i < ureg->const_decls.nr_constant_ranges; i++) {
+ emit_decl_range(ureg,
+ TGSI_FILE_CONSTANT,
+ ureg->const_decls.constant_range[i].first,
+ ureg->const_decls.constant_range[i].last - ureg->const_decls.constant_range[i].first + 1);
+ }
+ }
+
for (i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; i++) {
- struct const_decl *decl = &ureg->const_decls[i];
+ struct const_decl *decl = &ureg->const_decls2D[i];
if (decl->nr_constant_ranges) {
uint j;