summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/state_trackers/nine/nine_shader.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/nine/nine_shader.c b/src/gallium/state_trackers/nine/nine_shader.c
index e912ab3f643..dc3c6f3c9ea 100644
--- a/src/gallium/state_trackers/nine/nine_shader.c
+++ b/src/gallium/state_trackers/nine/nine_shader.c
@@ -508,6 +508,8 @@ struct shader_translator
struct sm1_local_const *lconstb;
unsigned num_lconstb;
+ boolean slots_used[NINE_MAX_CONST_ALL];
+
boolean indirect_const_access;
boolean failure;
@@ -567,6 +569,8 @@ static struct ureg_src nine_float_constant_src(struct shader_translator *tx, int
src = ureg_src_dimension(src, 0);
}
+ if (!tx->info->swvp_on)
+ tx->slots_used[idx] = TRUE;
if (tx->info->const_float_slots < (idx + 1))
tx->info->const_float_slots = idx + 1;
@@ -585,8 +589,10 @@ static struct ureg_src nine_integer_constant_src(struct shader_translator *tx, i
src = ureg_src_dimension(src, 0);
}
- if (!tx->info->swvp_on)
+ if (!tx->info->swvp_on) {
+ tx->slots_used[tx->info->const_i_base + idx] = TRUE;
tx->info->int_slots_used[idx] = TRUE;
+ }
if (tx->info->const_int_slots < (idx + 1))
tx->info->const_int_slots = idx + 1;
@@ -609,8 +615,10 @@ static struct ureg_src nine_boolean_constant_src(struct shader_translator *tx, i
}
src = ureg_swizzle(src, s, s, s, s);
- if (!tx->info->swvp_on)
+ if (!tx->info->swvp_on) {
+ tx->slots_used[tx->info->const_b_base + r] = TRUE;
tx->info->bool_slots_used[idx] = TRUE;
+ }
if (tx->info->const_bool_slots < (idx + 1))
tx->info->const_bool_slots = idx + 1;
@@ -3517,6 +3525,7 @@ tx_ctor(struct shader_translator *tx, struct pipe_screen *screen, struct nine_sh
info->position_t = FALSE;
info->point_size = FALSE;
+ memset(tx->slots_used, 0, sizeof(tx->slots_used));
memset(info->int_slots_used, 0, sizeof(info->int_slots_used));
memset(info->bool_slots_used, 0, sizeof(info->bool_slots_used));