summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2010-06-23 03:55:20 +0200
committerMarek Olšák <maraeo@gmail.com>2010-06-23 03:55:20 +0200
commit2f6b4187eb6adac6ff7361419269685ed1b2dae2 (patch)
tree9e3b44048c276cdf6a03983ae00c589f6ff26845
parentcbd33e7d3a940e4e7a7bc435f2256714115f3040 (diff)
r300/compiler: emulate loops in vertex shaders
It is not perfect, but it is the best we got.
-rw-r--r--src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c7
-rw-r--r--src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c8
2 files changed, 11 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c b/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c
index 38312658d65..bbdfa0d56f9 100644
--- a/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c
+++ b/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c
@@ -105,14 +105,13 @@ void r3xx_compile_fragment_program(struct r300_fragment_program_compiler* c)
* we don't have branching support for r5xx, we use the emulation
* on all chipsets. */
- if(c->Base.is_r500){
+ if (c->Base.is_r500) {
rc_emulate_loops(&c->Base, R500_PFS_MAX_INST);
- }
- else{
+ } else {
rc_emulate_loops(&c->Base, R300_PFS_MAX_ALU_INST);
}
debug_program_log(c, "after emulate loops");
-
+
rc_emulate_branches(&c->Base);
debug_program_log(c, "after emulate branches");
diff --git a/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c b/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
index 507b2e532fe..6a1e3e75a68 100644
--- a/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
+++ b/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
@@ -30,6 +30,7 @@
#include "radeon_program_alu.h"
#include "radeon_swizzle.h"
#include "radeon_emulate_branches.h"
+#include "radeon_emulate_loops.h"
/*
* Take an already-setup and valid source then swizzle it appropriately to
@@ -600,6 +601,13 @@ void r3xx_compile_vertex_program(struct r300_vertex_program_compiler* compiler)
/* XXX Ideally this should be done only for r3xx, but since
* we don't have branching support for r5xx, we use the emulation
* on all chipsets. */
+ if (compiler->Base.is_r500){
+ rc_emulate_loops(&compiler->Base, R500_VS_MAX_ALU);
+ } else {
+ rc_emulate_loops(&compiler->Base, R300_VS_MAX_ALU);
+ }
+ debug_program_log(compiler, "after emulate loops");
+
rc_emulate_branches(&compiler->Base);
debug_program_log(compiler, "after emulate branches");