Henri Verbeet : wined3d: Only create the ARBfp blitter if creating the GLSL blitter failed.
Module: wine Branch: master Commit: 6fc027e5acfb7f7c7f50af421658e5442e896588 URL: https://source.winehq.org/git/wine.git/?a=commit;h=6fc027e5acfb7f7c7f50af421... Author: Henri Verbeet <hverbeet(a)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(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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;
participants (1)
-
Alexandre Julliard