Henri Verbeet : wined3d: Pass a wined3d_state structure to ffp_clip_emul().
Alexandre Julliard
julliard at winehq.org
Fri Sep 24 11:43:42 CDT 2010
Module: wine
Branch: master
Commit: 7dd4174e05974a2fb58b76614b807319623c6b28
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7dd4174e05974a2fb58b76614b807319623c6b28
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Sep 23 21:33:28 2010 +0200
wined3d: Pass a wined3d_state structure to ffp_clip_emul().
---
dlls/wined3d/arb_program_shader.c | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 6fa5fa7..ed80577 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -175,9 +175,9 @@ static const char *arb_get_helper_value(enum wined3d_shader_type shader, enum ar
}
}
-static inline BOOL ffp_clip_emul(IWineD3DStateBlockImpl *stateblock)
+static inline BOOL ffp_clip_emul(const struct wined3d_state *state)
{
- return stateblock->state.lowest_disabled_stage < 7;
+ return state->lowest_disabled_stage < 7;
}
/* ARB_program_shader private data */
@@ -4450,12 +4450,14 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW
WORD int_skip;
IWineD3DDeviceImpl *dev = (IWineD3DDeviceImpl *)shader->baseShader.device;
const struct wined3d_gl_info *gl_info = &dev->adapter->gl_info;
+ const struct wined3d_state *state = &stateblock->state;
+
find_vs_compile_args(shader, stateblock, &args->super);
args->clip.boolclip_compare = 0;
if(use_ps(stateblock))
{
- IWineD3DPixelShaderImpl *ps = stateblock->state.pixel_shader;
+ IWineD3DPixelShaderImpl *ps = state->pixel_shader;
struct arb_pshader_private *shader_priv = ps->baseShader.backend_data;
args->ps_signature = shader_priv->input_signature_idx;
@@ -4466,15 +4468,15 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW
args->ps_signature = ~0;
if(!dev->vs_clipping)
{
- args->clip.boolclip.clip_texcoord = ffp_clip_emul(stateblock) ? gl_info->limits.texture_stages : 0;
+ args->clip.boolclip.clip_texcoord = ffp_clip_emul(state) ? gl_info->limits.texture_stages : 0;
}
/* Otherwise: Setting boolclip_compare set clip_texcoord to 0 */
}
if (args->clip.boolclip.clip_texcoord)
{
- if (stateblock->state.render_states[WINED3DRS_CLIPPING])
- args->clip.boolclip.clipplane_mask = (unsigned char)stateblock->state.render_states[WINED3DRS_CLIPPLANEENABLE];
+ if (state->render_states[WINED3DRS_CLIPPING])
+ args->clip.boolclip.clipplane_mask = (unsigned char)state->render_states[WINED3DRS_CLIPPLANEENABLE];
/* clipplane_mask was set to 0 by setting boolclip_compare to 0 */
}
@@ -4483,7 +4485,7 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW
/* TODO: Figure out if it would be better to store bool constants as bitmasks in the stateblock */
for(i = 0; i < MAX_CONST_B; i++)
{
- if (stateblock->state.vs_consts_b[i])
+ if (state->vs_consts_b[i])
args->clip.boolclip.bools |= ( 1 << i);
}
@@ -4511,9 +4513,9 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW
}
else
{
- args->loop_ctrl[i][0] = stateblock->state.vs_consts_i[i * 4];
- args->loop_ctrl[i][1] = stateblock->state.vs_consts_i[i * 4 + 1];
- args->loop_ctrl[i][2] = stateblock->state.vs_consts_i[i * 4 + 2];
+ args->loop_ctrl[i][0] = state->vs_consts_i[i * 4];
+ args->loop_ctrl[i][1] = state->vs_consts_i[i * 4 + 1];
+ args->loop_ctrl[i][2] = state->vs_consts_i[i * 4 + 2];
}
}
}
@@ -5979,7 +5981,8 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi
srgb_sub_high, 0.0, 0.0, 0.0);
}
- if(ffp_clip_emul(stateblock) && settings->emul_clipplanes) shader_addline(&buffer, "KIL fragment.texcoord[7];\n");
+ if (ffp_clip_emul(&stateblock->state) && settings->emul_clipplanes)
+ shader_addline(&buffer, "KIL fragment.texcoord[7];\n");
/* Generate texture sampling instructions) */
for(stage = 0; stage < MAX_TEXTURES && settings->op[stage].cop != WINED3DTOP_DISABLE; stage++) {
More information about the wine-cvs
mailing list