Henri Verbeet : wined3d: Move the various backend selection utility functions to utils.c.

Alexandre Julliard julliard at winehq.org
Wed Nov 18 09:40:42 CST 2009


Module: wine
Branch: master
Commit: e4d8a3f309375ec4b749ac26487f566bb1f3bd29
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e4d8a3f309375ec4b749ac26487f566bb1f3bd29

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Nov 18 10:45:52 2009 +0100

wined3d: Move the various backend selection utility functions to utils.c.

---

 dlls/wined3d/directx.c         |  103 ----------------------------------------
 dlls/wined3d/utils.c           |   60 +++++++++++++++++++++++
 dlls/wined3d/wined3d_private.h |    8 +++
 3 files changed, 68 insertions(+), 103 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index f9cec29..774dfec 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -155,10 +155,6 @@ static const struct {
  **********************************************************/
 
 static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType, WINED3DFORMAT AdapterFormat, DWORD Usage, WINED3DRESOURCETYPE RType, WINED3DFORMAT CheckFormat, WINED3DSURFTYPE SurfaceType);
-static const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
-        WINED3DDEVTYPE DeviceType);
-static const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter, WINED3DDEVTYPE DeviceType);
-static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, WINED3DDEVTYPE DeviceType);
 
 GLint wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP + 1];
 
@@ -389,39 +385,6 @@ static ULONG WINAPI IWineD3DImpl_Release(IWineD3D *iface) {
     return ref;
 }
 
-/* Set the shader type for this device, depending on the given capabilities
- * and the user preferences in wined3d_settings. */
-static void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected)
-{
-    if (wined3d_settings.vs_mode == VS_NONE) {
-        *vs_selected = SHADER_NONE;
-    } else if (gl_info->supported[ARB_VERTEX_SHADER] && wined3d_settings.glslRequested) {
-        /* Geforce4 cards support GLSL but for vertex shaders only. Further its reported GLSL caps are
-         * wrong. This combined with the fact that glsl won't offer more features or performance, use ARB
-         * shaders only on this card. */
-        if (gl_info->supported[NV_VERTEX_PROGRAM] && !gl_info->supported[NV_VERTEX_PROGRAM2])
-            *vs_selected = SHADER_ARB;
-        else
-            *vs_selected = SHADER_GLSL;
-    } else if (gl_info->supported[ARB_VERTEX_PROGRAM]) {
-        *vs_selected = SHADER_ARB;
-    } else {
-        *vs_selected = SHADER_NONE;
-    }
-
-    if (wined3d_settings.ps_mode == PS_NONE) {
-        *ps_selected = SHADER_NONE;
-    } else if (gl_info->supported[ARB_FRAGMENT_SHADER] && wined3d_settings.glslRequested) {
-        *ps_selected = SHADER_GLSL;
-    } else if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) {
-        *ps_selected = SHADER_ARB;
-    } else if (gl_info->supported[ATI_FRAGMENT_SHADER]) {
-        *ps_selected = SHADER_ATI;
-    } else {
-        *ps_selected = SHADER_NONE;
-    }
-}
-
 /**********************************************************
  * IWineD3D parts follows
  **********************************************************/
@@ -3810,72 +3773,6 @@ static HRESULT  WINAPI IWineD3DImpl_CheckDeviceFormatConversion(IWineD3D *iface,
     return WINED3D_OK;
 }
 
