wined3d: Implement vpos and vface.
This commit is contained in:
parent
ae600fe0c8
commit
58c3a0c832
|
@ -806,6 +806,21 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction
|
||||||
sprintf(register_name, "I%u", reg->idx);
|
sprintf(register_name, "I%u", reg->idx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WINED3DSPR_MISCTYPE:
|
||||||
|
if(reg->idx == 0)
|
||||||
|
{
|
||||||
|
sprintf(register_name, "vpos");
|
||||||
|
}
|
||||||
|
else if(reg->idx == 1)
|
||||||
|
{
|
||||||
|
sprintf(register_name, "fragment.facing.x");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME("Unknown MISCTYPE register index %u\n", reg->idx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled register type %#x[%u]\n", reg->type, reg->idx);
|
FIXME("Unhandled register type %#x[%u]\n", reg->type, reg->idx);
|
||||||
sprintf(register_name, "unrecognized_register[%u]", reg->idx);
|
sprintf(register_name, "unrecognized_register[%u]", reg->idx);
|
||||||
|
@ -2626,7 +2641,7 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This,
|
||||||
* So enable the best we can get.
|
* So enable the best we can get.
|
||||||
*/
|
*/
|
||||||
if(reg_maps->usesdsx || reg_maps->usesdsy || reg_maps->loop_depth > 0 || reg_maps->usestexldd ||
|
if(reg_maps->usesdsx || reg_maps->usesdsy || reg_maps->loop_depth > 0 || reg_maps->usestexldd ||
|
||||||
reg_maps->usestexldl)
|
reg_maps->usestexldl || reg_maps->usesfacing)
|
||||||
{
|
{
|
||||||
want_nv_prog = TRUE;
|
want_nv_prog = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2760,6 +2775,18 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This,
|
||||||
{
|
{
|
||||||
compiled->ycorrection = next_local;
|
compiled->ycorrection = next_local;
|
||||||
shader_addline(buffer, "PARAM ycorrection = program.local[%u];\n", next_local++);
|
shader_addline(buffer, "PARAM ycorrection = program.local[%u];\n", next_local++);
|
||||||
|
|
||||||
|
if(reg_maps->vpos)
|
||||||
|
{
|
||||||
|
shader_addline(buffer, "TEMP vpos;\n");
|
||||||
|
/* ycorrection.x: Backbuffer height(onscreen) or 0(offscreen).
|
||||||
|
* ycorrection.y: -1.0(onscreen), 1.0(offscreen)
|
||||||
|
* ycorrection.z: 1.0
|
||||||
|
* ycorrection.w: 0.0
|
||||||
|
*/
|
||||||
|
shader_addline(buffer, "MAD vpos, fragment.position, ycorrection.zyww, ycorrection.wxww;\n");
|
||||||
|
shader_addline(buffer, "FLR vpos.xy, vpos;\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -287,6 +287,7 @@ static void shader_record_register_usage(IWineD3DBaseShaderImpl *This, struct sh
|
||||||
|
|
||||||
case WINED3DSPR_MISCTYPE:
|
case WINED3DSPR_MISCTYPE:
|
||||||
if (pshader && reg->idx == 0) reg_maps->vpos = 1;
|
if (pshader && reg->idx == 0) reg_maps->vpos = 1;
|
||||||
|
if (pshader && reg->idx == 1) reg_maps->usesfacing = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3DSPR_CONST:
|
case WINED3DSPR_CONST:
|
||||||
|
|
|
@ -629,7 +629,7 @@ typedef struct shader_reg_maps
|
||||||
|
|
||||||
WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)];
|
WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)];
|
||||||
BOOL bumpmat[MAX_TEXTURES], luminanceparams[MAX_TEXTURES];
|
BOOL bumpmat[MAX_TEXTURES], luminanceparams[MAX_TEXTURES];
|
||||||
char usesnrm, vpos, usesdsx, usesdsy, usestexldd, usesmova, usestexldl;
|
char usesnrm, vpos, usesdsx, usesdsy, usestexldd, usesmova, usestexldl, usesfacing;
|
||||||
char usesrelconstF;
|
char usesrelconstF;
|
||||||
|
|
||||||
/* Whether or not loops are used in this shader, and nesting depth */
|
/* Whether or not loops are used in this shader, and nesting depth */
|
||||||
|
|
Loading…
Reference in New Issue