aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2020-05-21 15:48:03 -0400
committerAlyssa Rosenzweig <[email protected]>2020-05-21 15:48:03 -0400
commit6dd11a6dc34c624a90de3e064ad3552830a8d0d9 (patch)
tree93886aaa4b71c15e770058da70217dd985e9ee73 /src
parentb8bd356dff032ea3a67158f133fc24da39c9e0b7 (diff)
panfrost: Limit blend shader work count
To 8, but later we should go much lower. Signed-off-by: Alyssa Rosenzweig <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5124>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_cmdstream.c9
-rw-r--r--src/panfrost/midgard/midgard_ra.c9
2 files changed, 13 insertions, 5 deletions
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index 50eaa195a69..21ab118085d 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -642,12 +642,15 @@ panfrost_frag_meta_blend_update(struct panfrost_context *ctx,
blend[c] = panfrost_get_blend_for_context(ctx, c, &shader_bo,
&shader_offset);
- /* If there is a blend shader, work registers are shared. XXX: opt */
+ /* If there is a blend shader, work registers are shared. We impose 8
+ * work registers as a limit for blend shaders. Should be lower XXX */
if (!(dev->quirks & IS_BIFROST)) {
for (unsigned c = 0; c < rt_count; ++c) {
- if (blend[c].is_shader)
- fragmeta->midgard1.work_count = 16;
+ if (blend[c].is_shader) {
+ fragmeta->midgard1.work_count =
+ MAX2(fragmeta->midgard1.work_count, 8);
+ }
}
}
diff --git a/src/panfrost/midgard/midgard_ra.c b/src/panfrost/midgard/midgard_ra.c
index baeec45f042..8c6210e0634 100644
--- a/src/panfrost/midgard/midgard_ra.c
+++ b/src/panfrost/midgard/midgard_ra.c
@@ -442,8 +442,10 @@ static struct lcra_state *
allocate_registers(compiler_context *ctx, bool *spilled)
{
/* The number of vec4 work registers available depends on when the
- * uniforms start, so compute that first */
- int work_count = 16 - MAX2((ctx->uniform_cutoff - 8), 0);
+ * uniforms start and the shader stage. By ABI we limit blend shaders
+ * to 8 registers, should be lower XXX */
+ int work_count = ctx->is_blend ? 8 :
+ 16 - MAX2((ctx->uniform_cutoff - 8), 0);
/* No register allocation to do with no SSA */
@@ -831,6 +833,9 @@ mir_spill_register(
unsigned spill_class,
unsigned *spill_count)
{
+ if (spill_class == REG_CLASS_WORK && ctx->is_blend)
+ unreachable("Blend shader spilling is currently unimplemented");
+
unsigned spill_index = ctx->temp_count;
/* We have a spill node, so check the class. Work registers