wined3d: Implement dsy in ARB.
This commit is contained in:
parent
51cdc9d361
commit
258d99d289
|
@ -103,6 +103,7 @@ struct arb_ps_compiled_shader
|
||||||
struct stb_const_desc luminanceconst[MAX_TEXTURES];
|
struct stb_const_desc luminanceconst[MAX_TEXTURES];
|
||||||
UINT int_consts[MAX_CONST_I];
|
UINT int_consts[MAX_CONST_I];
|
||||||
char num_int_consts;
|
char num_int_consts;
|
||||||
|
UINT ycorrection;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct arb_vs_compile_args
|
struct arb_vs_compile_args
|
||||||
|
@ -321,6 +322,22 @@ static inline void shader_arb_ps_local_constants(IWineD3DDeviceImpl* deviceImpl)
|
||||||
GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, gl_shader->int_consts[i], val));
|
GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, gl_shader->int_consts[i], val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(gl_shader->ycorrection != WINED3D_CONST_NUM_UNUSED)
|
||||||
|
{
|
||||||
|
/* ycorrection.x: Backbuffer height(onscreen) or 0(offscreen).
|
||||||
|
* ycorrection.y: -1.0(onscreen), 1.0(offscreen)
|
||||||
|
* ycorrection.z: 1.0
|
||||||
|
* ycorrection.w: 0.0
|
||||||
|
*/
|
||||||
|
float val[4];
|
||||||
|
val[0] = deviceImpl->render_offscreen ? 0.0 : ((IWineD3DSurfaceImpl *) deviceImpl->render_targets[0])->currentDesc.Height;
|
||||||
|
val[1] = deviceImpl->render_offscreen ? 1.0 : -1.0;
|
||||||
|
val[2] = 1.0;
|
||||||
|
val[3] = 0.0;
|
||||||
|
GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, gl_shader->ycorrection, val));
|
||||||
|
checkGLcall("y correction loading\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void shader_arb_vs_local_constants(IWineD3DDeviceImpl* deviceImpl)
|
static inline void shader_arb_vs_local_constants(IWineD3DDeviceImpl* deviceImpl)
|
||||||
|
@ -2027,6 +2044,22 @@ static void shader_hw_sgn(const struct wined3d_shader_instruction *ins)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void shader_hw_dsy(const struct wined3d_shader_instruction *ins)
|
||||||
|
{
|
||||||
|
SHADER_BUFFER *buffer = ins->ctx->buffer;
|
||||||
|
char src[50];
|
||||||
|
char dst[50];
|
||||||
|
char dst_name[50];
|
||||||
|
BOOL is_color;
|
||||||
|
|
||||||
|
shader_arb_get_dst_param(ins, &ins->dst[0], dst);
|
||||||
|
shader_arb_get_src_param(ins, &ins->src[0], 0, src);
|
||||||
|
shader_arb_get_register_name(ins, &ins->dst[0].reg, dst_name, &is_color);
|
||||||
|
|
||||||
|
shader_addline(buffer, "DDY %s, %s;\n", dst, src);
|
||||||
|
shader_addline(buffer, "MUL%s %s, %s, ycorrection.y;\n", shader_arb_get_modifier(ins), dst, dst_name);
|
||||||
|
}
|
||||||
|
|
||||||
static void shader_hw_loop(const struct wined3d_shader_instruction *ins)
|
static void shader_hw_loop(const struct wined3d_shader_instruction *ins)
|
||||||
{
|
{
|
||||||
SHADER_BUFFER *buffer = ins->ctx->buffer;
|
SHADER_BUFFER *buffer = ins->ctx->buffer;
|
||||||
|
@ -2461,6 +2494,16 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(reg_maps->vpos || reg_maps->usesdsy)
|
||||||
|
{
|
||||||
|
compiled->ycorrection = next_local;
|
||||||
|
shader_addline(buffer, "PARAM ycorrection = program.local[%u];\n", next_local++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
compiled->ycorrection = WINED3D_CONST_NUM_UNUSED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Base Shader Body */
|
/* Base Shader Body */
|
||||||
shader_generate_main((IWineD3DBaseShader *)This, buffer, reg_maps, function, &priv_ctx);
|
shader_generate_main((IWineD3DBaseShader *)This, buffer, reg_maps, function, &priv_ctx);
|
||||||
|
|
||||||
|
@ -3105,7 +3148,7 @@ static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABL
|
||||||
/* WINED3DSIH_DP4 */ shader_hw_map2gl,
|
/* WINED3DSIH_DP4 */ shader_hw_map2gl,
|
||||||
/* WINED3DSIH_DST */ shader_hw_map2gl,
|
/* WINED3DSIH_DST */ shader_hw_map2gl,
|
||||||
/* WINED3DSIH_DSX */ shader_hw_map2gl,
|
/* WINED3DSIH_DSX */ shader_hw_map2gl,
|
||||||
/* WINED3DSIH_DSY */ NULL,
|
/* WINED3DSIH_DSY */ shader_hw_dsy,
|
||||||
/* WINED3DSIH_ELSE */ NULL,
|
/* WINED3DSIH_ELSE */ NULL,
|
||||||
/* WINED3DSIH_ENDIF */ NULL,
|
/* WINED3DSIH_ENDIF */ NULL,
|
||||||
/* WINED3DSIH_ENDLOOP */ shader_hw_endloop,
|
/* WINED3DSIH_ENDLOOP */ shader_hw_endloop,
|
||||||
|
|
Loading…
Reference in New Issue