summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300/r300_emit.c
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2009-02-12 20:20:41 -0800
committerCorbin Simpson <MostAwesomeDude@gmail.com>2009-02-12 20:20:41 -0800
commit0d60a3f33cbc071fb5aca95b96f35908059b0435 (patch)
tree202486d0ace9a00275facf7015078cdca689715f /src/gallium/drivers/r300/r300_emit.c
parent637b24a5904ab78cbd3fc61ea5fe39c52be711ce (diff)
r300-gallium: r300 passthrough shader, static shader objects, and clear code.
Diffstat (limited to 'src/gallium/drivers/r300/r300_emit.c')
-rw-r--r--src/gallium/drivers/r300/r300_emit.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index 634a72991c..8391663f7f 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -115,23 +115,32 @@ void r500_emit_fragment_shader(struct r300_context* r300,
{
CS_LOCALS(r300);
int i;
-
- BEGIN_CS(8 + (fs->instruction_count * 6) + 6);
+ /* XXX Problem: OUT_CS_ONE_REG causes card crash */
+ /* BEGIN_CS(8 + (shader->shader.instruction_count * 6) + 6); */
+ BEGIN_CS(10 + (shader->shader.instruction_count * 12));
OUT_CS_REG(R500_US_CONFIG, R500_ZERO_TIMES_ANYTHING_EQUALS_ZERO);
OUT_CS_REG(R500_US_PIXSIZE, fs->shader.stack_size);
OUT_CS_REG(R500_US_CODE_ADDR, R500_US_CODE_START_ADDR(0) |
R500_US_CODE_END_ADDR(fs->instruction_count));
OUT_CS_REG(R500_GA_US_VECTOR_INDEX, R500_GA_US_VECTOR_INDEX_TYPE_INSTR);
- OUT_CS_ONE_REG(R500_GA_US_VECTOR_DATA,
- fs->instruction_count * 6);
- for (i = 0; i < fs->instruction_count; i++) {
- OUT_CS(fs->instructions[i].inst0);
- OUT_CS(fs->instructions[i].inst1);
- OUT_CS(fs->instructions[i].inst2);
- OUT_CS(fs->instructions[i].inst3);
- OUT_CS(fs->instructions[i].inst4);
- OUT_CS(fs->instructions[i].inst5);
+ /* OUT_CS_ONE_REG(R500_GA_US_VECTOR_DATA,
+ shader->shader.instruction_count * 6);
+ for (i = 0; i < shader->shader.instruction_count; i++) {
+ OUT_CS(shader->instructions[i].inst0);
+ OUT_CS(shader->instructions[i].inst1);
+ OUT_CS(shader->instructions[i].inst2);
+ OUT_CS(shader->instructions[i].inst3);
+ OUT_CS(shader->instructions[i].inst4);
+ OUT_CS(shader->instructions[i].inst5);
+ } */
+ for (i = 0; i < shader->shader.instruction_count; i++) {
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst0);
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst1);
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst2);
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst3);
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst4);
+ OUT_CS_REG(R500_GA_US_VECTOR_DATA, shader->instructions[i].inst5);
}
R300_PACIFY;
END_CS;