projects
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
1db736f
)
r300-gallium: r300-fs: Moar.
author
Corbin Simpson
<MostAwesomeDude@gmail.com>
Wed, 25 Mar 2009 14:15:07 +0000
(07:15 -0700)
committer
Corbin Simpson
<MostAwesomeDude@gmail.com>
Wed, 25 Mar 2009 14:15:49 +0000
(07:15 -0700)
src/gallium/drivers/r300/r300_context.h
patch
|
blob
|
history
src/gallium/drivers/r300/r300_debug.c
patch
|
blob
|
history
src/gallium/drivers/r300/r300_emit.c
patch
|
blob
|
history
src/gallium/drivers/r300/r300_state_shader.c
patch
|
blob
|
history
src/gallium/drivers/r300/r300_state_shader.h
patch
|
blob
|
history
diff --git
a/src/gallium/drivers/r300/r300_context.h
b/src/gallium/drivers/r300/r300_context.h
index 0e5e471d11682d20269dc5150ee690e950d0130b..ed6480bea79e7f607d64a0ee7f5bd9ee2223bdca 100644
(file)
--- a/
src/gallium/drivers/r300/r300_context.h
+++ b/
src/gallium/drivers/r300/r300_context.h
@@
-169,10
+169,7
@@
struct r300_fragment_shader {
int indirections;
/* Indirection node offsets */
int indirections;
/* Indirection node offsets */
- int offset0;
- int offset1;
- int offset2;
- int offset3;
+ int alu_offset[4];
/* Machine instructions */
struct {
/* Machine instructions */
struct {
diff --git
a/src/gallium/drivers/r300/r300_debug.c
b/src/gallium/drivers/r300/r300_debug.c
index f657588c72064a2bcd75e65983947df0cb133c9c..8d44756c3323504bc83a631d3633dca4ffebfa84 100644
(file)
--- a/
src/gallium/drivers/r300/r300_debug.c
+++ b/
src/gallium/drivers/r300/r300_debug.c
@@
-22,6
+22,14
@@
#include "r300_debug.h"
#include "r300_debug.h"
+static void r300_dump_fs(struct r300_fragment_shader* fs)
+{
+ int i;
+
+ for (i = 0; i < fs->alu_instruction_count; i++) {
+ }
+}
+
static char* r500_fs_swiz[] = {
" R",
" G",
static char* r500_fs_swiz[] = {
" R",
" G",
diff --git
a/src/gallium/drivers/r300/r300_emit.c
b/src/gallium/drivers/r300/r300_emit.c
index bf190a7dcdc7b3eade8838c5c4917fc7c91580de..16455e48ce87fa3e280172b144b809de5c178854 100644
(file)
--- a/
src/gallium/drivers/r300/r300_emit.c
+++ b/
src/gallium/drivers/r300/r300_emit.c
@@
-90,12
+90,12
@@
void r300_emit_fragment_shader(struct r300_context* r300,
OUT_CS_REG(R300_US_CONFIG, fs->indirections);
OUT_CS_REG(R300_US_PIXSIZE, fs->shader.stack_size);
/* XXX figure out exactly how big the sizes are on this reg */
OUT_CS_REG(R300_US_CONFIG, fs->indirections);
OUT_CS_REG(R300_US_PIXSIZE, fs->shader.stack_size);
/* XXX figure out exactly how big the sizes are on this reg */
- OUT_CS_REG(R300_US_CODE_OFFSET, 0x0);
+ OUT_CS_REG(R300_US_CODE_OFFSET, 0x
4
0);
/* XXX figure these ones out a bit better kthnx */
OUT_CS_REG(R300_US_CODE_ADDR_0, 0x0);
OUT_CS_REG(R300_US_CODE_ADDR_1, 0x0);
OUT_CS_REG(R300_US_CODE_ADDR_2, 0x0);
/* XXX figure these ones out a bit better kthnx */
OUT_CS_REG(R300_US_CODE_ADDR_0, 0x0);
OUT_CS_REG(R300_US_CODE_ADDR_1, 0x0);
OUT_CS_REG(R300_US_CODE_ADDR_2, 0x0);
- OUT_CS_REG(R300_US_CODE_ADDR_3, R300_RGBA_OUT);
+ OUT_CS_REG(R300_US_CODE_ADDR_3,
0x40 |
R300_RGBA_OUT);
for (i = 0; i < fs->alu_instruction_count; i++) {
OUT_CS_REG(R300_US_ALU_RGB_INST_0 + (4 * i),
for (i = 0; i < fs->alu_instruction_count; i++) {
OUT_CS_REG(R300_US_ALU_RGB_INST_0 + (4 * i),
diff --git
a/src/gallium/drivers/r300/r300_state_shader.c
b/src/gallium/drivers/r300/r300_state_shader.c
index 7d81cb87a249e68bcddc54f3fe2cd75e6d28336f..ed9d26f0b9b152dd9f084d633f540e5e0ba4bc3a 100644
(file)
--- a/
src/gallium/drivers/r300/r300_state_shader.c
+++ b/
src/gallium/drivers/r300/r300_state_shader.c
@@
-278,22
+278,20
@@
static INLINE void r300_emit_maths(struct r300_fragment_shader* fs,
{
int i = fs->alu_instruction_count;
{
int i = fs->alu_instruction_count;
- fs->instructions[
0
].alu_rgb_inst = R300_RGB_SWIZA(R300_ALU_ARGC_SRC0C_XYZ) |
- R300_RGB_SWIZB(R300_ALU_ARGC_
ONE
) |
+ fs->instructions[
i
].alu_rgb_inst = R300_RGB_SWIZA(R300_ALU_ARGC_SRC0C_XYZ) |
+ R300_RGB_SWIZB(R300_ALU_ARGC_
SRC0C_XYZ
) |
R300_RGB_SWIZC(R300_ALU_ARGC_ZERO) |
R300_RGB_SWIZC(R300_ALU_ARGC_ZERO) |
-
R300_ALU_OUTC_MAD
;
- fs->instructions[
0
].alu_rgb_addr = R300_RGB_ADDR0(0) | R300_RGB_ADDR1(0) |
+
r300_rgb_op(op)
;
+ fs->instructions[
i
].alu_rgb_addr = R300_RGB_ADDR0(0) | R300_RGB_ADDR1(0) |
R300_RGB_ADDR2(0) | R300_ALU_DSTC_OUTPUT_XYZ;
R300_RGB_ADDR2(0) | R300_ALU_DSTC_OUTPUT_XYZ;
- fs->instructions[
0
].alu_alpha_inst = R300_ALPHA_SWIZA(R300_ALU_ARGA_SRC0A) |
- R300_ALPHA_SWIZB(R300_ALU_ARGA_
ONE
) |
+ fs->instructions[
i
].alu_alpha_inst = R300_ALPHA_SWIZA(R300_ALU_ARGA_SRC0A) |
+ R300_ALPHA_SWIZB(R300_ALU_ARGA_
SRC0A
) |
R300_ALPHA_SWIZC(R300_ALU_ARGA_ZERO) |
R300_ALPHA_SWIZC(R300_ALU_ARGA_ZERO) |
-
R300_ALU_OUTA_MAD
;
- fs->instructions[
0
].alu_alpha_addr = R300_ALPHA_ADDR0(0) |
+
r300_alpha_op(op)
;
+ fs->instructions[
i
].alu_alpha_addr = R300_ALPHA_ADDR0(0) |
R300_ALPHA_ADDR1(0) | R300_ALPHA_ADDR2(0) | R300_ALU_DSTA_OUTPUT;
fs->alu_instruction_count++;
R300_ALPHA_ADDR1(0) | R300_ALPHA_ADDR2(0) | R300_ALU_DSTA_OUTPUT;
fs->alu_instruction_count++;
- fs->indirections = 0;
- fs->shader.stack_size = 2;
}
/* Setup an ALU operation. */
}
/* Setup an ALU operation. */
@@
-554,11
+552,15
@@
static void r500_fs_instruction(struct r500_fragment_shader* fs,
}
}
}
}
-static void r
500_fs_finalize(struct r500
_fragment_shader* fs,
+static void r
300_fs_finalize(struct r3xx
_fragment_shader* fs,
struct r300_fs_asm* assembler)
{
struct r300_fs_asm* assembler)
{
- fs->shader.stack_size = assembler->temp_count + assembler->temp_offset;
+ fs->stack_size = assembler->temp_count + assembler->temp_offset;
+}
+static void r500_fs_finalize(struct r500_fragment_shader* fs,
+ struct r300_fs_asm* assembler)
+{
/* XXX should this just go with OPCODE_END? */
fs->instructions[fs->instruction_count - 1].inst0 |=
R500_INST_LAST;
/* XXX should this just go with OPCODE_END? */
fs->instructions[fs->instruction_count - 1].inst0 |=
R500_INST_LAST;
@@
-627,10
+629,16
@@
void r300_translate_fragment_shader(struct r300_context* r300,
debug_printf("r300: %d total constants, "
"%d from user and %d from immediates\n", consts->count,
consts->user_count, assembler->imm_count);
debug_printf("r300: %d total constants, "
"%d from user and %d from immediates\n", consts->count,
consts->user_count, assembler->imm_count);
- //r500_fs_finalize(fs, assembler);
+ r300_fs_finalize(fs, assembler);
+ if (is_r500) {
+ r500_fs_finalize((struct r500_fragment_shader*)fs, assembler);
+ }
tgsi_dump(fs->state.tokens);
tgsi_dump(fs->state.tokens);
- //r500_fs_dump(fs);
+ /* XXX finish r300 dumper too */
+ if (is_r500) {
+ r500_fs_dump((struct r500_fragment_shader*)fs);
+ }
tgsi_parse_free(&parser);
FREE(assembler);
tgsi_parse_free(&parser);
FREE(assembler);
diff --git
a/src/gallium/drivers/r300/r300_state_shader.h
b/src/gallium/drivers/r300/r300_state_shader.h
index fdba207e183f686721d1a6c6195afdb449729504..e83d007ba202a82a2d7449b10a9492e0a4e7b2d5 100644
(file)
--- a/
src/gallium/drivers/r300/r300_state_shader.h
+++ b/
src/gallium/drivers/r300/r300_state_shader.h
@@
-115,8
+115,8
@@
static const struct r300_fragment_shader r300_passthrough_fragment_shader = {
*/
.alu_instruction_count = 1,
.tex_instruction_count = 0,
*/
.alu_instruction_count = 1,
.tex_instruction_count = 0,
- .indirections =
1
,
- .shader.stack_size =
2
,
+ .indirections =
0
,
+ .shader.stack_size =
1
,
.instructions[0].alu_rgb_inst = R300_RGB_SWIZA(R300_ALU_ARGC_SRC0C_XYZ) |
R300_RGB_SWIZB(R300_ALU_ARGC_ONE) |
.instructions[0].alu_rgb_inst = R300_RGB_SWIZA(R300_ALU_ARGC_SRC0C_XYZ) |
R300_RGB_SWIZB(R300_ALU_ARGC_ONE) |