[PATCH 1/5] wined3d: Consolidate d3d_info BOOLs into a flags field
Stefan Dösinger
stefan at codeweavers.com
Mon Jun 17 15:53:21 CDT 2013
---
dlls/wined3d/arb_program_shader.c | 7 ++++---
dlls/wined3d/buffer.c | 2 +-
dlls/wined3d/device.c | 3 ++-
dlls/wined3d/directx.c | 12 +++++++-----
dlls/wined3d/state.c | 6 +++---
dlls/wined3d/utils.c | 3 ++-
dlls/wined3d/wined3d_private.h | 6 ++++--
7 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index fd2df68..5ff5e98 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -4316,7 +4316,7 @@ static struct arb_ps_compiled_shader *find_arb_pshader(struct wined3d_shader *sh
TRACE("Shader got assigned input signature index %u\n", shader_data->input_signature_idx);
- if (!d3d_info->vs_clipping)
+ if (!(d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING))
shader_data->clipplane_emulation = shader_find_free_input_register(&shader->reg_maps,
d3d_info->limits.ffp_blend_stages - 1);
else
@@ -4497,7 +4497,7 @@ static void find_arb_ps_compile_args(const struct wined3d_state *state,
* is quite expensive because it forces the driver to disable early Z discards. It is cheaper to
* duplicate the shader than have a no-op KIL instruction in every shader
*/
- if (!d3d_info->vs_clipping && use_vs(state)
+ if (!(d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING) && use_vs(state)
&& state->render_states[WINED3D_RS_CLIPPING]
&& state->render_states[WINED3D_RS_CLIPPLANEENABLE])
args->clip = 1;
@@ -4554,7 +4554,8 @@ static void find_arb_vs_compile_args(const struct wined3d_state *state,
else
{
args->ps_signature = ~0;
- if (!d3d_info->vs_clipping && adapter->fragment_pipe == &arbfp_fragment_pipeline)
+ if (!(d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING)
+ && adapter->fragment_pipe == &arbfp_fragment_pipeline)
{
args->clip.boolclip.clip_texcoord = ffp_clip_emul(state) ? d3d_info->limits.ffp_blend_stages : 0;
}
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 586b16c..2d5d89ec 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -313,7 +313,7 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This)
const struct wined3d_stream_info *si = &device->stream_info;
const struct wined3d_state *state = &device->stateBlock->state;
BOOL support_d3dcolor = adapter->gl_info.supported[ARB_VERTEX_ARRAY_BGRA];
- BOOL support_xyzrhw = adapter->d3d_info.xyzrhw;
+ BOOL support_xyzrhw = adapter->d3d_info.flags & WINED3D_ADAPTER_CAP_XYZRHW;
UINT stride_this_run = 0;
BOOL ret = FALSE;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 464181f..cdd3d28 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -332,7 +332,8 @@ void device_update_stream_info(struct wined3d_device *device, const struct wined
slow_mask |= -!gl_info->supported[ARB_VERTEX_ARRAY_BGRA]
& ((1 << WINED3D_FFP_DIFFUSE) | (1 << WINED3D_FFP_SPECULAR));
- if (((stream_info->position_transformed && !device->adapter->d3d_info.xyzrhw)
+ if (((stream_info->position_transformed
+ && !(device->adapter->d3d_info.flags & WINED3D_ADAPTER_CAP_XYZRHW))
|| (stream_info->use_map & slow_mask)) && !stream_info->all_vbo)
device->useDrawStridedSlow = TRUE;
else
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 760fa34..2993542 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2864,7 +2864,8 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
adapter->blitter = select_blit_implementation(gl_info, adapter->shader_backend);
adapter->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps);
- adapter->d3d_info.vs_clipping = shader_caps.wined3d_caps & WINED3D_SHADER_CAP_VS_CLIPPING;
+ if (shader_caps.wined3d_caps & WINED3D_SHADER_CAP_VS_CLIPPING)
+ adapter->d3d_info.flags |= WINED3D_ADAPTER_CAP_VS_CLIPPING;
adapter->d3d_info.limits.vs_version = shader_caps.vs_version;
adapter->d3d_info.limits.gs_version = shader_caps.gs_version;
adapter->d3d_info.limits.ps_version = shader_caps.ps_version;
@@ -2872,7 +2873,8 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
adapter->d3d_info.limits.ps_uniform_count = shader_caps.ps_uniform_count;
adapter->vertex_pipe->vp_get_caps(gl_info, &vertex_caps);
- adapter->d3d_info.xyzrhw = vertex_caps.xyzrhw;
+ if (vertex_caps.xyzrhw)
+ adapter->d3d_info.flags |= WINED3D_ADAPTER_CAP_XYZRHW;
adapter->fragment_pipe->get_caps(gl_info, &fragment_caps);
adapter->d3d_info.limits.ffp_blend_stages = fragment_caps.MaxTextureBlendStages;
@@ -4690,10 +4692,10 @@ static void wined3d_adapter_init_ffp_attrib_ops(const struct wined3d_adapter *ad
position_funcs[WINED3D_FFP_EMIT_FLOAT1] = invalid_func;
position_funcs[WINED3D_FFP_EMIT_FLOAT2] = invalid_func;
position_funcs[WINED3D_FFP_EMIT_FLOAT3] = (glAttribFunc)gl_info->gl_ops.gl.p_glVertex3fv;
- if (!d3d_info->xyzrhw)
- position_funcs[WINED3D_FFP_EMIT_FLOAT4] = position_float4;
- else
+ if (d3d_info->flags & WINED3D_ADAPTER_CAP_XYZRHW)
position_funcs[WINED3D_FFP_EMIT_FLOAT4] = (glAttribFunc)gl_info->gl_ops.gl.p_glVertex4fv;
+ else
+ position_funcs[WINED3D_FFP_EMIT_FLOAT4] = position_float4;
position_funcs[WINED3D_FFP_EMIT_D3DCOLOR] = position_d3dcolor;
position_funcs[WINED3D_FFP_EMIT_UBYTE4] = invalid_func;
position_funcs[WINED3D_FFP_EMIT_SHORT2] = invalid_func;
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index ffce803..87c2585 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -593,7 +593,7 @@ void state_clipping(struct wined3d_context *context, const struct wined3d_state
DWORD enable = 0xffffffff;
DWORD disable = 0x00000000;
- if (use_vs(state) && !context->d3d_info->vs_clipping)
+ if (use_vs(state) && !(context->d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING))
{
static BOOL warned;
@@ -4582,7 +4582,7 @@ void vertexdeclaration(struct wined3d_context *context, const struct wined3d_sta
{
updateFog = TRUE;
- if (!context->d3d_info->vs_clipping
+ if (!(context->d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING)
&& !isStateDirty(context, STATE_RENDER(WINED3D_RS_CLIPPLANEENABLE)))
{
state_clipping(context, state, STATE_RENDER(WINED3D_RS_CLIPPLANEENABLE));
@@ -4600,7 +4600,7 @@ void vertexdeclaration(struct wined3d_context *context, const struct wined3d_sta
{
if(!context->last_was_vshader) {
static BOOL warned = FALSE;
- if (!context->d3d_info->vs_clipping)
+ if (!(context->d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING))
{
/* Disable all clip planes to get defined results on all drivers. See comment in the
* state_clipping state handler
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 5b7fb3c..eda25d4 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -3373,7 +3373,8 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d
} else {
settings->sRGB_write = 0;
}
- if (d3d_info->vs_clipping || !use_vs(state) || !state->render_states[WINED3D_RS_CLIPPING]
+ if (d3d_info->flags & WINED3D_ADAPTER_CAP_VS_CLIPPING || !use_vs(state)
+ || !state->render_states[WINED3D_RS_CLIPPING]
|| !state->render_states[WINED3D_RS_CLIPPLANEENABLE])
{
/* No need to emulate clipplanes if GL supports native vertex shader clipping or if
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1ed2587..9305c8f 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1606,11 +1606,13 @@ struct wined3d_d3d_limits
UINT ffp_blend_stages;
};
+#define WINED3D_ADAPTER_CAP_XYZRHW 0x00000001
+#define WINED3D_ADAPTER_CAP_VS_CLIPPING 0x00000002
+
struct wined3d_d3d_info
{
struct wined3d_d3d_limits limits;
- BOOL xyzrhw;
- BOOL vs_clipping;
+ DWORD flags;
DWORD valid_rt_mask;
};
--
1.8.1.5
More information about the wine-patches
mailing list