[Mesa-dev] [PATCH] r300/compiler: Prevent the fragmentation of TEX blocks in the pair scheduler.
tstellar at gmail.com
tstellar at gmail.com
Mon May 31 22:41:50 PDT 2010
From: Tom Stellard <tstellar at gmail.com>
This fixes bug:
https://bugs.freedesktop.org/show_bug.cgi?id=25109
---
.../dri/r300/compiler/radeon_pair_schedule.c | 39 +++++++++++++-------
1 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
index a279549..0641be5 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
@@ -208,21 +208,32 @@ static void emit_all_tex(struct schedule_state * s, struct rc_instruction * befo
assert(s->ReadyTEX);
- /* Don't let the ready list change under us! */
- readytex = s->ReadyTEX;
- s->ReadyTEX = 0;
-
- /* Node marker for R300 */
- struct rc_instruction * inst_begin = rc_insert_new_instruction(s->C, before->Prev);
- inst_begin->U.I.Opcode = RC_OPCODE_BEGIN_TEX;
-
- /* Link texture instructions back in */
- while(readytex) {
- struct schedule_instruction * tex = readytex;
- readytex = readytex->NextReady;
+ if(s->ReadyTEX){
+ /* Node marker for R300 */
+ struct rc_instruction * inst_begin =
+ rc_insert_new_instruction(s->C, before->Prev);
+ inst_begin->U.I.Opcode = RC_OPCODE_BEGIN_TEX;
+ }
- rc_insert_instruction(before->Prev, tex->Instruction);
- commit_instruction(s, tex);
+ /* The purpose of this outer loop is to emit TEX instruction that
+ * have become ready as a result of the inner loop. This prevents
+ * the fragmentation of TEX blocks, which for some shaders (in Civ4
+ * for example) was creating too many texture indirections on r300
+ * cards.
+ */
+ while(s->ReadyTEX){
+ /* Don't let the ready list change under us! */
+ readytex = s->ReadyTEX;
+ s->ReadyTEX = 0;
+
+ /* Link texture instructions back in */
+ while(readytex) {
+ struct schedule_instruction * tex = readytex;
+ readytex = readytex->NextReady;
+
+ rc_insert_instruction(before->Prev, tex->Instruction);
+ commit_instruction(s, tex);
+ }
}
}
--
1.6.4.4
More information about the mesa-dev
mailing list