wined3d: Merge pshader_hw_map2gl() and vshader_hw_map2gl().

This isn't the prettiest way to merge those functions, but it's a start.
This commit is contained in:
Henri Verbeet 2008-09-22 14:52:57 +02:00 committed by Alexandre Julliard
parent 9d192c6251
commit ca28930113
4 changed files with 150 additions and 155 deletions

View File

@ -1083,71 +1083,119 @@ void pshader_hw_dp2add(SHADER_OPCODE_ARG* arg) {
} }
/* Map the opcode 1-to-1 to the GL code */ /* Map the opcode 1-to-1 to the GL code */
void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) { void shader_hw_map2gl(SHADER_OPCODE_ARG* arg)
{
IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl*)arg->shader;
CONST SHADER_OPCODE* curOpcode = arg->opcode;
SHADER_BUFFER* buffer = arg->buffer;
DWORD dst = arg->dst;
DWORD* src = arg->src;
CONST SHADER_OPCODE* curOpcode = arg->opcode; char tmpLine[256];
SHADER_BUFFER* buffer = arg->buffer; unsigned int i;
DWORD dst = arg->dst;
DWORD* src = arg->src;
unsigned int i; if (shader_is_pshader_version(shader->baseShader.hex_version))
char tmpLine[256]; {
BOOL saturate = FALSE;
BOOL centroid = FALSE;
BOOL partialprecision = FALSE;
DWORD shift;
/* Output token related */ strcpy(tmpLine, curOpcode->glname);
char output_rname[256];
char output_wmask[20];
BOOL saturate = FALSE;
BOOL centroid = FALSE;
BOOL partialprecision = FALSE;
DWORD shift;
strcpy(tmpLine, curOpcode->glname); /* Process modifiers */
if (dst & WINED3DSP_DSTMOD_MASK)
{
DWORD mask = dst & WINED3DSP_DSTMOD_MASK;
/* Process modifiers */ saturate = mask & WINED3DSPDM_SATURATE;
if (0 != (dst & WINED3DSP_DSTMOD_MASK)) { centroid = mask & WINED3DSPDM_MSAMPCENTROID;
DWORD mask = dst & WINED3DSP_DSTMOD_MASK; partialprecision = mask & WINED3DSPDM_PARTIALPRECISION;
mask &= ~(WINED3DSPDM_MSAMPCENTROID | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_SATURATE);
if (mask)
FIXME("Unrecognized modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT);
saturate = mask & WINED3DSPDM_SATURATE; if (centroid)
centroid = mask & WINED3DSPDM_MSAMPCENTROID; FIXME("Unhandled modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT);
partialprecision = mask & WINED3DSPDM_PARTIALPRECISION; }
mask &= ~(WINED3DSPDM_MSAMPCENTROID | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_SATURATE); shift = (dst & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
if (mask)
FIXME("Unrecognized modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT);
if (centroid) /* Generate input and output registers */
FIXME("Unhandled modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT); if (curOpcode->num_params > 0)
} {
shift = (dst & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; /* Output token related */
char output_rname[256];
char output_wmask[20];
char operands[4][100];
/* Generate input and output registers */ /* Generate input register names (with modifiers) */
if (curOpcode->num_params > 0) { for (i = 1; i < curOpcode->num_params; ++i)
char operands[4][100]; pshader_gen_input_modifier_line(arg->shader, buffer, src[i-1], i-1, operands[i]);
/* Generate input register names (with modifiers) */ /* Handle output register */
for (i = 1; i < curOpcode->num_params; ++i) pshader_get_register_name(arg->shader, dst, output_rname);
pshader_gen_input_modifier_line(arg->shader, buffer, src[i-1], i-1, operands[i]); strcpy(operands[0], output_rname);
shader_arb_get_write_mask(arg, dst, output_wmask);
strcat(operands[0], output_wmask);
/* Handle output register */ if (saturate && (shift == 0))
pshader_get_register_name(arg->shader, dst, output_rname); strcat(tmpLine, "_SAT");
strcpy(operands[0], output_rname); strcat(tmpLine, " ");
shader_arb_get_write_mask(arg, dst, output_wmask); strcat(tmpLine, operands[0]);
strcat(operands[0], output_wmask); for (i = 1; i < curOpcode->num_params; i++)
{
strcat(tmpLine, ", ");
strcat(tmpLine, operands[i]);
}
strcat(tmpLine,";\n");
shader_addline(buffer, tmpLine);
if (saturate && (shift == 0)) /* A shift requires another line. */
strcat(tmpLine, "_SAT"); if (shift != 0)
strcat(tmpLine, " "); pshader_gen_output_modifier_line(buffer, saturate, output_wmask, shift, output_rname);
strcat(tmpLine, operands[0]); }
for (i = 1; i < curOpcode->num_params; i++) { } else {
strcat(tmpLine, ", "); if ((curOpcode->opcode == WINED3DSIO_MOV && shader_get_regtype(dst) == WINED3DSPR_ADDR)
strcat(tmpLine, operands[i]); || curOpcode->opcode == WINED3DSIO_MOVA) {
} memset(tmpLine, 0, sizeof(tmpLine));
strcat(tmpLine,";\n"); if (((IWineD3DVertexShaderImpl *)shader)->rel_offset)
shader_addline(buffer, tmpLine); {
vshader_program_add_param(arg, src[0], TRUE, tmpLine);
shader_addline(buffer, "ADD TMP.x, %s, helper_const.z;\n", tmpLine);
shader_addline(buffer, "ARL A0.x, TMP.x;\n");
} else {
/* Apple's ARB_vertex_program implementation does not accept an ARL source argument
* with more than one component. Thus replicate the first source argument over all
* 4 components. For example, .xyzw -> .x (or better: .xxxx), .zwxy -> .z, etc)
*/
DWORD parm = src[0] & ~(WINED3DVS_SWIZZLE_MASK);
if((src[0] & WINED3DVS_X_W) == WINED3DVS_X_W) {
parm |= WINED3DVS_X_W | WINED3DVS_Y_W | WINED3DVS_Z_W | WINED3DVS_W_W;
} else if((src[0] & WINED3DVS_X_Z) == WINED3DVS_X_Z) {
parm |= WINED3DVS_X_Z | WINED3DVS_Y_Z | WINED3DVS_Z_Z | WINED3DVS_W_Z;
} else if((src[0] & WINED3DVS_X_Y) == WINED3DVS_X_Y) {
parm |= WINED3DVS_X_Y | WINED3DVS_Y_Y | WINED3DVS_Z_Y | WINED3DVS_W_Y;
} else if((src[0] & WINED3DVS_X_X) == WINED3DVS_X_X) {
parm |= WINED3DVS_X_X | WINED3DVS_Y_X | WINED3DVS_Z_X | WINED3DVS_W_X;
}
vshader_program_add_param(arg, parm, TRUE, tmpLine);
shader_addline(buffer, "ARL A0.x, %s;\n", tmpLine);
}
return;
} else
strcpy(tmpLine, curOpcode->glname);
/* A shift requires another line. */ if (curOpcode->num_params > 0)
if (shift != 0) {
pshader_gen_output_modifier_line(buffer, saturate, output_wmask, shift, output_rname); vshader_program_add_param(arg, dst, FALSE, tmpLine);
} for (i = 1; i < curOpcode->num_params; ++i)
{
strcat(tmpLine, ",");
vshader_program_add_param(arg, src[i-1], TRUE, tmpLine);
}
}
shader_addline(buffer, "%s;\n", tmpLine);
}
} }
void pshader_hw_texkill(SHADER_OPCODE_ARG* arg) { void pshader_hw_texkill(SHADER_OPCODE_ARG* arg) {
@ -1660,7 +1708,7 @@ void shader_hw_mnxn(SHADER_OPCODE_ARG* arg) {
for (i = 0; i < nComponents; i++) { for (i = 0; i < nComponents; i++) {
tmpArg.dst = ((arg->dst) & ~WINED3DSP_WRITEMASK_ALL)|(WINED3DSP_WRITEMASK_0<<i); tmpArg.dst = ((arg->dst) & ~WINED3DSP_WRITEMASK_ALL)|(WINED3DSP_WRITEMASK_0<<i);
tmpArg.src[1] = arg->src[1]+i; tmpArg.src[1] = arg->src[1]+i;
vshader_hw_map2gl(&tmpArg); shader_hw_map2gl(&tmpArg);
} }
} }
@ -1733,58 +1781,6 @@ void shader_hw_sincos(SHADER_OPCODE_ARG* arg) {
} }
/* TODO: merge with pixel shader */
/* Map the opcode 1-to-1 to the GL code */
void vshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl*) arg->shader;
CONST SHADER_OPCODE* curOpcode = arg->opcode;
SHADER_BUFFER* buffer = arg->buffer;
DWORD dst = arg->dst;
DWORD* src = arg->src;
DWORD dst_regtype = shader_get_regtype(dst);
char tmpLine[256];
unsigned int i;
if ((curOpcode->opcode == WINED3DSIO_MOV && dst_regtype == WINED3DSPR_ADDR) || curOpcode->opcode == WINED3DSIO_MOVA) {
memset(tmpLine, 0, sizeof(tmpLine));
if(shader->rel_offset) {
vshader_program_add_param(arg, src[0], TRUE, tmpLine);
shader_addline(buffer, "ADD TMP.x, %s, helper_const.z;\n", tmpLine);
shader_addline(buffer, "ARL A0.x, TMP.x;\n");
} else {
/* Apple's ARB_vertex_program implementation does not accept an ARL source argument
* with more than one component. Thus replicate the first source argument over all
* 4 components. For example, .xyzw -> .x (or better: .xxxx), .zwxy -> .z, etc)
*/
DWORD parm = src[0] & ~(WINED3DVS_SWIZZLE_MASK);
if((src[0] & WINED3DVS_X_W) == WINED3DVS_X_W) {
parm |= WINED3DVS_X_W | WINED3DVS_Y_W | WINED3DVS_Z_W | WINED3DVS_W_W;
} else if((src[0] & WINED3DVS_X_Z) == WINED3DVS_X_Z) {
parm |= WINED3DVS_X_Z | WINED3DVS_Y_Z | WINED3DVS_Z_Z | WINED3DVS_W_Z;
} else if((src[0] & WINED3DVS_X_Y) == WINED3DVS_X_Y) {
parm |= WINED3DVS_X_Y | WINED3DVS_Y_Y | WINED3DVS_Z_Y | WINED3DVS_W_Y;
} else if((src[0] & WINED3DVS_X_X) == WINED3DVS_X_X) {
parm |= WINED3DVS_X_X | WINED3DVS_Y_X | WINED3DVS_Z_X | WINED3DVS_W_X;
}
vshader_program_add_param(arg, parm, TRUE, tmpLine);
shader_addline(buffer, "ARL A0.x, %s;\n", tmpLine);
}
return;
} else
strcpy(tmpLine, curOpcode->glname);
if (curOpcode->num_params > 0) {
vshader_program_add_param(arg, dst, FALSE, tmpLine);
for (i = 1; i < curOpcode->num_params; ++i) {
strcat(tmpLine, ",");
vshader_program_add_param(arg, src[i-1], TRUE, tmpLine);
}
}
shader_addline(buffer, "%s;\n", tmpLine);
}
static GLuint create_arb_blt_vertex_program(WineD3D_GL_Info *gl_info) { static GLuint create_arb_blt_vertex_program(WineD3D_GL_Info *gl_info) {
GLuint program_id = 0; GLuint program_id = 0;
const char *blt_vprogram = const char *blt_vprogram =

View File

@ -99,32 +99,32 @@ static HRESULT WINAPI IWineD3DPixelShaderImpl_GetFunction(IWineD3DPixelShader*
CONST SHADER_OPCODE IWineD3DPixelShaderImpl_shader_ins[] = { CONST SHADER_OPCODE IWineD3DPixelShaderImpl_shader_ins[] = {
/* Arithmetic */ /* Arithmetic */
{WINED3DSIO_NOP, "nop", "NOP", 0, 0, pshader_hw_map2gl, NULL, 0, 0}, {WINED3DSIO_NOP, "nop", "NOP", 0, 0, shader_hw_map2gl, NULL, 0, 0},
{WINED3DSIO_MOV, "mov", "MOV", 1, 2, pshader_hw_map2gl, shader_glsl_mov, 0, 0}, {WINED3DSIO_MOV, "mov", "MOV", 1, 2, shader_hw_map2gl, shader_glsl_mov, 0, 0},
{WINED3DSIO_ADD, "add", "ADD", 1, 3, pshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_ADD, "add", "ADD", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_SUB, "sub", "SUB", 1, 3, pshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_SUB, "sub", "SUB", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_MAD, "mad", "MAD", 1, 4, pshader_hw_map2gl, shader_glsl_mad, 0, 0}, {WINED3DSIO_MAD, "mad", "MAD", 1, 4, shader_hw_map2gl, shader_glsl_mad, 0, 0},
{WINED3DSIO_MUL, "mul", "MUL", 1, 3, pshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_MUL, "mul", "MUL", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_RCP, "rcp", "RCP", 1, 2, pshader_hw_map2gl, shader_glsl_rcp, 0, 0}, {WINED3DSIO_RCP, "rcp", "RCP", 1, 2, shader_hw_map2gl, shader_glsl_rcp, 0, 0},
{WINED3DSIO_RSQ, "rsq", "RSQ", 1, 2, pshader_hw_map2gl, shader_glsl_rsq, 0, 0}, {WINED3DSIO_RSQ, "rsq", "RSQ", 1, 2, shader_hw_map2gl, shader_glsl_rsq, 0, 0},
{WINED3DSIO_DP3, "dp3", "DP3", 1, 3, pshader_hw_map2gl, shader_glsl_dot, 0, 0}, {WINED3DSIO_DP3, "dp3", "DP3", 1, 3, shader_hw_map2gl, shader_glsl_dot, 0, 0},
{WINED3DSIO_DP4, "dp4", "DP4", 1, 3, pshader_hw_map2gl, shader_glsl_dot, 0, 0}, {WINED3DSIO_DP4, "dp4", "DP4", 1, 3, shader_hw_map2gl, shader_glsl_dot, 0, 0},
{WINED3DSIO_MIN, "min", "MIN", 1, 3, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_MIN, "min", "MIN", 1, 3, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_MAX, "max", "MAX", 1, 3, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_MAX, "max", "MAX", 1, 3, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_SLT, "slt", "SLT", 1, 3, pshader_hw_map2gl, shader_glsl_compare, 0, 0}, {WINED3DSIO_SLT, "slt", "SLT", 1, 3, shader_hw_map2gl, shader_glsl_compare, 0, 0},
{WINED3DSIO_SGE, "sge", "SGE", 1, 3, pshader_hw_map2gl, shader_glsl_compare, 0, 0}, {WINED3DSIO_SGE, "sge", "SGE", 1, 3, shader_hw_map2gl, shader_glsl_compare, 0, 0},
{WINED3DSIO_ABS, "abs", "ABS", 1, 2, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_ABS, "abs", "ABS", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_EXP, "exp", "EX2", 1, 2, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_EXP, "exp", "EX2", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_LOG, "log", "LG2", 1, 2, pshader_hw_map2gl, shader_glsl_log, 0, 0}, {WINED3DSIO_LOG, "log", "LG2", 1, 2, shader_hw_map2gl, shader_glsl_log, 0, 0},
{WINED3DSIO_EXPP, "expp", "EXP", 1, 2, pshader_hw_map2gl, shader_glsl_expp, 0, 0}, {WINED3DSIO_EXPP, "expp", "EXP", 1, 2, shader_hw_map2gl, shader_glsl_expp, 0, 0},
{WINED3DSIO_LOGP, "logp", "LOG", 1, 2, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_LOGP, "logp", "LOG", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_DST, "dst", "DST", 1, 3, pshader_hw_map2gl, shader_glsl_dst, 0, 0}, {WINED3DSIO_DST, "dst", "DST", 1, 3, shader_hw_map2gl, shader_glsl_dst, 0, 0},
{WINED3DSIO_LRP, "lrp", "LRP", 1, 4, pshader_hw_map2gl, shader_glsl_lrp, 0, 0}, {WINED3DSIO_LRP, "lrp", "LRP", 1, 4, shader_hw_map2gl, shader_glsl_lrp, 0, 0},
{WINED3DSIO_FRC, "frc", "FRC", 1, 2, pshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_FRC, "frc", "FRC", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_CND, "cnd", NULL, 1, 4, pshader_hw_cnd, shader_glsl_cnd, WINED3DPS_VERSION(1,0), WINED3DPS_VERSION(1,4)}, {WINED3DSIO_CND, "cnd", NULL, 1, 4, pshader_hw_cnd, shader_glsl_cnd, WINED3DPS_VERSION(1,0), WINED3DPS_VERSION(1,4)},
{WINED3DSIO_CMP, "cmp", NULL, 1, 4, pshader_hw_cmp, shader_glsl_cmp, WINED3DPS_VERSION(1,2), WINED3DPS_VERSION(3,0)}, {WINED3DSIO_CMP, "cmp", NULL, 1, 4, pshader_hw_cmp, shader_glsl_cmp, WINED3DPS_VERSION(1,2), WINED3DPS_VERSION(3,0)},
{WINED3DSIO_POW, "pow", "POW", 1, 3, pshader_hw_map2gl, shader_glsl_pow, 0, 0}, {WINED3DSIO_POW, "pow", "POW", 1, 3, shader_hw_map2gl, shader_glsl_pow, 0, 0},
{WINED3DSIO_CRS, "crs", "XPD", 1, 3, pshader_hw_map2gl, shader_glsl_cross, 0, 0}, {WINED3DSIO_CRS, "crs", "XPD", 1, 3, shader_hw_map2gl, shader_glsl_cross, 0, 0},
{WINED3DSIO_NRM, "nrm", NULL, 1, 2, shader_hw_nrm, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_NRM, "nrm", NULL, 1, 2, shader_hw_nrm, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_SINCOS, "sincos", NULL, 1, 4, shader_hw_sincos, shader_glsl_sincos, WINED3DPS_VERSION(2,0), WINED3DPS_VERSION(2,1)}, {WINED3DSIO_SINCOS, "sincos", NULL, 1, 4, shader_hw_sincos, shader_glsl_sincos, WINED3DPS_VERSION(2,0), WINED3DPS_VERSION(2,1)},
{WINED3DSIO_SINCOS, "sincos", "SCS", 1, 2, shader_hw_sincos, shader_glsl_sincos, WINED3DPS_VERSION(3,0), -1}, {WINED3DSIO_SINCOS, "sincos", "SCS", 1, 2, shader_hw_sincos, shader_glsl_sincos, WINED3DPS_VERSION(3,0), -1},

View File

@ -43,32 +43,32 @@ CONST SHADER_OPCODE IWineD3DVertexShaderImpl_shader_ins[] = {
/* This table is not order or position dependent. */ /* This table is not order or position dependent. */
/* Arithmetic */ /* Arithmetic */
{WINED3DSIO_NOP, "nop", "NOP", 0, 0, vshader_hw_map2gl, NULL, 0, 0}, {WINED3DSIO_NOP, "nop", "NOP", 0, 0, shader_hw_map2gl, NULL, 0, 0},
{WINED3DSIO_MOV, "mov", "MOV", 1, 2, vshader_hw_map2gl, shader_glsl_mov, 0, 0}, {WINED3DSIO_MOV, "mov", "MOV", 1, 2, shader_hw_map2gl, shader_glsl_mov, 0, 0},
{WINED3DSIO_MOVA, "mova", NULL, 1, 2, vshader_hw_map2gl, shader_glsl_mov, WINED3DVS_VERSION(2,0), -1}, {WINED3DSIO_MOVA, "mova", NULL, 1, 2, shader_hw_map2gl, shader_glsl_mov, WINED3DVS_VERSION(2,0), -1},
{WINED3DSIO_ADD, "add", "ADD", 1, 3, vshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_ADD, "add", "ADD", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_SUB, "sub", "SUB", 1, 3, vshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_SUB, "sub", "SUB", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_MAD, "mad", "MAD", 1, 4, vshader_hw_map2gl, shader_glsl_mad, 0, 0}, {WINED3DSIO_MAD, "mad", "MAD", 1, 4, shader_hw_map2gl, shader_glsl_mad, 0, 0},
{WINED3DSIO_MUL, "mul", "MUL", 1, 3, vshader_hw_map2gl, shader_glsl_arith, 0, 0}, {WINED3DSIO_MUL, "mul", "MUL", 1, 3, shader_hw_map2gl, shader_glsl_arith, 0, 0},
{WINED3DSIO_RCP, "rcp", "RCP", 1, 2, vshader_hw_rsq_rcp, shader_glsl_rcp, 0, 0}, {WINED3DSIO_RCP, "rcp", "RCP", 1, 2, vshader_hw_rsq_rcp, shader_glsl_rcp, 0, 0},
{WINED3DSIO_RSQ, "rsq", "RSQ", 1, 2, vshader_hw_rsq_rcp, shader_glsl_rsq, 0, 0}, {WINED3DSIO_RSQ, "rsq", "RSQ", 1, 2, vshader_hw_rsq_rcp, shader_glsl_rsq, 0, 0},
{WINED3DSIO_DP3, "dp3", "DP3", 1, 3, vshader_hw_map2gl, shader_glsl_dot, 0, 0}, {WINED3DSIO_DP3, "dp3", "DP3", 1, 3, shader_hw_map2gl, shader_glsl_dot, 0, 0},
{WINED3DSIO_DP4, "dp4", "DP4", 1, 3, vshader_hw_map2gl, shader_glsl_dot, 0, 0}, {WINED3DSIO_DP4, "dp4", "DP4", 1, 3, shader_hw_map2gl, shader_glsl_dot, 0, 0},
{WINED3DSIO_MIN, "min", "MIN", 1, 3, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_MIN, "min", "MIN", 1, 3, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_MAX, "max", "MAX", 1, 3, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_MAX, "max", "MAX", 1, 3, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_SLT, "slt", "SLT", 1, 3, vshader_hw_map2gl, shader_glsl_compare, 0, 0}, {WINED3DSIO_SLT, "slt", "SLT", 1, 3, shader_hw_map2gl, shader_glsl_compare, 0, 0},
{WINED3DSIO_SGE, "sge", "SGE", 1, 3, vshader_hw_map2gl, shader_glsl_compare, 0, 0}, {WINED3DSIO_SGE, "sge", "SGE", 1, 3, shader_hw_map2gl, shader_glsl_compare, 0, 0},
{WINED3DSIO_ABS, "abs", "ABS", 1, 2, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_ABS, "abs", "ABS", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_EXP, "exp", "EX2", 1, 2, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_EXP, "exp", "EX2", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_LOG, "log", "LG2", 1, 2, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_LOG, "log", "LG2", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_EXPP, "expp", "EXP", 1, 2, vshader_hw_map2gl, shader_glsl_expp, 0, 0}, {WINED3DSIO_EXPP, "expp", "EXP", 1, 2, shader_hw_map2gl, shader_glsl_expp, 0, 0},
{WINED3DSIO_LOGP, "logp", "LOG", 1, 2, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_LOGP, "logp", "LOG", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_LIT, "lit", "LIT", 1, 2, vshader_hw_map2gl, shader_glsl_lit, 0, 0}, {WINED3DSIO_LIT, "lit", "LIT", 1, 2, shader_hw_map2gl, shader_glsl_lit, 0, 0},
{WINED3DSIO_DST, "dst", "DST", 1, 3, vshader_hw_map2gl, shader_glsl_dst, 0, 0}, {WINED3DSIO_DST, "dst", "DST", 1, 3, shader_hw_map2gl, shader_glsl_dst, 0, 0},
{WINED3DSIO_LRP, "lrp", "LRP", 1, 4, NULL, shader_glsl_lrp, 0, 0}, {WINED3DSIO_LRP, "lrp", "LRP", 1, 4, NULL, shader_glsl_lrp, 0, 0},
{WINED3DSIO_FRC, "frc", "FRC", 1, 2, vshader_hw_map2gl, shader_glsl_map2gl, 0, 0}, {WINED3DSIO_FRC, "frc", "FRC", 1, 2, shader_hw_map2gl, shader_glsl_map2gl, 0, 0},
{WINED3DSIO_POW, "pow", "POW", 1, 3, vshader_hw_map2gl, shader_glsl_pow, 0, 0}, {WINED3DSIO_POW, "pow", "POW", 1, 3, shader_hw_map2gl, shader_glsl_pow, 0, 0},
{WINED3DSIO_CRS, "crs", "XPD", 1, 3, vshader_hw_map2gl, shader_glsl_cross, 0, 0}, {WINED3DSIO_CRS, "crs", "XPD", 1, 3, shader_hw_map2gl, shader_glsl_cross, 0, 0},
/* TODO: sng can possibly be performed a s /* TODO: sng can possibly be performed a s
RCP tmp, vec RCP tmp, vec
MUL out, tmp, vec*/ MUL out, tmp, vec*/

View File

@ -2030,7 +2030,6 @@ extern void shader_hw_def(SHADER_OPCODE_ARG *arg);
extern void pshader_hw_bem(SHADER_OPCODE_ARG* arg); extern void pshader_hw_bem(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_cnd(SHADER_OPCODE_ARG* arg); extern void pshader_hw_cnd(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_cmp(SHADER_OPCODE_ARG* arg); extern void pshader_hw_cmp(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_tex(SHADER_OPCODE_ARG* arg); extern void pshader_hw_tex(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_texcoord(SHADER_OPCODE_ARG* arg); extern void pshader_hw_texcoord(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_texreg2ar(SHADER_OPCODE_ARG* arg); extern void pshader_hw_texreg2ar(SHADER_OPCODE_ARG* arg);
@ -2052,12 +2051,12 @@ extern void pshader_hw_dp2add(SHADER_OPCODE_ARG* arg);
extern void pshader_hw_texreg2rgb(SHADER_OPCODE_ARG* arg); extern void pshader_hw_texreg2rgb(SHADER_OPCODE_ARG* arg);
/* ARB vertex / pixel shader common prototypes */ /* ARB vertex / pixel shader common prototypes */
extern void shader_hw_map2gl(SHADER_OPCODE_ARG* arg);
extern void shader_hw_nrm(SHADER_OPCODE_ARG* arg); extern void shader_hw_nrm(SHADER_OPCODE_ARG* arg);
extern void shader_hw_sincos(SHADER_OPCODE_ARG* arg); extern void shader_hw_sincos(SHADER_OPCODE_ARG* arg);
extern void shader_hw_mnxn(SHADER_OPCODE_ARG* arg); extern void shader_hw_mnxn(SHADER_OPCODE_ARG* arg);
/* ARB vertex shader prototypes */ /* ARB vertex shader prototypes */
extern void vshader_hw_map2gl(SHADER_OPCODE_ARG* arg);
extern void vshader_hw_rsq_rcp(SHADER_OPCODE_ARG* arg); extern void vshader_hw_rsq_rcp(SHADER_OPCODE_ARG* arg);
/* GLSL helper functions */ /* GLSL helper functions */