uint64_t centroid_inputs;
uint32_t first_ubo;
+ uint32_t first_ssbo;
struct ureg_src images[PIPE_MAX_SHADER_IMAGES];
};
ureg_DECL_constant2D(c->ureg, 0, DIV_ROUND_UP(ubo_sizes[i], 16) - 1, i);
}
- for (int i = 0; i < c->s->info.num_ssbos; i++) {
- /* XXX: nv50 uses the atomic flag to set caching for (lowered) atomic
- * counters
- */
- bool atomic = false;
- ureg_DECL_buffer(c->ureg, i, atomic);
- }
+ if (c->options->lower_ssbo_bindings) {
+ c->first_ssbo = 255;
+ nir_foreach_variable_with_modes(var, c->s, nir_var_mem_ssbo) {
+ if (c->first_ssbo > var->data.binding)
+ c->first_ssbo = var->data.binding;
+ }
+ } else
+ c->first_ssbo = 0;
+
+ /* XXX: nv50 uses the atomic flag to set caching for (lowered) atomic
+ * counters
+ */
+ bool atomic = false;
+ for (int i = 0; i < c->s->info.num_ssbos; ++i)
+ ureg_DECL_buffer(c->ureg, c->first_ssbo + i, atomic);
+
}
static void
struct ureg_src memory;
switch (mode) {
case nir_var_mem_ssbo:
- memory = ntt_ureg_src_indirect(c, ureg_src_register(TGSI_FILE_BUFFER, 0),
+ memory = ntt_ureg_src_indirect(c, ureg_src_register(TGSI_FILE_BUFFER,
+ c->first_ssbo),
instr->src[is_store ? 1 : 0], 2);
next_src = 1;
break;