summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r300/r300_state_shader.c
diff options
context:
space:
mode:
authorCorbin Simpson <[email protected]>2009-02-12 16:53:06 -0800
committerCorbin Simpson <[email protected]>2009-02-12 18:09:14 -0800
commitaffe0311fa60489e56b854c09f713fae024a0b00 (patch)
tree2c0d4f6f9e43a8d3e8b02cf7961498d15d7cdedf /src/gallium/drivers/r300/r300_state_shader.c
parent08e324fff3b295bfd5b176ed1242ad838c6d5f25 (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.c37
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);
}