mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
pan/midgard: Fix quadword_count handling
Spilling can mess with this considerably. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
0a77dd3203
commit
45ac8ea8bd
3 changed files with 8 additions and 4 deletions
|
|
@ -2359,10 +2359,10 @@ midgard_get_first_tag_from_block(compiler_context *ctx, unsigned block_idx)
|
||||||
unsigned first_tag = 0;
|
unsigned first_tag = 0;
|
||||||
|
|
||||||
mir_foreach_block_from(ctx, initial_block, v) {
|
mir_foreach_block_from(ctx, initial_block, v) {
|
||||||
midgard_bundle *initial_bundle =
|
if (v->quadword_count) {
|
||||||
util_dynarray_element(&v->bundles, midgard_bundle, 0);
|
midgard_bundle *initial_bundle =
|
||||||
|
util_dynarray_element(&v->bundles, midgard_bundle, 0);
|
||||||
|
|
||||||
if (initial_bundle) {
|
|
||||||
first_tag = initial_bundle->tag;
|
first_tag = initial_bundle->tag;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1072,7 +1072,9 @@ schedule_block(compiler_context *ctx, midgard_block *block)
|
||||||
|
|
||||||
/* Blend constant was backwards as well. blend_offset if set is
|
/* Blend constant was backwards as well. blend_offset if set is
|
||||||
* strictly positive, as an offset of zero would imply constants before
|
* strictly positive, as an offset of zero would imply constants before
|
||||||
* any instructions which is invalid in Midgard */
|
* any instructions which is invalid in Midgard. TODO: blend constants
|
||||||
|
* are broken if you spill since then quadword_count becomes invalid
|
||||||
|
* XXX */
|
||||||
|
|
||||||
if (blend_offset)
|
if (blend_offset)
|
||||||
ctx->blend_constant_offset = ((ctx->quadword_count + block->quadword_count) - blend_offset - 1) * 0x10;
|
ctx->blend_constant_offset = ((ctx->quadword_count + block->quadword_count) - blend_offset - 1) * 0x10;
|
||||||
|
|
|
||||||
|
|
@ -547,6 +547,7 @@ mir_insert_instruction_before_scheduled(
|
||||||
memcpy(bundles + before, &new, sizeof(new));
|
memcpy(bundles + before, &new, sizeof(new));
|
||||||
|
|
||||||
list_addtail(&new.instructions[0]->link, &before_bundle->instructions[0]->link);
|
list_addtail(&new.instructions[0]->link, &before_bundle->instructions[0]->link);
|
||||||
|
block->quadword_count += quadword_size(new.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -571,6 +572,7 @@ mir_insert_instruction_after_scheduled(
|
||||||
midgard_bundle new = mir_bundle_for_op(ctx, ins);
|
midgard_bundle new = mir_bundle_for_op(ctx, ins);
|
||||||
memcpy(bundles + after + 1, &new, sizeof(new));
|
memcpy(bundles + after + 1, &new, sizeof(new));
|
||||||
list_add(&new.instructions[0]->link, &after_bundle->instructions[after_bundle->instruction_count - 1]->link);
|
list_add(&new.instructions[0]->link, &after_bundle->instructions[after_bundle->instruction_count - 1]->link);
|
||||||
|
block->quadword_count += quadword_size(new.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flip the first-two arguments of a (binary) op. Currently ALU
|
/* Flip the first-two arguments of a (binary) op. Currently ALU
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue