[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