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