wined3d: Prepare the atifs shader generator for temp register support.
This commit is contained in:
parent
20a2afe6aa
commit
8f9a14e312
|
@ -149,7 +149,7 @@ static const char *debug_swizzle(GLuint swizzle) {
|
|||
}
|
||||
|
||||
#define GLINFO_LOCATION (*gl_info)
|
||||
static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int stage, GLuint *mod) {
|
||||
static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int stage, GLuint *mod, GLuint tmparg) {
|
||||
GLenum ret;
|
||||
|
||||
if(mod) *mod = GL_NONE;
|
||||
|
@ -186,8 +186,7 @@ static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int
|
|||
break;
|
||||
|
||||
case WINED3DTA_TEMP:
|
||||
FIXME("Unhandled source argument WINED3DTA_TEMP\n");
|
||||
ret = 0;
|
||||
ret = tmparg;
|
||||
break;
|
||||
|
||||
case WINED3DTA_CONSTANT:
|
||||
|
@ -215,6 +214,8 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
GLuint arg0, arg1, arg2, extrarg;
|
||||
GLuint dstmod, argmod0, argmod1, argmod2, argmodextra;
|
||||
GLuint swizzle;
|
||||
GLuint tmparg = -1;
|
||||
GLuint dstreg;
|
||||
|
||||
if(!ret) {
|
||||
ERR("Failed to generate a GL_ATI_fragment_shader shader id\n");
|
||||
|
@ -357,9 +358,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
break;
|
||||
}
|
||||
|
||||
arg0 = register_for_arg(op[stage].carg0, gl_info, stage, &argmod0);
|
||||
arg1 = register_for_arg(op[stage].carg1, gl_info, stage, &argmod1);
|
||||
arg2 = register_for_arg(op[stage].carg2, gl_info, stage, &argmod2);
|
||||
dstreg = GL_REG_0_ATI;
|
||||
|
||||
arg0 = register_for_arg(op[stage].carg0, gl_info, stage, &argmod0, tmparg);
|
||||
arg1 = register_for_arg(op[stage].carg1, gl_info, stage, &argmod1, tmparg);
|
||||
arg2 = register_for_arg(op[stage].carg2, gl_info, stage, &argmod2, tmparg);
|
||||
dstmod = GL_NONE;
|
||||
argmodextra = GL_NONE;
|
||||
extrarg = GL_NONE;
|
||||
|
@ -369,9 +372,9 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
arg1 = arg2;
|
||||
argmod1 = argmod2;
|
||||
case WINED3DTOP_SELECTARG1:
|
||||
TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp1ATI(GL_MOV_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
|
@ -380,9 +383,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
case WINED3DTOP_MODULATE2X:
|
||||
if(dstmod == GL_NONE) dstmod = GL_2X_BIT_ATI;
|
||||
case WINED3DTOP_MODULATE:
|
||||
TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, dstmod,
|
||||
TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_MUL_ATI, dstreg, GL_NONE, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
@ -392,55 +397,68 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
case WINED3DTOP_ADDSIGNED:
|
||||
argmodextra = GL_BIAS_BIT_ATI;
|
||||
case WINED3DTOP_ADD:
|
||||
TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmodextra | argmod2));
|
||||
TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmodextra | argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmodextra | argmod2));
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmodextra | argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_SUBTRACT:
|
||||
TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_SUB_ATI, dstreg, GL_NONE, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_ADDSMOOTH:
|
||||
argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1));
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmodextra),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
/* Dst = arg1 + * arg2(1 -arg 1)
|
||||
* = arg2 * (1 - arg1) + arg1
|
||||
*/
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmodextra,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_BLENDCURRENTALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDFACTORALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDTEXTUREALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDDIFFUSEALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL);
|
||||
TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(extrarg), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1);
|
||||
TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(extrarg),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
extrarg, GL_ALPHA, GL_NONE,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_BLENDTEXTUREALPHAPM:
|
||||
arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL);
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg0),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg0, GL_ALPHA, GL_COMP_BIT_ATI,
|
||||
arg1, GL_NONE, argmod1));
|
||||
|
@ -452,9 +470,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;
|
||||
case WINED3DTOP_MODULATEALPHA_ADDCOLOR:
|
||||
if(!argmodextra) argmodextra = argmod1;
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(arg1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(arg1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_ALPHA, argmodextra,
|
||||
arg1, GL_NONE, argmod1));
|
||||
|
@ -464,38 +484,49 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;
|
||||
case WINED3DTOP_MODULATECOLOR_ADDALPHA:
|
||||
if(!argmodextra) argmodextra = argmod1;
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_ALPHA, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_ALPHA, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmodextra),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmodextra,
|
||||
arg1, GL_ALPHA, argmod1));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_DOTPRODUCT3:
|
||||
TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI,
|
||||
TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI),
|
||||
debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI));
|
||||
GL_EXTCALL(glColorFragmentOp2ATI(GL_DOT3_ATI, dstreg, GL_NONE, GL_4X_BIT_ATI,
|
||||
arg1, GL_NONE, argmod1 | GL_BIAS_BIT_ATI,
|
||||
arg2, GL_NONE, argmod2 | GL_BIAS_BIT_ATI));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_MULTIPLYADD:
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg0), debug_argmod(argmod0), debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
arg0, GL_NONE, argmod0,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmod1));
|
||||
TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg0), debug_argmod(argmod0),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg0, GL_NONE, argmod0,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_LERP:
|
||||
TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_argmod(argmod0));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg0, GL_NONE, argmod0));
|
||||
TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg0), debug_argmod(argmod0));
|
||||
GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, GL_NONE,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg0, GL_NONE, argmod0));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_BUMPENVMAP:
|
||||
|
@ -506,9 +537,9 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
default: FIXME("Unhandled color operation %d on stage %d\n", op[stage].cop, stage);
|
||||
}
|
||||
|
||||
arg0 = register_for_arg(op[stage].aarg0, gl_info, stage, &argmod0);
|
||||
arg1 = register_for_arg(op[stage].aarg1, gl_info, stage, &argmod1);
|
||||
arg2 = register_for_arg(op[stage].aarg2, gl_info, stage, &argmod2);
|
||||
arg0 = register_for_arg(op[stage].aarg0, gl_info, stage, &argmod0, tmparg);
|
||||
arg1 = register_for_arg(op[stage].aarg1, gl_info, stage, &argmod1, tmparg);
|
||||
arg2 = register_for_arg(op[stage].aarg2, gl_info, stage, &argmod2, tmparg);
|
||||
dstmod = GL_NONE;
|
||||
argmodextra = GL_NONE;
|
||||
extrarg = GL_NONE;
|
||||
|
@ -527,9 +558,10 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
arg1 = arg2;
|
||||
argmod1 = argmod2;
|
||||
case WINED3DTOP_SELECTARG1:
|
||||
TRACE("glAlphaFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s)\n",
|
||||
TRACE("glAlphaFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glAlphaFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
GL_EXTCALL(glAlphaFragmentOp1ATI(GL_MOV_ATI, dstreg, GL_NONE,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
|
@ -538,9 +570,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
case WINED3DTOP_MODULATE2X:
|
||||
if(dstmod == GL_NONE) dstmod = GL_2X_BIT_ATI;
|
||||
case WINED3DTOP_MODULATE:
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, dstmod,
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_MUL_ATI, %s, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_MUL_ATI, dstreg, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
@ -550,55 +584,68 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
case WINED3DTOP_ADDSIGNED:
|
||||
argmodextra = GL_BIAS_BIT_ATI;
|
||||
case WINED3DTOP_ADD:
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmodextra | argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmodextra | argmod2));
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_ADD_ATI, %s, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmodextra | argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_ADD_ATI, dstreg, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmodextra | argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_SUBTRACT:
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg), debug_dstmod(dstmod),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_SUB_ATI, dstreg, dstmod,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_ADDSMOOTH:
|
||||
argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1));
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmodextra),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
/* Dst = arg1 + * arg2(1 -arg 1)
|
||||
* = arg2 * (1 - arg1) + arg1
|
||||
*/
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmodextra,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_BLENDCURRENTALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDFACTORALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDTEXTUREALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL);
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);
|
||||
case WINED3DTOP_BLENDDIFFUSEALPHA:
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL);
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(extrarg), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1);
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(extrarg),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE,
|
||||
extrarg, GL_ALPHA, GL_NONE,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_BLENDTEXTUREALPHAPM:
|
||||
arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL);
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg0),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg0, GL_ALPHA, GL_COMP_BIT_ATI,
|
||||
arg1, GL_NONE, argmod1));
|
||||
|
@ -607,26 +654,34 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G
|
|||
/* D3DTOP_PREMODULATE ???? */
|
||||
|
||||
case WINED3DTOP_DOTPRODUCT3:
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_4X_BIT_ATI,
|
||||
TRACE("glAlphaFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI),
|
||||
debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI));
|
||||
GL_EXTCALL(glAlphaFragmentOp2ATI(GL_DOT3_ATI, dstreg, GL_4X_BIT_ATI,
|
||||
arg1, GL_NONE, argmod1 | GL_BIAS_BIT_ATI,
|
||||
arg2, GL_NONE, argmod2 | GL_BIAS_BIT_ATI));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_MULTIPLYADD:
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg0), debug_argmod(argmod0), debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg0), debug_argmod(argmod0),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg1), debug_argmod(argmod1));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE,
|
||||
arg0, GL_NONE, argmod0,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg1, GL_NONE, argmod1));
|
||||
break;
|
||||
|
||||
case WINED3DTOP_LERP:
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_argmod(argmod0));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE,
|
||||
TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",
|
||||
debug_register(dstreg),
|
||||
debug_register(arg1), debug_argmod(argmod1),
|
||||
debug_register(arg2), debug_argmod(argmod2),
|
||||
debug_register(arg0), debug_argmod(argmod0));
|
||||
GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE,
|
||||
arg1, GL_NONE, argmod1,
|
||||
arg2, GL_NONE, argmod2,
|
||||
arg0, GL_NONE, argmod0));
|
||||
|
|
Loading…
Reference in New Issue