-static const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter, WINED3DDEVTYPE DeviceType)
-{
-    const shader_backend_t *ret;
-    int vs_selected_mode;
-    int ps_selected_mode;
-
-    select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
-    if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) {
-        ret = &glsl_shader_backend;
-    } else if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) {
-        ret = &arb_program_shader_backend;
-    } else {
-        ret = &none_shader_backend;
-    }
-    return ret;
-}
-
-static const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
-        WINED3DDEVTYPE DeviceType)
-{
-    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
-    int vs_selected_mode;
-    int ps_selected_mode;
-
-    select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
-    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
-            && gl_info->supported[ARB_FRAGMENT_PROGRAM])
-    {
-        return &arbfp_fragment_pipeline;
-    }
-    else if (ps_selected_mode == SHADER_ATI)
-    {
-        return &atifs_fragment_pipeline;
-    }
-    else if (gl_info->supported[NV_REGISTER_COMBINERS] && gl_info->supported[NV_TEXTURE_SHADER2])
-    {
-        return &nvts_fragment_pipeline;
-    }
-    else if (gl_info->supported[NV_REGISTER_COMBINERS])
-    {
-        return &nvrc_fragment_pipeline;
-    }
-    else
-    {
-        return &ffp_fragment_pipeline;
-    }
-}
-
-static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, WINED3DDEVTYPE DeviceType)
-{
-    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
-    int vs_selected_mode;
-    int ps_selected_mode;
-
-    select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
-    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
-            && gl_info->supported[ARB_FRAGMENT_PROGRAM])
-    {
-        return &arbfp_blit;
-    }
-    else
-    {
-        return &ffp_blit;
-    }
-}
-
 /* Note: d3d8 passes in a pointer to a D3DCAPS8 structure, which is a true
       subset of a D3DCAPS9 structure. However, it has to come via a void *
       as the d3d8 interface cannot import the d3d9 header                  */
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 54b0fb7..1b4516a 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -2772,3 +2772,63 @@ UINT wined3d_log2i(UINT32 x)
 
     return (i = x >> 16) ? (x = i >> 8) ? l[x] + 24 : l[i] + 16 : (i = x >> 8) ? l[i] + 8 : l[x];
 }
+
+/* Set the shader type for this device, depending on the given capabilities
+ * and the user preferences in wined3d_settings. */
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected)
+{
+    if (wined3d_settings.vs_mode == VS_NONE) *vs_selected = SHADER_NONE;
+    else if (gl_info->supported[ARB_VERTEX_SHADER] && wined3d_settings.glslRequested)
+    {
+        /* Geforce4 cards support GLSL but for vertex shaders only. Further its reported GLSL caps are
+         * wrong. This combined with the fact that glsl won't offer more features or performance, use ARB
+         * shaders only on this card. */
+        if (gl_info->supported[NV_VERTEX_PROGRAM] && !gl_info->supported[NV_VERTEX_PROGRAM2]) *vs_selected = SHADER_ARB;
+        else *vs_selected = SHADER_GLSL;
+    }
+    else if (gl_info->supported[ARB_VERTEX_PROGRAM]) *vs_selected = SHADER_ARB;
+    else *vs_selected = SHADER_NONE;
+
+    if (wined3d_settings.ps_mode == PS_NONE) *ps_selected = SHADER_NONE;
+    else if (gl_info->supported[ARB_FRAGMENT_SHADER] && wined3d_settings.glslRequested) *ps_selected = SHADER_GLSL;
+    else if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) *ps_selected = SHADER_ARB;
+    else if (gl_info->supported[ATI_FRAGMENT_SHADER]) *ps_selected = SHADER_ATI;
+    else *ps_selected = SHADER_NONE;
+}
+
+const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter, WINED3DDEVTYPE device_type)
+{
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
+    if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend;
+    if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend;
+    return &none_shader_backend;
+}
+
+const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
+        WINED3DDEVTYPE device_type)
+{
+    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+            && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline;
+    else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline;
+    else if (gl_info->supported[NV_REGISTER_COMBINERS]
+            && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline;
+    else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline;
+    else return &ffp_fragment_pipeline;
+}
+
+const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, WINED3DDEVTYPE device_type)
+{
+    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+            && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit;
+    else return &ffp_blit;
+}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index f423733..1c8c539 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2525,6 +2525,14 @@ void multiply_matrix(WINED3DMATRIX *dest, const WINED3DMATRIX *src1, const WINED
 UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN;
 unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
 
+const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter,
+        WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
+const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
+        WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
+const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter,
+        WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
+
 typedef struct local_constant {
     struct list entry;
     unsigned int idx;




More information about the wine-cvs mailing list