Remove several d3d patchsets:

* wined3d-Core_Context: fixed by 62651d65f4f8e4dc6e1f4fb5d589526613d419aa
* wined3d-Limit_Vram: This patch is a no-op; LONG_MAX is 0x7fffffffffffffff on 64-bit.
* wined3d-Revert_Surface_Blt: fixed by d38076fd57a50452b17d61f771688bbfcd3a5563
* wined3d-WINED3DFMT_R32G32_UINT: fixed by af1be967a0b0262a980e9bfbdff107c1d6db7e8d
* wined3d-sample_c_lz: fixed by ce8610cea58ed1ba9d8f17857e507d9d6c30132d
* wined3d-CSMT_Helper, wined3d-CSMT_Main: Remove CSMT_Helper and remove toggle for CSMT_Main. CSMT is in Wine and configurable.
	Also remove patches 0008, 0019, 0034, which are no-ops and not useful.
* makedep-PARENTSPEC: Remove patch which was only needed for wined3d-csmt.
This commit is contained in:
Zebediah Figura
2018-03-27 19:57:14 -05:00
parent b7119079a3
commit 5876a3f782
19 changed files with 46 additions and 1728 deletions

View File

@@ -1,67 +0,0 @@
From 443951f5ef3359b18334b50d72724f99ce77f72e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Mon, 29 Apr 2013 18:49:53 +0200
Subject: wined3d: Send blits through the command stream.
This needs more work. This patch breaks error handling, and the split
between surface_blt and surface_blt_ugly isn't particularly nice.
---
dlls/wined3d/device.c | 19 ++++++++++---------
dlls/wined3d/texture.c | 10 ++++++++--
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index cf446c7cd17..b3fea23c821 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4241,16 +4241,17 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
return WINED3DERR_INVALIDCALL;
}
- if (dst_texture->sub_resources[dst_sub_resource_idx].map_count)
+ if (dst_texture->sub_resources[dst_sub_resource_idx].map_count ||
+ src_texture->sub_resources[src_sub_resource_idx].map_count)
{
- WARN("Destination sub-resource %u is mapped.\n", dst_sub_resource_idx);
- return WINED3DERR_INVALIDCALL;
- }
-
- if (src_texture->sub_resources[src_sub_resource_idx].map_count)
- {
- WARN("Source sub-resource %u is mapped.\n", src_sub_resource_idx);
- return WINED3DERR_INVALIDCALL;
+ struct wined3d_device *device = dst_texture->resource.device;
+ device->cs->ops->finish(device->cs, WINED3D_CS_QUEUE_DEFAULT);
+ if (dst_texture->sub_resources[dst_sub_resource_idx].map_count ||
+ src_texture->sub_resources[src_sub_resource_idx].map_count)
+ {
+ WARN("Destination or source sub-resource is mapped.\n");
+ return WINEDDERR_SURFACEBUSY;
+ }
}
if (!src_box)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index a77c9835bbb..55cc49be5e0 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -3231,8 +3231,14 @@ HRESULT CDECL wined3d_texture_blt(struct wined3d_texture *dst_texture, unsigned
if (dst_texture->sub_resources[dst_sub_resource_idx].map_count
|| src_texture->sub_resources[src_sub_resource_idx].map_count)
{
- WARN("Sub-resource is busy, returning WINEDDERR_SURFACEBUSY.\n");
- return WINEDDERR_SURFACEBUSY;
+ struct wined3d_device *device = dst_texture->resource.device;
+ device->cs->ops->finish(device->cs, WINED3D_CS_QUEUE_DEFAULT);
+ if (dst_texture->sub_resources[dst_sub_resource_idx].map_count
+ || (src_texture && src_texture->sub_resources[src_sub_resource_idx].map_count))
+ {
+ WARN("Sub-resource is busy, returning WINEDDERR_SURFACEBUSY.\n");
+ return WINEDDERR_SURFACEBUSY;
+ }
}
if ((src_format_flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
--
2.12.2

View File

@@ -1,293 +0,0 @@
From fda0041ebe98a2da3a43dad2443812406f2eafd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Fri, 30 Aug 2013 17:00:35 +0200
Subject: [PATCH] wined3d: Wrap GL BOs in a structure
The idea is to use those structures for mapping through the command stream and caching
them for DISCARD maps.
---
dlls/wined3d/device.c | 53 ++++++++++++++++++++++++++++++++++++++++
dlls/wined3d/surface.c | 2 +-
dlls/wined3d/texture.c | 55 ++++++++++++++++++++----------------------
dlls/wined3d/wined3d_private.h | 14 ++++++++++-
4 files changed, 93 insertions(+), 31 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 9472ffa..656febf 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5307,3 +5307,56 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
else
return CallWindowProcA(proc, window, message, wparam, lparam);
}
+
+/* Context activation is done by the caller */
+struct wined3d_gl_bo *wined3d_device_get_bo(struct wined3d_device *device, UINT size, GLenum gl_usage,
+ GLenum type_hint, struct wined3d_context *context)
+{
+ struct wined3d_gl_bo *ret;
+ const struct wined3d_gl_info *gl_info;
+
+ TRACE("device %p, size %u, gl_usage %u, type_hint %u\n", device, size, gl_usage,
+ type_hint);
+
+ ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret));
+ if(!ret)
+ return NULL;
+ ret->type_hint = type_hint;
+ ret->size = size;
+ ret->usage = gl_usage;
+
+ gl_info = context->gl_info;
+
+ GL_EXTCALL(glGenBuffers(1, &ret->name));
+ if (type_hint == GL_ELEMENT_ARRAY_BUFFER)
+ context_invalidate_state(context, STATE_INDEXBUFFER);
+ GL_EXTCALL(glBindBuffer(type_hint, ret->name));
+ GL_EXTCALL(glBufferData(type_hint, size, NULL, gl_usage));
+ GL_EXTCALL(glBindBuffer(type_hint, 0));
+ checkGLcall("Create buffer object");
+
+ TRACE("Successfully created and set up buffer %u\n", ret->name);
+ return ret;
+}
+
+/* Context activation is done by the caller */
+static void wined3d_device_destroy_bo(struct wined3d_device *device, const struct wined3d_context *context,
+ struct wined3d_gl_bo *bo)
+{
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ TRACE("device %p, bo %p, GL bo %u\n", device, bo, bo->name);
+
+ GL_EXTCALL(glDeleteBuffers(1, &bo->name));
+ checkGLcall("glDeleteBuffers");
+
+ HeapFree(GetProcessHeap(), 0, bo);
+}
+
+/* Context activation is done by the caller */
+void wined3d_device_release_bo(struct wined3d_device *device, struct wined3d_gl_bo *bo,
+ const struct wined3d_context *context)
+{
+ TRACE("device %p, bo %p, GL bo %u\n", device, bo, bo->name);
+
+ wined3d_device_destroy_bo(device, context, bo);
+}
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 30f4936..a27b623 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2232,7 +2232,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
/* Don't use PBOs for converted surfaces. During PBO conversion we look at
* WINED3D_TEXTURE_CONVERTED but it isn't set (yet) in all cases it is
* getting called. */
- if (conversion && sub_resource->buffer_object)
+ if (conversion && sub_resource->buffer)
{
TRACE("Removing the pbo attached to texture %p, %u.\n", texture, sub_resource_idx);
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 526bfb1..89313ca 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -321,7 +321,7 @@ void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int su
if (locations & WINED3D_LOCATION_BUFFER)
{
data->addr = NULL;
- data->buffer_object = sub_resource->buffer_object;
+ data->buffer_object = sub_resource->buffer->name;
return;
}
if (locations & WINED3D_LOCATION_USER_MEMORY)
@@ -345,18 +345,17 @@ void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int su
/* Context activation is done by the caller. */
static void wined3d_texture_remove_buffer_object(struct wined3d_texture *texture,
- unsigned int sub_resource_idx, const struct wined3d_gl_info *gl_info)
+ unsigned int sub_resource_idx, struct wined3d_context *context)
{
- GLuint *buffer_object = &texture->sub_resources[sub_resource_idx].buffer_object;
+ struct wined3d_gl_bo *buffer = texture->sub_resources[sub_resource_idx].buffer;
+ GLuint name = buffer->name;
- GL_EXTCALL(glDeleteBuffers(1, buffer_object));
- checkGLcall("glDeleteBuffers");
+ wined3d_device_release_bo(texture->resource.device, buffer, context);
+ texture->sub_resources[sub_resource_idx].buffer = NULL;
+ wined3d_texture_invalidate_location(texture, sub_resource_idx, WINED3D_LOCATION_BUFFER);
TRACE("Deleted buffer object %u for texture %p, sub-resource %u.\n",
- *buffer_object, texture, sub_resource_idx);
-
- wined3d_texture_invalidate_location(texture, sub_resource_idx, WINED3D_LOCATION_BUFFER);
- *buffer_object = 0;
+ name, texture, sub_resource_idx);
}
static void wined3d_texture_update_map_binding(struct wined3d_texture *texture)
@@ -376,7 +375,7 @@ static void wined3d_texture_update_map_binding(struct wined3d_texture *texture)
&& !wined3d_texture_load_location(texture, i, context, map_binding))
ERR("Failed to load location %s.\n", wined3d_debug_location(map_binding));
if (texture->resource.map_binding == WINED3D_LOCATION_BUFFER)
- wined3d_texture_remove_buffer_object(texture, i, context->gl_info);
+ wined3d_texture_remove_buffer_object(texture, i, context);
}
if (context)
@@ -719,17 +718,17 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture)
const struct wined3d_gl_info *gl_info = NULL;
struct wined3d_context *context = NULL;
struct wined3d_dc_info *dc_info;
- GLuint buffer_object;
+ struct wined3d_gl_bo *buffer;
unsigned int i;
TRACE("texture %p.\n", texture);
for (i = 0; i < sub_count; ++i)
{
- if (!(buffer_object = texture->sub_resources[i].buffer_object))
+ if (!(buffer = texture->sub_resources[i].buffer))
continue;
- TRACE("Deleting buffer object %u.\n", buffer_object);
+ TRACE("Deleting buffer object %u.\n", buffer->name);
/* We may not be able to get a context in wined3d_texture_cleanup() in
* general, but if a buffer object was previously created we can. */
@@ -739,7 +738,8 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture)
gl_info = context->gl_info;
}
- GL_EXTCALL(glDeleteBuffers(1, &buffer_object));
+ wined3d_device_release_bo(device, buffer, context);
+ texture->sub_resources[i].buffer = NULL;
}
if (!context && !list_empty(&texture->renderbuffers))
@@ -1545,22 +1545,19 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT
/* Context activation is done by the caller. */
static void wined3d_texture_prepare_buffer_object(struct wined3d_texture *texture,
- unsigned int sub_resource_idx, const struct wined3d_gl_info *gl_info)
+ unsigned int sub_resource_idx, struct wined3d_context *context)
{
struct wined3d_texture_sub_resource *sub_resource;
sub_resource = &texture->sub_resources[sub_resource_idx];
- if (sub_resource->buffer_object)
+ if (sub_resource->buffer)
return;
- GL_EXTCALL(glGenBuffers(1, &sub_resource->buffer_object));
- GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, sub_resource->buffer_object));
- GL_EXTCALL(glBufferData(GL_PIXEL_UNPACK_BUFFER, sub_resource->size, NULL, GL_STREAM_DRAW));
- GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0));
- checkGLcall("Create buffer object");
+ sub_resource->buffer = wined3d_device_get_bo(texture->resource.device,
+ sub_resource->size, GL_STREAM_DRAW, GL_PIXEL_UNPACK_BUFFER, context);
TRACE("Created buffer object %u for texture %p, sub-resource %u.\n",
- sub_resource->buffer_object, texture, sub_resource_idx);
+ sub_resource->buffer->name, texture, sub_resource_idx);
}
static void wined3d_texture_force_reload(struct wined3d_texture *texture)
@@ -1695,7 +1692,7 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
return TRUE;
case WINED3D_LOCATION_BUFFER:
- wined3d_texture_prepare_buffer_object(texture, sub_resource_idx, context->gl_info);
+ wined3d_texture_prepare_buffer_object(texture, sub_resource_idx, context);
return TRUE;
case WINED3D_LOCATION_TEXTURE_RGB:
@@ -2073,8 +2070,8 @@ static void wined3d_texture_unload(struct wined3d_resource *resource)
wined3d_texture_invalidate_location(texture, i, ~WINED3D_LOCATION_DISCARDED);
}
- if (sub_resource->buffer_object)
- wined3d_texture_remove_buffer_object(texture, i, context->gl_info);
+ if (sub_resource->buffer)
+ wined3d_texture_remove_buffer_object(texture, i, context);
}
LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &texture->renderbuffers, struct wined3d_renderbuffer_entry, entry)
@@ -2372,7 +2369,7 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in
}
else if (sub_resource->locations & WINED3D_LOCATION_BUFFER)
{
- struct wined3d_const_bo_address data = {sub_resource->buffer_object, NULL};
+ struct wined3d_const_bo_address data = {sub_resource->buffer->name, NULL};
struct wined3d_box src_box;
wined3d_texture_bind_and_dirtify(texture, context,
@@ -2414,7 +2411,7 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in
case WINED3D_LOCATION_BUFFER:
if (sub_resource->locations & (WINED3D_LOCATION_TEXTURE_RGB | WINED3D_LOCATION_TEXTURE_SRGB))
{
- struct wined3d_bo_address data = {sub_resource->buffer_object, NULL};
+ struct wined3d_bo_address data = {sub_resource->buffer->name, NULL};
if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_RGB)
wined3d_texture_bind_and_dirtify(texture, context, FALSE);
@@ -2871,7 +2868,7 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in
}
else if (sub_resource->locations & WINED3D_LOCATION_BUFFER)
{
- struct wined3d_const_bo_address data = {sub_resource->buffer_object, NULL};
+ struct wined3d_const_bo_address data = {sub_resource->buffer->name, NULL};
struct wined3d_box src_box;
wined3d_texture_bind_and_dirtify(texture, context,
@@ -2921,7 +2918,7 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in
case WINED3D_LOCATION_BUFFER:
if (sub_resource->locations & (WINED3D_LOCATION_TEXTURE_RGB | WINED3D_LOCATION_TEXTURE_SRGB))
{
- struct wined3d_bo_address data = {sub_resource->buffer_object, NULL};
+ struct wined3d_bo_address data = {sub_resource->buffer->name, NULL};
if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_RGB)
wined3d_texture_bind_and_dirtify(texture, context, FALSE);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e98a100..af58836 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2896,6 +2896,14 @@ struct wined3d_dummy_textures
GLuint tex_2d_ms_array;
};
+struct wined3d_gl_bo
+{
+ GLuint name;
+ GLenum usage;
+ GLenum type_hint;
+ UINT size;
+};
+
#define WINED3D_UNMAPPED_STAGE ~0u
/* Multithreaded flag. Removed from the public header to signal that
@@ -2995,6 +3003,10 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN;
+struct wined3d_gl_bo *wined3d_device_get_bo(struct wined3d_device *device, UINT size, GLenum gl_usage,
+ GLenum type_hint, struct wined3d_context *context) DECLSPEC_HIDDEN;
+void wined3d_device_release_bo(struct wined3d_device *device, struct wined3d_gl_bo *bo,
+ const struct wined3d_context *context) DECLSPEC_HIDDEN;
static inline BOOL isStateDirty(const struct wined3d_context *context, DWORD state)
{
@@ -3194,7 +3206,7 @@ struct wined3d_texture
unsigned int map_count;
DWORD locations;
- GLuint buffer_object;
+ struct wined3d_gl_bo *buffer;
} sub_resources[1];
};
--
2.7.4

View File

@@ -1,27 +0,0 @@
From 9567ce39176fd1299f204ecc7a5254cbbe6b5484 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Thu, 4 Jul 2013 23:50:20 +0200
Subject: [PATCH] wined3d: Don't call glFinish before swapping
The code is probably not ready yet, so delay this patch until everything
is CSified. Right now I need it for performance testing.
---
dlls/wined3d/swapchain.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 26cd61e..610cc28 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -475,7 +475,7 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain,
if (swapchain->render_to_fbo)
swapchain_blit(swapchain, context, src_rect, dst_rect);
- if (swapchain->num_contexts > 1)
+ if (swapchain->num_contexts > 1 && !wined3d_settings.cs_multithreaded)
gl_info->gl_ops.gl.p_glFinish();
/* call wglSwapBuffers through the gl table to avoid confusing the Steam overlay */
--
2.7.4

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,10 @@
# based on https://github.com/stefand/wine
# sha1: 7309d0b07294bbceac28162201690b2132cc70fc
Fixes: [11674] Support for CSMT (command stream) to increase graphic performance
Apply-After: dlls/wined3d/*
Depends: wined3d-CSMT_Helper
IfDefined: STAGING_CSMT
# Known issues:
# https://bugs.wine-staging.com/buglist.cgi?component=Bugs&keywords=csmt%2C%20&keywords_type=allwords&list_id=3690&query_format=advanced&resolution=---
Depends: wined3d-Accounting
Depends: wined3d-DXTn
Depends: wined3d-QUERY_Stubs
Depends: d3d11-ID3D11Texture1D_Rebased
Depends: wined3d-Silence_FIXMEs
Depends: wined3d-UAV_Counters
Depends: wined3d-Dual_Source_Blending
Depends: d3d9-Tests
Depends: d3d11-Deferred_Context
Depends: ntdll-DllRedirects