[PATCH 2/2] wined3d: Only create the ARBfp blitter if creating the GLSL blitter failed.
Henri Verbeet
hverbeet at codeweavers.com
Mon May 21 13:14:45 CDT 2018
Since the GLSL blitter can do everything the ARBfp one can.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
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 c853b43440b..8257efdf0ef 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 e4339064e28..0d0e25a4775 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 26979b3226e..f2c4cd669cf 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;
--
2.11.0
More information about the wine-devel
mailing list