[PATCH 4/5] wined3d: Get rid of GL_APPLE_client_storage support.
Henri Verbeet
hverbeet at codeweavers.com
Tue Jan 5 08:04:56 CST 2016
Once upon a time this extention helped reduce address space usage on MacOS,
although at the cost of obscure driver bugs. These days it just seems to make
things worse.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/directx.c | 2 --
dlls/wined3d/surface.c | 38 +++---------------------
dlls/wined3d/texture.c | 65 +++---------------------------------------
dlls/wined3d/volume.c | 3 --
dlls/wined3d/wined3d_gl.h | 1 -
dlls/wined3d/wined3d_private.h | 5 +---
6 files changed, 9 insertions(+), 105 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 4b4209a..ed23cd1 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -101,7 +101,6 @@ struct wined3d_extension_map
static const struct wined3d_extension_map gl_extension_map[] =
{
/* APPLE */
- {"GL_APPLE_client_storage", APPLE_CLIENT_STORAGE },
{"GL_APPLE_fence", APPLE_FENCE },
{"GL_APPLE_float_pixels", APPLE_FLOAT_PIXELS },
{"GL_APPLE_flush_buffer_range", APPLE_FLUSH_BUFFER_RANGE },
@@ -1599,7 +1598,6 @@ static enum wined3d_gl_vendor wined3d_guess_gl_vendor(const struct wined3d_gl_in
* the chance that other implementations support them is rather small since Win32 QuickTime uses
* DirectDraw, not OpenGL. */
if (gl_info->supported[APPLE_FENCE]
- && gl_info->supported[APPLE_CLIENT_STORAGE]
&& gl_info->supported[APPLE_YCBCR_422])
return GL_VENDOR_APPLE;
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index f8a1ba1..6b5f33e 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -589,39 +589,15 @@ static void surface_evict_sysmem(struct wined3d_surface *surface)
{
/* In some conditions the surface memory must not be freed:
* WINED3D_TEXTURE_CONVERTED: Converting the data back would take too long
- * WINED3D_TEXTURE_DYNAMIC_MAP: Avoid freeing the data for performance
- * SFLAG_CLIENT: OpenGL uses our memory as backup */
- if (surface->resource.map_count || surface->flags & SFLAG_CLIENT
- || surface->container->flags & (WINED3D_TEXTURE_CONVERTED | WINED3D_TEXTURE_PIN_SYSMEM
- | WINED3D_TEXTURE_DYNAMIC_MAP))
+ * WINED3D_TEXTURE_DYNAMIC_MAP: Avoid freeing the data for performance */
+ if (surface->resource.map_count || surface->container->flags & (WINED3D_TEXTURE_CONVERTED
+ | WINED3D_TEXTURE_PIN_SYSMEM | WINED3D_TEXTURE_DYNAMIC_MAP))
return;
wined3d_resource_free_sysmem(&surface->resource);
surface_invalidate_location(surface, WINED3D_LOCATION_SYSMEM);
}
-static void surface_release_client_storage(struct wined3d_surface *surface)
-{
- struct wined3d_context *context = context_acquire(surface->resource.device, NULL);
- const struct wined3d_gl_info *gl_info = context->gl_info;
-
- if (surface->container->texture_rgb.name)
- {
- wined3d_texture_bind_and_dirtify(surface->container, context, FALSE);
- gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
- GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
- }
- if (surface->container->texture_srgb.name)
- {
- wined3d_texture_bind_and_dirtify(surface->container, context, TRUE);
- gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
- GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
- }
- wined3d_texture_force_reload(surface->container);
-
- context_release(context);
-}
-
static BOOL surface_use_pbo(const struct wined3d_surface *surface)
{
const struct wined3d_gl_info *gl_info = &surface->resource.device->adapter->gl_info;
@@ -2643,13 +2619,7 @@ HRESULT CDECL wined3d_surface_getdc(struct wined3d_surface *surface, HDC *dc)
/* Create a DIB section if there isn't a dc yet. */
if (!surface->hDC)
{
- if (surface->flags & SFLAG_CLIENT)
- {
- surface_load_location(surface, context, WINED3D_LOCATION_SYSMEM);
- surface_release_client_storage(surface);
- }
- hr = surface_create_dib_section(surface);
- if (FAILED(hr))
+ if (FAILED(hr = surface_create_dib_section(surface)))
{
if (context)
context_release(context);
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 1d5bec7..364294b 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -863,7 +863,6 @@ static void texture2d_prepare_texture(struct wined3d_texture *texture, struct wi
struct wined3d_surface *surface = surface_from_resource(texture->sub_resources[i]);
GLsizei height = surface->pow2Height;
GLsizei width = surface->pow2Width;
- const BYTE *mem = NULL;
if (texture->resource.format_flags & WINED3DFMT_FLAG_HEIGHT_SCALE)
{
@@ -874,48 +873,9 @@ static void texture2d_prepare_texture(struct wined3d_texture *texture, struct wi
TRACE("surface %p, target %#x, level %d, width %d, height %d.\n",
surface, surface->texture_target, surface->texture_level, width, height);
- if (gl_info->supported[APPLE_CLIENT_STORAGE])
- {
- if (surface->flags & (SFLAG_NONPOW2 | SFLAG_DIBSECTION)
- || texture->flags & WINED3D_TEXTURE_CONVERTED
- || !surface->resource.heap_memory)
- {
- /* In some cases we want to disable client storage.
- * SFLAG_NONPOW2 has a bigger opengl texture than the client memory, and different pitches
- * SFLAG_DIBSECTION: Dibsections may have read / write protections on the memory. Avoid issues...
- * WINED3D_TEXTURE_CONVERTED: The conversion destination memory is freed after loading the surface
- * heap_memory == NULL: Not defined in the extension. Seems to disable client storage effectively
- */
- surface->flags &= ~SFLAG_CLIENT;
- }
- else
- {
- surface->flags |= SFLAG_CLIENT;
- mem = surface->resource.heap_memory;
-
- gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
- checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)");
- }
- }
-
- if (texture->resource.format_flags & WINED3DFMT_FLAG_COMPRESSED && mem)
- {
- GL_EXTCALL(glCompressedTexImage2D(surface->texture_target, surface->texture_level,
- internal, width, height, 0, surface->resource.size, mem));
- checkGLcall("glCompressedTexImage2D");
- }
- else
- {
- gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
- internal, width, height, 0, format->glFormat, format->glType, mem);
- checkGLcall("glTexImage2D");
- }
-
- if (mem)
- {
- gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
- checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE)");
- }
+ gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
+ internal, width, height, 0, format->glFormat, format->glType, NULL);
+ checkGLcall("glTexImage2D");
}
}
@@ -1291,29 +1251,12 @@ static void texture3d_prepare_texture(struct wined3d_texture *texture, struct wi
for (i = 0; i < sub_count; ++i)
{
struct wined3d_volume *volume = volume_from_resource(texture->sub_resources[i]);
- void *mem = NULL;
-
- if (gl_info->supported[APPLE_CLIENT_STORAGE] && !format->convert
- && volume_prepare_system_memory(volume))
- {
- TRACE("Enabling GL_UNPACK_CLIENT_STORAGE_APPLE for volume %p\n", volume);
- gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
- checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)");
- mem = volume->resource.heap_memory;
- volume->flags |= WINED3D_VFLAG_CLIENT_STORAGE;
- }
GL_EXTCALL(glTexImage3D(GL_TEXTURE_3D, volume->texture_level,
srgb ? format->glGammaInternal : format->glInternal,
volume->resource.width, volume->resource.height, volume->resource.depth,
- 0, format->glFormat, format->glType, mem));
+ 0, format->glFormat, format->glType, NULL));
checkGLcall("glTexImage3D");
-
- if (mem)
- {
- gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
- checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE)");
- }
}
}
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 0231c23..be6fab4 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -230,8 +230,6 @@ static BOOL wined3d_volume_can_evict(const struct wined3d_volume *volume)
return FALSE;
if (volume->resource.format->convert)
return FALSE;
- if (volume->flags & WINED3D_VFLAG_CLIENT_STORAGE)
- return FALSE;
return TRUE;
}
@@ -455,7 +453,6 @@ static void volume_unload(struct wined3d_resource *resource)
}
/* The texture name is managed by the container. */
- volume->flags &= ~WINED3D_VFLAG_CLIENT_STORAGE;
resource_unload(resource);
}
diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h
index 437f62f..b66f6b9 100644
--- a/dlls/wined3d/wined3d_gl.h
+++ b/dlls/wined3d/wined3d_gl.h
@@ -38,7 +38,6 @@ enum wined3d_gl_extension
WINED3D_GL_EXT_NONE,
/* APPLE */
- APPLE_CLIENT_STORAGE,
APPLE_FENCE,
APPLE_FLOAT_PIXELS,
APPLE_FLUSH_BUFFER_RANGE,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 288d683..5783594 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2337,14 +2337,12 @@ void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
const char *wined3d_debug_location(DWORD location) DECLSPEC_HIDDEN;
-#define WINED3D_VFLAG_CLIENT_STORAGE 0x00000001
-
struct wined3d_volume
{
struct wined3d_resource resource;
struct wined3d_texture *container;
- DWORD flags, locations;
+ DWORD locations;
GLint texture_level;
DWORD download_count;
GLuint pbo;
@@ -2497,7 +2495,6 @@ void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3
#define SFLAG_DIBSECTION 0x00000001 /* Has a DIB section attached for GetDC. */
#define SFLAG_DISCARD 0x00000002 /* ??? */
#define SFLAG_NONPOW2 0x00000004 /* Surface sizes are not a power of 2 */
-#define SFLAG_CLIENT 0x00000010 /* GL_APPLE_client_storage is used with this surface. */
#define SFLAG_DCINUSE 0x00000020 /* Set between GetDC and ReleaseDC calls. */
struct wined3d_sampler
--
2.1.4
More information about the wine-patches
mailing list