diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 6c9cb42d..4a739636 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "e3bd659be9b2868b121857fb2643d775bbf0d8c7" + echo "9ba058e94c2662f5296c95adeafd29c59b137249" } # Show version information @@ -7449,7 +7449,6 @@ if test "$enable_wined3d_CSMT_Main" -eq 1; then patch_apply wined3d-CSMT_Main/0112-wined3d-Don-t-discard-new-buffers.patch patch_apply wined3d-CSMT_Main/0113-wined3d-Don-t-try-to-sync-VBOs-manually-on-OSX-with-.patch patch_apply wined3d-CSMT_Main/0114-wined3d-Only-discard-buffers-that-are-in-use.patch - patch_apply wined3d-CSMT_Main/0115-wined3d-Destroy-samplers-through-the-command-stream.patch patch_apply wined3d-CSMT_Main/0116-wined3d-Destroy-shader-resource-views-through-the-CS.patch patch_apply wined3d-CSMT_Main/0117-wined3d-Send-getdc-and-releasedc-through-the-command.patch patch_apply wined3d-CSMT_Main/0118-wined3d-Ignore-WINED3D_MAP_NO_DIRTY_UPDATE-in-resour.patch @@ -7584,7 +7583,6 @@ if test "$enable_wined3d_CSMT_Main" -eq 1; then echo '+ { "Stefan Dösinger", "wined3d: Don'\''t discard new buffers.", 1 },'; echo '+ { "Stefan Dösinger", "wined3d: Don'\''t try to sync VBOs manually on OSX with CSMT.", 1 },'; echo '+ { "Stefan Dösinger", "wined3d: Only discard buffers that are in use.", 1 },'; - echo '+ { "Stefan Dösinger", "wined3d: Destroy samplers through the command stream.", 1 },'; echo '+ { "Stefan Dösinger", "wined3d: Destroy shader resource views through the CS.", 1 },'; echo '+ { "Stefan Dösinger", "wined3d: Send getdc and releasedc through the command stream.", 1 },'; echo '+ { "Stefan Dösinger", "wined3d: Ignore WINED3D_MAP_NO_DIRTY_UPDATE in resource_map.", 1 },'; diff --git a/patches/wined3d-CSMT_Main/0012-wined3d-Wait-for-the-cs-before-destroying-objects.patch b/patches/wined3d-CSMT_Main/0012-wined3d-Wait-for-the-cs-before-destroying-objects.patch index 20765ba5..5df615f5 100644 --- a/patches/wined3d-CSMT_Main/0012-wined3d-Wait-for-the-cs-before-destroying-objects.patch +++ b/patches/wined3d-CSMT_Main/0012-wined3d-Wait-for-the-cs-before-destroying-objects.patch @@ -1,4 +1,4 @@ -From 914b61d3d8b4a6c680ed6bfe0f3b614a7c32c320 Mon Sep 17 00:00:00 2001 +From 9c7a85f85462a459d1a4aad3b97bd0542acc9f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Wed, 3 Apr 2013 18:01:34 +0200 Subject: wined3d: Wait for the cs before destroying objects @@ -16,10 +16,10 @@ the CS. 6 files changed, 25 insertions(+) diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c -index 054c67c..2ae620c 100644 +index e851ec9..e99e66d 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c -@@ -557,6 +557,12 @@ ULONG CDECL wined3d_buffer_decref(struct wined3d_buffer *buffer) +@@ -549,6 +549,12 @@ ULONG CDECL wined3d_buffer_decref(struct wined3d_buffer *buffer) if (!refcount) { @@ -33,10 +33,10 @@ index 054c67c..2ae620c 100644 { context = context_acquire(buffer->resource.device, NULL); diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index d92ce21..fe96c38 100644 +index 3bcbf19..185def9 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c -@@ -1279,12 +1279,14 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = +@@ -1322,12 +1322,14 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = { wined3d_cs_st_require_space, wined3d_cs_st_submit, @@ -52,10 +52,10 @@ index d92ce21..fe96c38 100644 /* FIXME: wined3d_device_uninit_3d() should either flush and wait, or be an diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c -index 0ee045f..21ecdd5 100644 +index 05eae08..975a927 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -2578,6 +2578,11 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) +@@ -2664,6 +2664,11 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) if (!refcount) { @@ -64,14 +64,14 @@ index 0ee045f..21ecdd5 100644 + FIXME("Waiting for cs.\n"); + shader->device->cs->ops->finish(shader->device->cs); + } - shader_cleanup(shader); shader->parent_ops->wined3d_object_destroyed(shader->parent); - HeapFree(GetProcessHeap(), 0, shader); + wined3d_cs_emit_destroy_object(shader->device->cs, wined3d_shader_destroy_object, shader); + } diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c -index 708470e..0c7fca1 100644 +index cdb7636..ecabc60 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c -@@ -399,6 +399,12 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture) +@@ -479,6 +479,12 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture) TRACE("texture %p.\n", texture); @@ -85,10 +85,10 @@ index 708470e..0c7fca1 100644 { if (!(buffer_object = texture->sub_resources[i].buffer_object)) diff --git a/dlls/wined3d/vertexdeclaration.c b/dlls/wined3d/vertexdeclaration.c -index 9eb5907..601a5f5 100644 +index c8704e9..fcd637d 100644 --- a/dlls/wined3d/vertexdeclaration.c +++ b/dlls/wined3d/vertexdeclaration.c -@@ -58,6 +58,11 @@ ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration +@@ -66,6 +66,11 @@ ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration if (!refcount) { @@ -97,14 +97,14 @@ index 9eb5907..601a5f5 100644 + FIXME("Waiting for cs.\n"); + declaration->device->cs->ops->finish(declaration->device->cs); + } - HeapFree(GetProcessHeap(), 0, declaration->elements); declaration->parent_ops->wined3d_object_destroyed(declaration->parent); - HeapFree(GetProcessHeap(), 0, declaration); + wined3d_cs_emit_destroy_object(declaration->device->cs, + wined3d_vertex_declaration_destroy_object, declaration); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 4e3a326..973c512 100644 +index 29f218e..00b4db7 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -2879,6 +2879,7 @@ struct wined3d_cs_ops +@@ -2938,6 +2938,7 @@ struct wined3d_cs_ops { void *(*require_space)(struct wined3d_cs *cs, size_t size); void (*submit)(struct wined3d_cs *cs); diff --git a/patches/wined3d-CSMT_Main/0091-wined3d-Destroy-vertex-declarations-through-the-CS.patch b/patches/wined3d-CSMT_Main/0091-wined3d-Destroy-vertex-declarations-through-the-CS.patch index 6b1f0d20..43da82ca 100644 --- a/patches/wined3d-CSMT_Main/0091-wined3d-Destroy-vertex-declarations-through-the-CS.patch +++ b/patches/wined3d-CSMT_Main/0091-wined3d-Destroy-vertex-declarations-through-the-CS.patch @@ -1,32 +1,17 @@ -From 60b42d6c2c6d5d2ce0dde5925a5873a4a051842e Mon Sep 17 00:00:00 2001 +From 8c808d86f613798096da3f113415f2358c63d6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Wed, 31 Jul 2013 23:06:27 +0200 Subject: wined3d: Destroy vertex declarations through the CS --- - dlls/wined3d/vertexdeclaration.c | 17 ++++++++++------- - 1 file changed, 10 insertions(+), 7 deletions(-) + dlls/wined3d/vertexdeclaration.c | 5 ----- + 1 file changed, 5 deletions(-) diff --git a/dlls/wined3d/vertexdeclaration.c b/dlls/wined3d/vertexdeclaration.c -index 3349f4f..808e092 100644 +index fcd637d..c8704e9 100644 --- a/dlls/wined3d/vertexdeclaration.c +++ b/dlls/wined3d/vertexdeclaration.c -@@ -50,6 +50,14 @@ ULONG CDECL wined3d_vertex_declaration_incref(struct wined3d_vertex_declaration - return refcount; - } - -+static void wined3d_vertex_declaration_destroy_object(void *object) -+{ -+ struct wined3d_vertex_declaration *declaration = object; -+ -+ HeapFree(GetProcessHeap(), 0, declaration->elements); -+ HeapFree(GetProcessHeap(), 0, declaration); -+} -+ - ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration) - { - ULONG refcount = InterlockedDecrement(&declaration->ref); -@@ -58,14 +66,9 @@ ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration +@@ -66,11 +66,6 @@ ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration if (!refcount) { @@ -35,14 +20,9 @@ index 3349f4f..808e092 100644 - FIXME("Waiting for cs.\n"); - declaration->device->cs->ops->finish(declaration->device->cs); - } -- HeapFree(GetProcessHeap(), 0, declaration->elements); -+ const struct wined3d_device *device = declaration->device; declaration->parent_ops->wined3d_object_destroyed(declaration->parent); -- HeapFree(GetProcessHeap(), 0, declaration); -+ wined3d_cs_emit_destroy_object(device->cs, wined3d_vertex_declaration_destroy_object, declaration); - } - - return refcount; + wined3d_cs_emit_destroy_object(declaration->device->cs, + wined3d_vertex_declaration_destroy_object, declaration); -- 2.8.0 diff --git a/patches/wined3d-CSMT_Main/0092-wined3d-Destroy-shaders-through-the-CS.patch b/patches/wined3d-CSMT_Main/0092-wined3d-Destroy-shaders-through-the-CS.patch index 64ef72f0..96014e37 100644 --- a/patches/wined3d-CSMT_Main/0092-wined3d-Destroy-shaders-through-the-CS.patch +++ b/patches/wined3d-CSMT_Main/0092-wined3d-Destroy-shaders-through-the-CS.patch @@ -1,32 +1,17 @@ -From 2bba243cce7043d8cbac3f670d994a032db0fc77 Mon Sep 17 00:00:00 2001 +From df9cd44711651586d8aeabd4f4dde47f5bd1801b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Wed, 31 Jul 2013 23:18:28 +0200 Subject: wined3d: Destroy shaders through the CS --- - dlls/wined3d/shader.c | 18 +++++++++++------- - 1 file changed, 11 insertions(+), 7 deletions(-) + dlls/wined3d/shader.c | 5 ----- + 1 file changed, 5 deletions(-) diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c -index 72ea8bc..f5e29b4 100644 +index 975a927..05eae08 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -2612,6 +2612,14 @@ ULONG CDECL wined3d_shader_incref(struct wined3d_shader *shader) - return refcount; - } - -+static void wined3d_shader_destroy_object(void *object) -+{ -+ struct wined3d_shader *shader = object; -+ -+ shader_cleanup(shader); -+ HeapFree(GetProcessHeap(), 0, shader); -+} -+ - ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) - { - ULONG refcount = InterlockedDecrement(&shader->ref); -@@ -2620,14 +2628,10 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) +@@ -2664,11 +2664,6 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) if (!refcount) { @@ -35,15 +20,9 @@ index 72ea8bc..f5e29b4 100644 - FIXME("Waiting for cs.\n"); - shader->device->cs->ops->finish(shader->device->cs); - } -- shader_cleanup(shader); -+ const struct wined3d_device *device = shader->device; -+ shader->parent_ops->wined3d_object_destroyed(shader->parent); -- HeapFree(GetProcessHeap(), 0, shader); -+ wined3d_cs_emit_destroy_object(device->cs, wined3d_shader_destroy_object, shader); + wined3d_cs_emit_destroy_object(shader->device->cs, wined3d_shader_destroy_object, shader); } - - return refcount; -- 2.8.0 diff --git a/patches/wined3d-CSMT_Main/0115-wined3d-Destroy-samplers-through-the-command-stream.patch b/patches/wined3d-CSMT_Main/0115-wined3d-Destroy-samplers-through-the-command-stream.patch deleted file mode 100644 index d79ccd76..00000000 --- a/patches/wined3d-CSMT_Main/0115-wined3d-Destroy-samplers-through-the-command-stream.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 4dc96ab42f9d44017ed6510922c1a324a3e1f2bd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Stefan=20D=C3=B6singer?= -Date: Thu, 27 Aug 2015 23:43:08 +0200 -Subject: wined3d: Destroy samplers through the command stream. - ---- - dlls/wined3d/sampler.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c -index 865198b..8c73466 100644 ---- a/dlls/wined3d/sampler.c -+++ b/dlls/wined3d/sampler.c -@@ -33,22 +33,28 @@ ULONG CDECL wined3d_sampler_incref(struct wined3d_sampler *sampler) - return refcount; - } - -+static void wined3d_sampler_destroy_object(void *object) -+{ -+ struct wined3d_sampler *sampler = object; -+ struct wined3d_context *context = context_acquire(sampler->device, NULL); -+ const struct wined3d_gl_info *gl_info = context->gl_info; -+ -+ GL_EXTCALL(glDeleteSamplers(1, &sampler->name)); -+ context_release(context); -+ -+ HeapFree(GetProcessHeap(), 0, sampler); -+} -+ - ULONG CDECL wined3d_sampler_decref(struct wined3d_sampler *sampler) - { - ULONG refcount = InterlockedDecrement(&sampler->refcount); -- const struct wined3d_gl_info *gl_info; -- struct wined3d_context *context; - - TRACE("%p decreasing refcount to %u.\n", sampler, refcount); - - if (!refcount) - { -- context = context_acquire(sampler->device, NULL); -- gl_info = context->gl_info; -- GL_EXTCALL(glDeleteSamplers(1, &sampler->name)); -- context_release(context); -- -- HeapFree(GetProcessHeap(), 0, sampler); -+ struct wined3d_device *device = sampler->device; -+ wined3d_cs_emit_destroy_object(device->cs, wined3d_sampler_destroy_object, sampler); - } - - return refcount; --- -2.8.0 - diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index f0e06a26..8188125b 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -3844,40 +3844,7 @@ diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c --- a/dlls/wined3d/sampler.c +++ b/dlls/wined3d/sampler.c -@@ -33,6 +33,7 @@ - return refcount; - } - -+#if defined(STAGING_CSMT) - static void wined3d_sampler_destroy_object(void *object) - { - struct wined3d_sampler *sampler = object; -@@ -55,6 +56,24 @@ - { - struct wined3d_device *device = sampler->device; - wined3d_cs_emit_destroy_object(device->cs, wined3d_sampler_destroy_object, sampler); -+#else /* STAGING_CSMT */ -+ULONG CDECL wined3d_sampler_decref(struct wined3d_sampler *sampler) -+{ -+ ULONG refcount = InterlockedDecrement(&sampler->refcount); -+ const struct wined3d_gl_info *gl_info; -+ struct wined3d_context *context; -+ -+ TRACE("%p decreasing refcount to %u.\n", sampler, refcount); -+ -+ if (!refcount) -+ { -+ context = context_acquire(sampler->device, NULL); -+ gl_info = context->gl_info; -+ GL_EXTCALL(glDeleteSamplers(1, &sampler->name)); -+ context_release(context); -+ -+ HeapFree(GetProcessHeap(), 0, sampler); -+#endif /* STAGING_CSMT */ - } - - return refcount; -@@ -67,6 +86,7 @@ +@@ -66,6 +66,7 @@ return sampler->parent; } @@ -3885,7 +3852,7 @@ diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c void wined3d_sampler_init(struct wined3d_sampler *sampler) { const struct wined3d_gl_info *gl_info; -@@ -98,6 +118,45 @@ +@@ -97,6 +98,45 @@ wined3d_gl_compare_func(sampler->desc.comparison_func))); if ((context->d3d_info->wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL) && gl_info->supported[EXT_TEXTURE_SRGB_DECODE] && !sampler->desc.srgb_decode) @@ -3931,7 +3898,7 @@ diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c GL_EXTCALL(glSamplerParameteri(sampler->name, GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT)); checkGLcall("sampler creation"); -@@ -109,12 +168,14 @@ +@@ -108,12 +148,14 @@ HRESULT CDECL wined3d_sampler_create(struct wined3d_device *device, const struct wined3d_sampler_desc *desc, void *parent, struct wined3d_sampler **sampler) { @@ -3946,7 +3913,7 @@ diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c struct wined3d_sampler *object; TRACE("device %p, desc %p, parent %p, sampler %p.\n", device, desc, parent, sampler); -@@ -135,6 +196,7 @@ +@@ -134,6 +176,7 @@ if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY; @@ -3954,7 +3921,7 @@ diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c object->refcount = 1; object->device = device; object->parent = parent; -@@ -143,6 +205,9 @@ +@@ -142,6 +185,9 @@ wined3d_sampler_init(object); else wined3d_cs_emit_sampler_init(device->cs, object); @@ -3967,40 +3934,7 @@ diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -2650,6 +2650,7 @@ - return refcount; - } - -+#if defined(STAGING_CSMT) - static void wined3d_shader_destroy_object(void *object) - { - struct wined3d_shader *shader = object; -@@ -2658,6 +2659,7 @@ - HeapFree(GetProcessHeap(), 0, shader); - } - -+#endif /* STAGING_CSMT */ - ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) - { - ULONG refcount = InterlockedDecrement(&shader->ref); -@@ -2666,10 +2668,16 @@ - - if (!refcount) - { -+#if defined(STAGING_CSMT) - const struct wined3d_device *device = shader->device; - - shader->parent_ops->wined3d_object_destroyed(shader->parent); - wined3d_cs_emit_destroy_object(device->cs, wined3d_shader_destroy_object, shader); -+#else /* STAGING_CSMT */ -+ shader_cleanup(shader); -+ shader->parent_ops->wined3d_object_destroyed(shader->parent); -+ HeapFree(GetProcessHeap(), 0, shader); -+#endif /* STAGING_CSMT */ - } - - return refcount; -@@ -2990,7 +2998,11 @@ +@@ -2986,7 +2986,11 @@ UINT i; memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ @@ -6612,41 +6546,6 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c if (d3d_info->vs_clipping || !use_vs(state) || !state->render_states[WINED3D_RS_CLIPPING] || !state->render_states[WINED3D_RS_CLIPPLANEENABLE]) { -diff --git a/dlls/wined3d/vertexdeclaration.c b/dlls/wined3d/vertexdeclaration.c ---- a/dlls/wined3d/vertexdeclaration.c -+++ b/dlls/wined3d/vertexdeclaration.c -@@ -50,6 +50,7 @@ - return refcount; - } - -+#if defined(STAGING_CSMT) - static void wined3d_vertex_declaration_destroy_object(void *object) - { - struct wined3d_vertex_declaration *declaration = object; -@@ -58,6 +59,7 @@ - HeapFree(GetProcessHeap(), 0, declaration); - } - -+#endif /* STAGING_CSMT */ - ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration) - { - ULONG refcount = InterlockedDecrement(&declaration->ref); -@@ -66,9 +68,15 @@ - - if (!refcount) - { -+#if defined(STAGING_CSMT) - const struct wined3d_device *device = declaration->device; - declaration->parent_ops->wined3d_object_destroyed(declaration->parent); - wined3d_cs_emit_destroy_object(device->cs, wined3d_vertex_declaration_destroy_object, declaration); -+#else /* STAGING_CSMT */ -+ HeapFree(GetProcessHeap(), 0, declaration->elements); -+ declaration->parent_ops->wined3d_object_destroyed(declaration->parent); -+ HeapFree(GetProcessHeap(), 0, declaration); -+#endif /* STAGING_CSMT */ - } - - return refcount; diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c --- a/dlls/wined3d/volume.c +++ b/dlls/wined3d/volume.c