summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r300/r300_emit.c
diff options
context:
space:
mode:
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 634a72991ce..8391663f7f6 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;