r300: Cleaned up vertprog construction.
Construct the vertprog instruction in the 4 DWORD parts... DWORD 0: Opcode and Output. DWORD 1: First Argument. DWORD 2: Second Argument. DWORD 3: Third Argument. Allow the opcode translation functions to generate more than one instruction; useful for when an instruction must be emulated. FLR, XPD, etc.
This commit is contained in:
@@ -568,7 +568,7 @@ struct r300_vertex_shader_fragment {
|
||||
union {
|
||||
GLuint d[VSF_MAX_FRAGMENT_LENGTH];
|
||||
float f[VSF_MAX_FRAGMENT_LENGTH];
|
||||
struct r300_vertprog_instruction i[VSF_MAX_FRAGMENT_LENGTH / 4];
|
||||
GLuint i[VSF_MAX_FRAGMENT_LENGTH];
|
||||
} body;
|
||||
};
|
||||
|
||||
|
||||
@@ -1566,30 +1566,31 @@ static void r300SetupDefaultVertexProgram(r300ContextPtr rmesa)
|
||||
|
||||
for (i = VERT_ATTRIB_POS; i < VERT_ATTRIB_MAX; i++) {
|
||||
if (rmesa->state.sw_tcl_inputs[i] != -1) {
|
||||
prog->program.body.i[program_end].opcode = EASY_VSF_OP(MUL, o_reg++, ALL, RESULT);
|
||||
prog->program.body.i[program_end].src[0] = VSF_REG(rmesa->state.sw_tcl_inputs[i]);
|
||||
prog->program.body.i[program_end].src[1] = VSF_ATTR_UNITY(rmesa->state.sw_tcl_inputs[i]);
|
||||
prog->program.body.i[program_end].src[2] = VSF_UNITY(rmesa->state.sw_tcl_inputs[i]);
|
||||
program_end++;
|
||||
prog->program.body.i[program_end + 0] = EASY_VSF_OP(MUL, o_reg++, ALL, RESULT);
|
||||
prog->program.body.i[program_end + 1] = VSF_REG(rmesa->state.sw_tcl_inputs[i]);
|
||||
prog->program.body.i[program_end + 2] = VSF_ATTR_UNITY(rmesa->state.sw_tcl_inputs[i]);
|
||||
prog->program.body.i[program_end + 3] = VSF_UNITY(rmesa->state.sw_tcl_inputs[i]);
|
||||
program_end += 4;
|
||||
}
|
||||
}
|
||||
|
||||
prog->program.length = program_end * 4;
|
||||
prog->program.length = program_end;
|
||||
|
||||
r300SetupVertexProgramFragment(rmesa, R300_PVS_UPLOAD_PROGRAM, &(prog->program));
|
||||
r300SetupVertexProgramFragment(rmesa, R300_PVS_UPLOAD_PROGRAM,
|
||||
&(prog->program));
|
||||
inst_count = (prog->program.length / 4) - 1;
|
||||
|
||||
R300_STATECHANGE(rmesa, pvs);
|
||||
rmesa->hw.pvs.cmd[R300_PVS_CNTL_1] =
|
||||
(0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_1_POS_END_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_1_PROGRAM_END_SHIFT);
|
||||
(0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_1_POS_END_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_1_PROGRAM_END_SHIFT);
|
||||
rmesa->hw.pvs.cmd[R300_PVS_CNTL_2] =
|
||||
(0 << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT) |
|
||||
(param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT);
|
||||
(0 << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT) |
|
||||
(param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT);
|
||||
rmesa->hw.pvs.cmd[R300_PVS_CNTL_3] =
|
||||
(inst_count << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_3_PROGRAM_UNKNOWN2_SHIFT);
|
||||
(inst_count << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT) |
|
||||
(inst_count << R300_PVS_CNTL_3_PROGRAM_UNKNOWN2_SHIFT);
|
||||
}
|
||||
|
||||
static void r300SetupRealVertexProgram(r300ContextPtr rmesa)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,11 +3,6 @@
|
||||
|
||||
#include "r300_reg.h"
|
||||
|
||||
struct r300_vertprog_instruction {
|
||||
GLuint opcode;
|
||||
GLuint src[3];
|
||||
};
|
||||
|
||||
#define VSF_FLAG_X 1
|
||||
#define VSF_FLAG_Y 2
|
||||
#define VSF_FLAG_Z 4
|
||||
|
||||
Reference in New Issue
Block a user