diff options
author | Corbin Simpson <[email protected]> | 2009-02-12 16:53:06 -0800 |
---|---|---|
committer | Corbin Simpson <[email protected]> | 2009-02-12 18:09:14 -0800 |
commit | affe0311fa60489e56b854c09f713fae024a0b00 (patch) | |
tree | 2c0d4f6f9e43a8d3e8b02cf7961498d15d7cdedf /src/gallium/drivers/r300/r300_state_shader.c | |
parent | 08e324fff3b295bfd5b176ed1242ad838c6d5f25 (diff) |
r300-gallium: Add r500 passthrough shader assembly.
This allows a simple passthrough fragment shader to be provided on r500.
Diffstat (limited to 'src/gallium/drivers/r300/r300_state_shader.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_state_shader.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/gallium/drivers/r300/r300_state_shader.c b/src/gallium/drivers/r300/r300_state_shader.c index e87172128fa..710b7ee0a60 100644 --- a/src/gallium/drivers/r300/r300_state_shader.c +++ b/src/gallium/drivers/r300/r300_state_shader.c @@ -22,12 +22,49 @@ #include "r300_state_shader.h" +void r300_make_passthrough_fragment_shader(struct r300_fragment_shader* fs) +{ +} + +void r500_make_passthrough_fragment_shader(struct r500_fragment_shader* fs) +{ + fs->shader.instruction_count = 1; + fs->shader.stack_size = 0; + + fs->instructions[0].inst0 = R500_INST_TYPE_OUT | + R500_INST_TEX_SEM_WAIT | + R500_INST_LAST | + R500_INST_RGB_OMASK_RGB | R500_INST_ALPHA_OMASK | + R500_INST_RGB_CLAMP | R500_INST_ALPHA_CLAMP; + fs->instructions[0].inst1 = + R500_RGB_ADDR0(0) | R500_RGB_ADDR1(0) | R500_RGB_ADDR1_CONST | + R500_RGB_ADDR2(0) | R500_RGB_ADDR2_CONST; + fs->instructions[0].inst2 = + R500_ALPHA_ADDR0(0) | R500_ALPHA_ADDR1(0) | R500_ALPHA_ADDR1_CONST | + R500_ALPHA_ADDR2(0) | R500_ALPHA_ADDR2_CONST; + fs->instructions[0].inst3 = + R500_ALU_RGB_SEL_A_SRC0 | R500_ALU_RGB_R_SWIZ_A_R | + R500_ALU_RGB_G_SWIZ_A_G | R500_ALU_RGB_B_SWIZ_A_B | + R500_ALU_RGB_SEL_B_SRC0 | R500_ALU_RGB_R_SWIZ_B_R | + R500_ALU_RGB_B_SWIZ_B_G | R500_ALU_RGB_G_SWIZ_B_B; + fs->instructions[0].inst4 = + R500_ALPHA_OP_CMP | R500_ALPHA_SWIZ_A_A | R500_ALPHA_SWIZ_B_A; + fs->instructions[0].inst5 = + R500_ALU_RGBA_OP_CMP | R500_ALU_RGBA_R_SWIZ_0 | + R500_ALU_RGBA_G_SWIZ_0 | R500_ALU_RGBA_B_SWIZ_0 | + R500_ALU_RGBA_A_SWIZ_0; + + fs->shader.translated = true; +} + void r300_translate_shader(struct r300_context* r300, struct r300_fragment_shader* fs) { + r300_make_passthrough_fragment_shader(fs); } void r500_translate_shader(struct r300_context* r300, struct r500_fragment_shader* fs) { + r500_make_passthrough_fragment_shader(fs); } |