panfrost: Only upload UBOs when needed
If all of the used values from a UBO are pushed, it doesn't need to be uploaded. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11700>
This commit is contained in:
parent
b8a7355c03
commit
c246af0dd8
|
@ -1221,12 +1221,10 @@ panfrost_emit_const_buf(struct panfrost_batch *batch,
|
||||||
|
|
||||||
/* The rest are honest-to-goodness UBOs */
|
/* The rest are honest-to-goodness UBOs */
|
||||||
|
|
||||||
for (unsigned ubo = 0; ubo < ubo_count; ++ubo) {
|
u_foreach_bit(ubo, ss->info.ubo_mask & buf->enabled_mask) {
|
||||||
size_t usz = buf->cb[ubo].buffer_size;
|
size_t usz = buf->cb[ubo].buffer_size;
|
||||||
bool enabled = buf->enabled_mask & (1 << ubo);
|
|
||||||
bool empty = usz == 0;
|
|
||||||
|
|
||||||
if (!enabled || empty) {
|
if (usz == 0) {
|
||||||
ubo_ptr[ubo] = 0;
|
ubo_ptr[ubo] = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3467,6 +3467,8 @@ bifrost_compile_shader_nir(nir_shader *nir,
|
||||||
info->bifrost.wait_6 = (first_deps & (1 << 6));
|
info->bifrost.wait_6 = (first_deps & (1 << 6));
|
||||||
info->bifrost.wait_7 = (first_deps & (1 << 7));
|
info->bifrost.wait_7 = (first_deps & (1 << 7));
|
||||||
|
|
||||||
|
info->ubo_mask = ctx->ubo_mask & BITSET_MASK(ctx->nir->info.num_ubos);
|
||||||
|
|
||||||
if (bifrost_debug & BIFROST_DBG_SHADERS && !skip_internal) {
|
if (bifrost_debug & BIFROST_DBG_SHADERS && !skip_internal) {
|
||||||
disassemble_bifrost(stdout, binary->data, binary->size,
|
disassemble_bifrost(stdout, binary->data, binary->size,
|
||||||
bifrost_debug & BIFROST_DBG_VERBOSE);
|
bifrost_debug & BIFROST_DBG_VERBOSE);
|
||||||
|
|
|
@ -3230,6 +3230,8 @@ midgard_compile_shader_nir(nir_shader *nir,
|
||||||
/* Report the very first tag executed */
|
/* Report the very first tag executed */
|
||||||
info->midgard.first_tag = midgard_get_first_tag_from_block(ctx, 0);
|
info->midgard.first_tag = midgard_get_first_tag_from_block(ctx, 0);
|
||||||
|
|
||||||
|
info->ubo_mask = ctx->ubo_mask & BITSET_MASK(ctx->nir->info.num_ubos);
|
||||||
|
|
||||||
if ((midgard_debug & MIDGARD_DBG_SHADERS) &&
|
if ((midgard_debug & MIDGARD_DBG_SHADERS) &&
|
||||||
((midgard_debug & MIDGARD_DBG_INTERNAL) || !nir->info.internal)) {
|
((midgard_debug & MIDGARD_DBG_INTERNAL) || !nir->info.internal)) {
|
||||||
disassemble_midgard(stdout, binary->data,
|
disassemble_midgard(stdout, binary->data,
|
||||||
|
|
|
@ -216,6 +216,8 @@ struct pan_shader_info {
|
||||||
* Uniforms (Bifrost) */
|
* Uniforms (Bifrost) */
|
||||||
struct panfrost_ubo_push push;
|
struct panfrost_ubo_push push;
|
||||||
|
|
||||||
|
uint32_t ubo_mask;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct bifrost_shader_info bifrost;
|
struct bifrost_shader_info bifrost;
|
||||||
struct midgard_shader_info midgard;
|
struct midgard_shader_info midgard;
|
||||||
|
|
Loading…
Reference in New Issue