unsigned num_lconstb;
boolean slots_used[NINE_MAX_CONST_ALL];
+ unsigned num_slots;
boolean indirect_const_access;
boolean failure;
tx->slots_used[idx] = TRUE;
if (tx->info->const_float_slots < (idx + 1))
tx->info->const_float_slots = idx + 1;
+ if (tx->num_slots < (idx + 1))
+ tx->num_slots = idx + 1;
return src;
}
src = ureg_src_register(TGSI_FILE_CONSTANT, idx);
src = ureg_src_dimension(src, 2);
} else {
- src = ureg_src_register(TGSI_FILE_CONSTANT, tx->info->const_i_base + idx);
+ unsigned slot_idx = tx->info->const_i_base + idx;
+ src = ureg_src_register(TGSI_FILE_CONSTANT, slot_idx);
src = ureg_src_dimension(src, 0);
- }
-
- if (!tx->info->swvp_on) {
- tx->slots_used[tx->info->const_i_base + idx] = TRUE;
+ tx->slots_used[slot_idx] = TRUE;
tx->info->int_slots_used[idx] = TRUE;
+ if (tx->num_slots < (slot_idx + 1))
+ tx->num_slots = slot_idx + 1;
}
+
if (tx->info->const_int_slots < (idx + 1))
tx->info->const_int_slots = idx + 1;
src = ureg_src_register(TGSI_FILE_CONSTANT, r);
src = ureg_src_dimension(src, 3);
} else {
- src = ureg_src_register(TGSI_FILE_CONSTANT, tx->info->const_b_base + r);
+ unsigned slot_idx = tx->info->const_b_base + r;
+ src = ureg_src_register(TGSI_FILE_CONSTANT, slot_idx);
src = ureg_src_dimension(src, 0);
+ tx->slots_used[slot_idx] = TRUE;
+ tx->info->bool_slots_used[idx] = TRUE;
+ if (tx->num_slots < (slot_idx + 1))
+ tx->num_slots = slot_idx + 1;
}
src = ureg_swizzle(src, s, s, s, s);
- 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;
ERR("Overlapping constant slots. The shader is likely to be buggy\n");
- if (tx->indirect_const_access) /* vs only */
+ if (tx->indirect_const_access) { /* vs only */
info->const_float_slots = device->max_vs_const_f;
+ tx->num_slots = MAX2(tx->num_slots, device->max_vs_const_f);
+ }
if (!info->swvp_on) {
- unsigned s, slot_max;
- unsigned max_const_f = IS_VS ? device->max_vs_const_f : device->max_ps_const_f;
-
- slot_max = info->const_bool_slots > 0 ?
- max_const_f + NINE_MAX_CONST_I
- + DIV_ROUND_UP(info->const_bool_slots, 4) :
- info->const_int_slots > 0 ?
- max_const_f + info->const_int_slots :
- info->const_float_slots;
-
- info->const_used_size = sizeof(float[4]) * slot_max; /* slots start from 1 */
-
- for (s = 0; s < slot_max; s++)
- ureg_DECL_constant(tx->ureg, s);
+ info->const_used_size = sizeof(float[4]) * tx->num_slots;
+ if (tx->num_slots)
+ ureg_DECL_constant2D(tx->ureg, 0, tx->num_slots-1, 0);
} else {
ureg_DECL_constant2D(tx->ureg, 0, 4095, 0);
ureg_DECL_constant2D(tx->ureg, 0, 4095, 1);