bi_load_sysval_to(bi_builder *b, bi_index dest, int sysval,
unsigned nr_components, unsigned offset)
{
+ unsigned sysval_ubo =
+ MAX2(b->shader->inputs->sysval_ubo, b->shader->nir->info.num_ubos);
unsigned uniform =
pan_lookup_sysval(b->shader->sysval_to_id,
&b->shader->info->sysvals,
return bi_load_to(b, nr_components * 32, dest,
bi_imm_u32(idx),
- bi_imm_u32(b->shader->nir->info.num_ubos), BI_SEG_UBO);
+ bi_imm_u32(sysval_ubo), BI_SEG_UBO);
}
static void
info->outputs_written = s->info.outputs_written;
/* Sysvals have dedicated UBO */
- info->ubo_count = s->info.num_ubos + (info->sysvals.sysval_count ? 1 : 0);
+ if (info->sysvals.sysval_count)
+ info->ubo_count = MAX2(s->info.num_ubos + 1, inputs->sysval_ubo + 1);
+ else
+ info->ubo_count = s->info.num_ubos;
info->attribute_count += util_bitcount(s->info.images_used);
info->writes_global = s->info.writes_memory;
nir_dest nir_dest;
/* Figure out which uniform this is */
+ unsigned sysval_ubo =
+ MAX2(ctx->inputs->sysval_ubo, ctx->nir->info.num_ubos);
int sysval = panfrost_sysval_for_instr(instr, &nir_dest);
unsigned dest = nir_dest_index(&nir_dest);
unsigned uniform =
/* Emit the read itself -- this is never indirect */
midgard_instruction *ins =
emit_ubo_read(ctx, instr, dest, (uniform * 16) + offset, NULL, 0,
- ctx->nir->info.num_ubos);
+ sysval_ubo);
ins->mask = mask_of(nr_components);
}
float constants[4];
uint64_t bifrost_blend_desc;
} blend;
+ unsigned sysval_ubo;
bool shaderdb;
bool no_ubo_to_push;