VSF_PARAM(3),
VSF_ATTR_W(0),
EASY_VSF_SOURCE(0, W, W, W, W, NONE, NONE),
-
+
EASY_VSF_OP(MUL, 1, ALL, RESULT),
VSF_REG(1),
VSF_ATTR_UNITY(1),
VSF_UNITY(1),
-
+
EASY_VSF_OP(MAD, 0, ALL, TMP),
VSF_PARAM(2),
VSF_ATTR_Z(0),
VSF_TMP(0),
-
+
EASY_VSF_OP(MAD, 0, ALL, TMP),
VSF_PARAM(1),
VSF_ATTR_Y(0),
VSF_TMP(0),
-
+
EASY_VSF_OP(MAD, 0, ALL, RESULT),
VSF_PARAM(0),
VSF_ATTR_X(0),
VSF_TMP(0),
} }
},
-
+
matrix:{
{
length: 16,
length: 0,
}
},
-
+
vector: {
{
length: 0,
length: 0,
}
},
-
+
unknown1: {
length: 0
},
-
+
unknown2: {
length: 0
- },
-
+ },
+
program_start: 0,
unknown_ptr1: 4,
program_end: 4,
-
+
param_offset: 0,
param_count: 4,
-
+
unknown_ptr2: 0,
unknown_ptr3: 4
};
length: 0
},
alu: {
- length: 2,
- inst: {
- {0x50a80, 0x1c020800, 0x40889, 0x1020800},
- {0x50a80, 0x1c020800, 0x40889, 0x1020800}
+ length: 1,
+ /* My understanding is that we need at least 1 instructions for pixel shader,
+ in particular because alu_end==0 means there is one instruction */
+ inst: {
+ PFS_NOP
}
},
node: {
active_nodes: 1,
first_node_has_tex: 0,
temp_register_count: 0,
-
+
tex_offset: 0,
tex_end: 0,
alu_offset: 0,
alu_end: 0
},
-
+
param_length: 0
};
-
+
/******** Single texture pipeline ***********/
static struct r300_vertex_shader_state SINGLE_TEXTURE_VERTEX_SHADER={
program: {
length: 24,
-
+
body: { d: {
EASY_VSF_OP(MUL, 0, ALL, TMP),
VSF_PARAM(3),
VSF_ATTR_W(0),
EASY_VSF_SOURCE(0, W, W, W, W, NONE, NONE),
-
+
EASY_VSF_OP(MUL, 2, ALL, RESULT),
VSF_REG(2),
VSF_ATTR_UNITY(2),
VSF_UNITY(2),
-
+
EASY_VSF_OP(MAD, 0, ALL, TMP),
VSF_PARAM(2),
VSF_ATTR_Z(0),
VSF_TMP(0),
-
+
EASY_VSF_OP(MUL, 1, ALL, RESULT),
VSF_REG(1),
VSF_ATTR_UNITY(1),
VSF_UNITY(1),
-
+
EASY_VSF_OP(MAD, 0, ALL, TMP),
VSF_PARAM(1),
VSF_ATTR_Y(0),
VSF_TMP(0),
-
+
EASY_VSF_OP(MAD, 0, ALL, RESULT),
VSF_PARAM(0),
VSF_ATTR_X(0),
VSF_TMP(0),
} }
},
-
+
matrix:{
{
length: 16,
length: 0,
}
},
-
+
vector: {
{
length: 0,
length: 0,
}
},
-
+
unknown1: {
length: 0
},
-
+
unknown2: {
length: 4,
body: { f: {
1.0,
0.0
} }
- },
-
+ },
+
program_start: 0,
unknown_ptr1: 5,
program_end: 5,
-
+
param_offset: 0,
param_count: 4,
-
+
unknown_ptr2: 0,
unknown_ptr3: 5
};
-
+
static struct r300_pixel_shader_state SINGLE_TEXTURE_PIXEL_SHADER={
program: {
tex: {
inst: { 0x00018000 }
},
alu: {
- length: 3,
- inst: {
- {0x50a80, 0x1c020800, 0x40889, 0x1020800},
- {0x50200, 0x1c020040, 0x40889, 0x1020801},
- {0x50a80, 0x1c020800, 0x40889, 0x1020800}
+ length: 2,
+ inst:
+ {
+/* I get misc problems without this after doing cold-reboot.
+ This would imply that alu programming is buggy. --aet */
+#if 1
+ PFS_NOP,
+#endif
+
+ /* What are 0's ORed with flags ? They are register numbers that
+ just happen to be 0 */
+ {
+ EASY_PFS_INSTR0(MAD, SRC0C_XYZ, SRC1C_XYZ, ZERO),
+ EASY_PFS_INSTR1(0, 0, 1, 0 | PFS_FLAG_CONST, NONE, ALL),
+
+#if 0
+ /* no alpha in textures */
+ EASY_PFS_INSTR2(MAD, SRC0A, ONE, ZERO),
+ EASY_PFS_INSTR3(0, 1, 0 | PFS_FLAG_CONST, 0 | PFS_FLAG_CONST, OUTPUT)
+#endif
+
+ /* alpha in textures */
+ EASY_PFS_INSTR2(MAD, SRC0A, SRC1A, ZERO),
+ EASY_PFS_INSTR3(0, 0, 1, 0 | PFS_FLAG_CONST, OUTPUT)
+ }
}
},
node: {
active_nodes: 1,
first_node_has_tex: 1,
temp_register_count: 1,
-
+
tex_offset: 0,
tex_end: 0,
- alu_offset: 1,
+ alu_offset: 0,
alu_end: 0
},
-
+
param_length: 8,
param: {
{ 0.0, 0.0, 0.0, 0.0},