Henri Verbeet : wined3d: Only create the ARBfp blitter if creating the GLSL blitter failed.

Alexandre Julliard julliard at winehq.org
Mon May 21 17:15:10 CDT 2018


Module: wine
Branch: master
Commit: 6fc027e5acfb7f7c7f50af421658e5442e896588
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6fc027e5acfb7f7c7f50af421658e5442e896588

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon May 21 23:02:45 2018 +0430

wined3d: Only create the ARBfp blitter if creating the GLSL blitter failed.

Since the GLSL blitter can do everything the ARBfp one can.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/device.c          |  4 ++--
 dlls/wined3d/glsl_shader.c     | 11 +++++++----
 dlls/wined3d/wined3d_private.h |  2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index c853b43..8257efd 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1042,8 +1042,8 @@ static void wined3d_device_create_primary_opengl_context_cs(void *object)
         return;
     }
     wined3d_ffp_blitter_create(&device->blitter, &device->adapter->gl_info);
-    wined3d_arbfp_blitter_create(&device->blitter, device);
-    wined3d_glsl_blitter_create(&device->blitter, device);
+    if (!wined3d_glsl_blitter_create(&device->blitter, device))
+        wined3d_arbfp_blitter_create(&device->blitter, device);
     wined3d_fbo_blitter_create(&device->blitter, &device->adapter->gl_info);
     wined3d_raw_blitter_create(&device->blitter, &device->adapter->gl_info);
 
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index e433906..0d0e25a 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -13157,21 +13157,22 @@ static const struct wined3d_blitter_ops glsl_blitter_ops =
     glsl_blitter_blit,
 };
 
-void wined3d_glsl_blitter_create(struct wined3d_blitter **next, const struct wined3d_device *device)
+struct wined3d_blitter *wined3d_glsl_blitter_create(struct wined3d_blitter **next,
+        const struct wined3d_device *device)
 {
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
     struct wined3d_glsl_blitter *blitter;
 
     if (device->shader_backend != &glsl_shader_backend)
-        return;
+        return NULL;
 
     if (!gl_info->supported[ARB_VERTEX_SHADER] || !gl_info->supported[ARB_FRAGMENT_SHADER])
-        return;
+        return NULL;
 
     if (!(blitter = heap_alloc(sizeof(*blitter))))
     {
         ERR("Failed to allocate blitter.\n");
-        return;
+        return NULL;
     }
 
     TRACE("Created blitter %p.\n", blitter);
@@ -13182,4 +13183,6 @@ void wined3d_glsl_blitter_create(struct wined3d_blitter **next, const struct win
     wine_rb_init(&blitter->programs, glsl_blitter_args_compare);
     blitter->palette_texture = 0;
     *next = &blitter->blitter;
+
+    return *next;
 }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 26979b3..f2c4cd6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2143,7 +2143,7 @@ void wined3d_fbo_blitter_create(struct wined3d_blitter **next,
         const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
 void wined3d_ffp_blitter_create(struct wined3d_blitter **next,
         const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
-void wined3d_glsl_blitter_create(struct wined3d_blitter **next,
+struct wined3d_blitter *wined3d_glsl_blitter_create(struct wined3d_blitter **next,
         const struct wined3d_device *device) DECLSPEC_HIDDEN;
 void wined3d_raw_blitter_create(struct wined3d_blitter **next,
         const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list