From 1ff77100b8c705f98cb06741fd1a65a3af2f2cce Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 15 Feb 2017 03:40:50 +0100 Subject: [PATCH] Rebase against 8af23cb93e4e1cd3686984399cb50d755f5171e3. --- patches/patchinstall.sh | 2 +- ...ate_buffer_texture-create_texture_vi.patch | 103 ++++--- ...-GL-contexts-through-the-CS-in-reset.patch | 26 +- ...ined3d-Map-vertex-buffers-through-cs.patch | 20 +- ...-Introduce-a-separate-priority-queue.patch | 156 +++++----- .../wined3d-CSMT_Main/9999-IfDefined.patch | 278 ++++++++++-------- 6 files changed, 313 insertions(+), 272 deletions(-) diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index dc9c7dfe..c4313aa5 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "e804e9a5bc9fde9ad8b84dfd121d44afbe177752" + echo "8af23cb93e4e1cd3686984399cb50d755f5171e3" } # Show version information diff --git a/patches/wined3d-CSMT_Main/0030-wined3d-Send-create_buffer_texture-create_texture_vi.patch b/patches/wined3d-CSMT_Main/0030-wined3d-Send-create_buffer_texture-create_texture_vi.patch index 3d4d33ba..ca29e37a 100644 --- a/patches/wined3d-CSMT_Main/0030-wined3d-Send-create_buffer_texture-create_texture_vi.patch +++ b/patches/wined3d-CSMT_Main/0030-wined3d-Send-create_buffer_texture-create_texture_vi.patch @@ -1,38 +1,40 @@ -From 2f3f8e0f66c51a459b0a2bbd25dc7f6a7c3fe6bd Mon Sep 17 00:00:00 2001 +From f7b258f07407779e76637835505a3c59b8466d8d Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 7 Feb 2017 15:02:44 +0100 Subject: wined3d: Send create_buffer_texture / create_texture_view through the CS. --- - dlls/wined3d/cs.c | 73 +++++++++++++++++++++++++++++++++++++++++- - dlls/wined3d/view.c | 13 ++++---- - dlls/wined3d/wined3d_private.h | 13 ++++++++ - 3 files changed, 92 insertions(+), 7 deletions(-) + dlls/wined3d/cs.c | 81 +++++++++++++++++++++++++++++++++++++++++- + dlls/wined3d/view.c | 15 ++++---- + dlls/wined3d/wined3d_private.h | 15 ++++++++ + 3 files changed, 103 insertions(+), 8 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 51f315ee500..4778b73b0dc 100644 +index 5ecf15f5a01..9227a9c497c 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -91,6 +91,8 @@ enum wined3d_cs_op WINED3D_CS_OP_SAMPLER_INIT, WINED3D_CS_OP_TEXTURE_ADD_DIRTY_REGION, WINED3D_CS_OP_BUFFER_COPY, -+ WINED3D_CS_OP_CREATE_BUFFER_TEXTURE, ++ WINED3D_CS_OP_CREATE_BUFFER_VIEW, + WINED3D_CS_OP_CREATE_TEXTURE_VIEW, WINED3D_CS_OP_STOP, }; -@@ -499,6 +501,24 @@ struct wined3d_cs_buffer_copy +@@ -499,6 +501,26 @@ struct wined3d_cs_buffer_copy unsigned int size; }; -+struct wined3d_cs_create_buffer_texture ++struct wined3d_cs_create_buffer_view +{ + enum wined3d_cs_op opcode; + struct wined3d_gl_view *view; ++ const struct wined3d_view_desc *desc; + struct wined3d_buffer *buffer; + const struct wined3d_format *view_format; ++ HRESULT *hr; +}; + +struct wined3d_cs_create_texture_view @@ -48,7 +50,7 @@ index 51f315ee500..4778b73b0dc 100644 static inline BOOL wined3d_cs_process_block(struct wined3d_cs *cs, struct wined3d_cs_block *block); static void wined3d_cs_mt_submit(struct wined3d_cs *cs); -@@ -2507,7 +2527,6 @@ void wined3d_cs_emit_texture_add_dirty_region(struct wined3d_cs *cs, +@@ -2515,7 +2537,6 @@ void wined3d_cs_emit_texture_add_dirty_region(struct wined3d_cs *cs, cs->ops->submit(cs); } @@ -56,31 +58,37 @@ index 51f315ee500..4778b73b0dc 100644 static UINT wined3d_cs_exec_buffer_copy(struct wined3d_cs *cs, const void *data) { const struct wined3d_cs_buffer_copy *op = data; -@@ -2542,6 +2561,55 @@ void wined3d_cs_emit_buffer_copy(struct wined3d_cs *cs, struct wined3d_buffer *d +@@ -2550,6 +2571,61 @@ void wined3d_cs_emit_buffer_copy(struct wined3d_cs *cs, struct wined3d_buffer *d cs->ops->submit(cs); } -+static UINT wined3d_cs_exec_create_buffer_texture(struct wined3d_cs *cs, const void *data) ++static UINT wined3d_cs_exec_create_buffer_view(struct wined3d_cs *cs, const void *data) +{ -+ const struct wined3d_cs_create_buffer_texture *op = data; ++ const struct wined3d_cs_create_buffer_view *op = data; + -+ create_buffer_texture(op->view, op->buffer, op->view_format); ++ *op->hr = create_buffer_view(op->view, op->desc, op->buffer, op->view_format); + + return sizeof(*op); +} + -+void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) ++HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) +{ -+ struct wined3d_cs_create_buffer_texture *op; ++ struct wined3d_cs_create_buffer_view *op; ++ HRESULT hr; + + op = cs->ops->require_space(cs, sizeof(*op)); -+ op->opcode = WINED3D_CS_OP_CREATE_BUFFER_TEXTURE; ++ op->opcode = WINED3D_CS_OP_CREATE_BUFFER_VIEW; + op->view = view; ++ op->desc = desc; + op->buffer = buffer; + op->view_format = view_format; ++ op->hr = &hr; + + cs->ops->submit_and_wait(cs); ++ ++ return hr; +} + +static UINT wined3d_cs_exec_create_texture_view(struct wined3d_cs *cs, const void *data) @@ -112,18 +120,18 @@ index 51f315ee500..4778b73b0dc 100644 static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = { /* WINED3D_CS_OP_FENCE */ wined3d_cs_exec_fence, -@@ -2598,6 +2666,9 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -2606,6 +2682,9 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_SAMPLER_INIT */ wined3d_cs_exec_sampler_init, /* WINED3D_CS_OP_TEXTURE_ADD_DIRTY_REGION */ wined3d_cs_exec_texture_add_dirty_region, /* WINED3D_CS_OP_BUFFER_COPY */ wined3d_cs_exec_buffer_copy, -+ /* WINED3D_CS_OP_CREATE_BUFFER_TEXTURE */ wined3d_cs_exec_create_buffer_texture, ++ /* WINED3D_CS_OP_CREATE_BUFFER_VIEW */ wined3d_cs_exec_create_buffer_view, + /* WINED3D_CS_OP_CREATE_TEXTURE_VIEW */ wined3d_cs_exec_create_texture_view, + }; static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size) diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c -index b97a25add3e..60bb483e7ff 100644 +index dd87f73b339..e62288f7b78 100644 --- a/dlls/wined3d/view.c +++ b/dlls/wined3d/view.c @@ -72,7 +72,7 @@ static GLenum get_texture_view_target(const struct wined3d_gl_info *gl_info, @@ -135,25 +143,25 @@ index b97a25add3e..60bb483e7ff 100644 const struct wined3d_view_desc *desc, struct wined3d_texture *texture, const struct wined3d_format *view_format) { -@@ -133,7 +133,7 @@ static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target +@@ -181,7 +181,7 @@ static void create_buffer_texture(struct wined3d_gl_view *view, context_release(context); } --static void create_buffer_texture(struct wined3d_gl_view *view, -+void create_buffer_texture(struct wined3d_gl_view *view, - struct wined3d_buffer *buffer, const struct wined3d_format *view_format) +-static HRESULT create_buffer_view(struct wined3d_gl_view *view, ++HRESULT create_buffer_view(struct wined3d_gl_view *view, + const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, + const struct wined3d_format *view_format) { - const struct wined3d_gl_info *gl_info; -@@ -475,7 +475,7 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ - FIXME("Ignoring buffer range %u-%u.\n", desc->u.buffer.start_idx, desc->u.buffer.count); - } +@@ -515,7 +515,7 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ + struct wined3d_buffer *buffer = buffer_from_resource(resource); + HRESULT hr; -- create_buffer_texture(&view->gl_view, buffer, view_format); -+ wined3d_cs_emit_create_buffer_texture(resource->device->cs, &view->gl_view, buffer, view_format); - } +- if (FAILED(hr = create_buffer_view(&view->gl_view, desc, buffer, view_format))) ++ if (FAILED(hr = wined3d_cs_emit_create_buffer_view(resource->device->cs, &view->gl_view, desc, buffer, view_format))) + return hr; } else -@@ -506,7 +506,8 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ +@@ -546,7 +546,8 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ else if (resource->format->typeless_id == view_format->typeless_id && resource->format->gl_view_class == view_format->gl_view_class) { @@ -163,7 +171,16 @@ index b97a25add3e..60bb483e7ff 100644 } else { -@@ -671,8 +672,8 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces +@@ -702,7 +703,7 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces + struct wined3d_buffer *buffer = buffer_from_resource(resource); + HRESULT hr; + +- if (FAILED(hr = create_buffer_view(&view->gl_view, desc, buffer, view->format))) ++ if (FAILED(hr = wined3d_cs_emit_create_buffer_view(resource->device->cs, &view->gl_view, desc, buffer, view->format))) + return hr; + } + else +@@ -724,8 +725,8 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces if (desc->u.texture.layer_idx || desc->u.texture.layer_count != depth_or_layer_count) { @@ -175,10 +192,10 @@ index b97a25add3e..60bb483e7ff 100644 view->layer_idx = desc->u.texture.layer_idx; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 76394cac3ca..dbf6ef47134 100644 +index 46660964eda..2cd708ca910 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -3222,6 +3222,8 @@ static inline void wined3d_resource_wait_idle(struct wined3d_resource *resource) +@@ -3225,6 +3225,8 @@ static inline void wined3d_resource_wait_idle(struct wined3d_resource *resource) while (InterlockedCompareExchange(&resource->access_count, 0, 0)); } @@ -187,12 +204,13 @@ index 76394cac3ca..dbf6ef47134 100644 struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) DECLSPEC_HIDDEN; void wined3d_cs_destroy(struct wined3d_cs *cs) DECLSPEC_HIDDEN; -@@ -3237,9 +3239,14 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * +@@ -3240,9 +3242,15 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * void wined3d_cs_emit_clear_rtv(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view, const RECT *rect, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil, const struct blit_shader *blitter) DECLSPEC_HIDDEN; -+void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) DECLSPEC_HIDDEN; ++HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) DECLSPEC_HIDDEN; void wined3d_cs_emit_create_dummy_textures(struct wined3d_cs *cs) DECLSPEC_HIDDEN; HRESULT wined3d_cs_emit_create_swapchain_context(struct wined3d_cs *cs, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -202,12 +220,13 @@ index 76394cac3ca..dbf6ef47134 100644 void wined3d_cs_emit_destroy_object(struct wined3d_cs *cs, void (*callback)(void *object), void *object) DECLSPEC_HIDDEN; void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, -@@ -3421,6 +3428,12 @@ struct wined3d_gl_view +@@ -3424,6 +3432,13 @@ struct wined3d_gl_view GLuint name; }; -+void create_buffer_texture(struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) DECLSPEC_HIDDEN; ++HRESULT create_buffer_view(struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) DECLSPEC_HIDDEN; +void create_texture_view(struct wined3d_gl_view *view, GLenum view_target, + const struct wined3d_view_desc *desc, struct wined3d_texture *texture, + const struct wined3d_format *view_format) DECLSPEC_HIDDEN; diff --git a/patches/wined3d-CSMT_Main/0033-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch b/patches/wined3d-CSMT_Main/0033-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch index bd371a7a..5f5f116f 100644 --- a/patches/wined3d-CSMT_Main/0033-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch +++ b/patches/wined3d-CSMT_Main/0033-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch @@ -1,4 +1,4 @@ -From 5295f80c011f058f42c2b4e56c5751d296dd98b3 Mon Sep 17 00:00:00 2001 +From 7888d0d12d9182cf9d5801cfe3b884f3f7a2708c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Fri, 11 Oct 2013 10:11:13 +0200 Subject: wined3d: Delete GL contexts through the CS in reset. @@ -11,18 +11,18 @@ Let's see if this fixes the remaining fglrx crashes... 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 01c81cde95e..1809f3f3484 100644 +index d65276072d4..1d7d6b9cd94 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -93,6 +93,7 @@ enum wined3d_cs_op WINED3D_CS_OP_BUFFER_COPY, - WINED3D_CS_OP_CREATE_BUFFER_TEXTURE, + WINED3D_CS_OP_CREATE_BUFFER_VIEW, WINED3D_CS_OP_CREATE_TEXTURE_VIEW, + WINED3D_CS_OP_DELETE_GL_CONTEXTS, WINED3D_CS_OP_STOP, }; -@@ -518,6 +519,12 @@ struct wined3d_cs_create_texture_view +@@ -521,6 +522,12 @@ struct wined3d_cs_create_texture_view const struct wined3d_format *view_format; }; @@ -35,7 +35,7 @@ index 01c81cde95e..1809f3f3484 100644 static inline BOOL wined3d_cs_process_block(struct wined3d_cs *cs, struct wined3d_cs_block *block); static void wined3d_cs_mt_submit(struct wined3d_cs *cs); -@@ -2596,6 +2603,26 @@ void wined3d_cs_emit_create_texture_view(struct wined3d_cs *cs, struct wined3d_g +@@ -2628,6 +2635,26 @@ void wined3d_cs_emit_create_texture_view(struct wined3d_cs *cs, struct wined3d_g cs->ops->submit_and_wait(cs); } @@ -62,9 +62,9 @@ index 01c81cde95e..1809f3f3484 100644 static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = { /* WINED3D_CS_OP_FENCE */ wined3d_cs_exec_fence, -@@ -2654,7 +2681,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -2686,7 +2713,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_BUFFER_COPY */ wined3d_cs_exec_buffer_copy, - /* WINED3D_CS_OP_CREATE_BUFFER_TEXTURE */ wined3d_cs_exec_create_buffer_texture, + /* WINED3D_CS_OP_CREATE_BUFFER_VIEW */ wined3d_cs_exec_create_buffer_view, /* WINED3D_CS_OP_CREATE_TEXTURE_VIEW */ wined3d_cs_exec_create_texture_view, - + /* WINED3D_CS_OP_DELETE_GL_CONTEXTS */ wined3d_cs_exec_delete_gl_contexts, @@ -72,10 +72,10 @@ index 01c81cde95e..1809f3f3484 100644 static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index d70d51a7d7a..762ab2747c2 100644 +index 3f5fd7988d4..880e6c002ac 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c -@@ -4621,22 +4621,12 @@ void CDECL wined3d_device_evict_managed_resources(struct wined3d_device *device) +@@ -4635,22 +4635,12 @@ void CDECL wined3d_device_evict_managed_resources(struct wined3d_device *device) } } @@ -99,7 +99,7 @@ index d70d51a7d7a..762ab2747c2 100644 LIST_FOR_EACH_ENTRY(shader, &device->shaders, struct wined3d_shader, shader_list_entry) { device->shader_backend->shader_destroy(shader); -@@ -4670,6 +4660,19 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d +@@ -4684,6 +4674,19 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d swapchain->context = NULL; } @@ -120,10 +120,10 @@ index d70d51a7d7a..762ab2747c2 100644 { HRESULT hr; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index aa0ca4bcc06..c7c212f294f 100644 +index 454a64eb2ff..2eb5bbeca29 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -2666,6 +2666,8 @@ void device_invalidate_state(const struct wined3d_device *device, DWORD state) D +@@ -2708,6 +2708,8 @@ void device_invalidate_state(const struct wined3d_device *device, DWORD state) D void device_exec_update_texture(struct wined3d_context *context, struct wined3d_texture *src_texture, struct wined3d_texture *dst_texture) DECLSPEC_HIDDEN; void device_create_dummy_textures(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN; @@ -132,7 +132,7 @@ index aa0ca4bcc06..c7c212f294f 100644 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, -@@ -3227,6 +3229,8 @@ void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d +@@ -3270,6 +3272,8 @@ HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d void wined3d_cs_emit_create_dummy_textures(struct wined3d_cs *cs) DECLSPEC_HIDDEN; HRESULT wined3d_cs_emit_create_swapchain_context(struct wined3d_cs *cs, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; diff --git a/patches/wined3d-CSMT_Main/0038-wined3d-Map-vertex-buffers-through-cs.patch b/patches/wined3d-CSMT_Main/0038-wined3d-Map-vertex-buffers-through-cs.patch index 5e9e6f28..5fe79a3f 100644 --- a/patches/wined3d-CSMT_Main/0038-wined3d-Map-vertex-buffers-through-cs.patch +++ b/patches/wined3d-CSMT_Main/0038-wined3d-Map-vertex-buffers-through-cs.patch @@ -1,4 +1,4 @@ -From 520d1bc8ae2e65db6244cf3b2c5115d1cfcc519e Mon Sep 17 00:00:00 2001 +From 0c368a9fa4e1417a0f5114769fa0b9f44d35ebde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Tue, 7 Feb 2017 22:37:58 +0100 Subject: wined3d: Map vertex buffers through cs. @@ -10,18 +10,18 @@ Subject: wined3d: Map vertex buffers through cs. 3 files changed, 76 insertions(+), 44 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 359f0ad4645..38e465b8f04 100644 +index 42779efe69d..42ce9bafb80 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -94,6 +94,7 @@ enum wined3d_cs_op - WINED3D_CS_OP_CREATE_BUFFER_TEXTURE, + WINED3D_CS_OP_CREATE_BUFFER_VIEW, WINED3D_CS_OP_CREATE_TEXTURE_VIEW, WINED3D_CS_OP_DELETE_GL_CONTEXTS, + WINED3D_CS_OP_MAP_vertex_buffers, WINED3D_CS_OP_STOP, }; -@@ -526,6 +527,13 @@ struct wined3d_cs_delete_gl_contexts +@@ -528,6 +529,13 @@ struct wined3d_cs_delete_gl_contexts struct wined3d_swapchain *swapchain; }; @@ -35,7 +35,7 @@ index 359f0ad4645..38e465b8f04 100644 static inline BOOL wined3d_cs_process_block(struct wined3d_cs *cs, struct wined3d_cs_block *block); static void wined3d_cs_mt_submit(struct wined3d_cs *cs); -@@ -2639,6 +2647,70 @@ void wined3d_cs_emit_delete_opengl_contexts(struct wined3d_cs *cs, struct wined3 +@@ -2655,6 +2663,70 @@ void wined3d_cs_emit_delete_opengl_contexts(struct wined3d_cs *cs, struct wined3 cs->ops->submit_and_wait(cs); } @@ -106,8 +106,8 @@ index 359f0ad4645..38e465b8f04 100644 static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = { /* WINED3D_CS_OP_FENCE */ wined3d_cs_exec_fence, -@@ -2698,6 +2770,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void - /* WINED3D_CS_OP_CREATE_BUFFER_TEXTURE */ wined3d_cs_exec_create_buffer_texture, +@@ -2714,6 +2786,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void + /* WINED3D_CS_OP_CREATE_BUFFER_VIEW */ wined3d_cs_exec_create_buffer_view, /* WINED3D_CS_OP_CREATE_TEXTURE_VIEW */ wined3d_cs_exec_create_texture_view, /* WINED3D_CS_OP_DELETE_GL_CONTEXTS */ wined3d_cs_exec_delete_gl_contexts, + /* WINED3D_CS_OP_MAP_vertex_buffers */ wined3d_cs_exec_map_vertex_buffers, @@ -115,7 +115,7 @@ index 359f0ad4645..38e465b8f04 100644 static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index b392878e2f9..44ac8ccef42 100644 +index ccfaa7f19e6..369fc47c097 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2851,7 +2851,6 @@ void CDECL wined3d_device_set_unordered_access_view(struct wined3d_device *devic @@ -191,10 +191,10 @@ index b392878e2f9..44ac8ccef42 100644 } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 6063aa7f390..d47aa20d5a4 100644 +index c1200b127c5..a6a3eca0da2 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -3355,6 +3355,8 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, +@@ -3359,6 +3359,8 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, struct wined3d_map_desc *map_desc, const struct wined3d_box *box, unsigned int flags) DECLSPEC_HIDDEN; HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx) DECLSPEC_HIDDEN; diff --git a/patches/wined3d-CSMT_Main/0040-wined3d-Introduce-a-separate-priority-queue.patch b/patches/wined3d-CSMT_Main/0040-wined3d-Introduce-a-separate-priority-queue.patch index 765683e5..7ea1e995 100644 --- a/patches/wined3d-CSMT_Main/0040-wined3d-Introduce-a-separate-priority-queue.patch +++ b/patches/wined3d-CSMT_Main/0040-wined3d-Introduce-a-separate-priority-queue.patch @@ -1,4 +1,4 @@ -From d72fe8de3a880d62366abaa28dd2b1abc00adffd Mon Sep 17 00:00:00 2001 +From b9a43f545bf226e61be143012930f623b2d35140 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 8 Feb 2017 00:12:31 +0100 Subject: wined3d: Introduce a separate priority queue. @@ -9,10 +9,10 @@ Subject: wined3d: Introduce a separate priority queue. 2 files changed, 79 insertions(+), 68 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 6761e958cb8..dd018fee2cb 100644 +index a94bc4a0f42..ca2aa81c276 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c -@@ -564,14 +564,16 @@ static struct wined3d_cs_block *wined3d_cs_list_dequeue(struct wined3d_cs_list * +@@ -566,14 +566,16 @@ static struct wined3d_cs_block *wined3d_cs_list_dequeue(struct wined3d_cs_list * return LIST_ENTRY(head, struct wined3d_cs_block, entry); } @@ -31,7 +31,7 @@ index 6761e958cb8..dd018fee2cb 100644 return block; } } -@@ -592,7 +594,7 @@ static void wined3d_cs_set_thread_block(const struct wined3d_cs *cs, struct wine +@@ -594,7 +596,7 @@ static void wined3d_cs_set_thread_block(const struct wined3d_cs *cs, struct wine ERR("Failed to set thread block.\n"); } @@ -40,7 +40,7 @@ index 6761e958cb8..dd018fee2cb 100644 { struct wined3d_cs_block *block; -@@ -606,6 +608,7 @@ static struct wined3d_cs_block *wined3d_cs_get_block(struct wined3d_cs *cs) +@@ -608,6 +610,7 @@ static struct wined3d_cs_block *wined3d_cs_get_block(struct wined3d_cs *cs) } block->pos = 0; @@ -48,7 +48,7 @@ index 6761e958cb8..dd018fee2cb 100644 return block; } -@@ -625,7 +628,7 @@ static void wined3d_cs_emit_fence(struct wined3d_cs *cs, BOOL *signalled) +@@ -627,7 +630,7 @@ static void wined3d_cs_emit_fence(struct wined3d_cs *cs, BOOL *signalled) *signalled = FALSE; @@ -57,7 +57,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_FENCE; op->signalled = signalled; } -@@ -660,7 +663,7 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw +@@ -662,7 +665,7 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw unsigned int i; LONG pending; @@ -66,7 +66,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_PRESENT; op->dst_window_override = dst_window_override; op->swapchain = swapchain; -@@ -727,7 +730,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * +@@ -729,7 +732,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * struct wined3d_cs_clear *op; unsigned int i; @@ -75,7 +75,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_CLEAR; op->flags = flags; op->color = *color; -@@ -877,7 +880,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, +@@ -879,7 +882,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, const struct wined3d_state *state = &cs->device->state; struct wined3d_cs_dispatch *op; @@ -84,7 +84,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_DISPATCH; op->group_count_x = group_count_x; op->group_count_y = group_count_y; -@@ -939,7 +942,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i +@@ -941,7 +944,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i struct wined3d_cs_draw *op; unsigned int i; @@ -93,7 +93,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_DRAW; op->base_vertex_idx = base_vertex_idx; op->start_idx = start_idx; -@@ -988,7 +991,7 @@ void wined3d_cs_emit_set_predication(struct wined3d_cs *cs, struct wined3d_query +@@ -990,7 +993,7 @@ void wined3d_cs_emit_set_predication(struct wined3d_cs *cs, struct wined3d_query { struct wined3d_cs_set_predication *op; @@ -102,7 +102,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_PREDICATION; op->predicate = predicate; op->value = value; -@@ -1010,7 +1013,7 @@ void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_vi +@@ -1012,7 +1015,7 @@ void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_vi { struct wined3d_cs_set_viewport *op; @@ -111,7 +111,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_VIEWPORT; op->viewport = *viewport; -@@ -1031,7 +1034,7 @@ void wined3d_cs_emit_set_scissor_rect(struct wined3d_cs *cs, const RECT *rect) +@@ -1033,7 +1036,7 @@ void wined3d_cs_emit_set_scissor_rect(struct wined3d_cs *cs, const RECT *rect) { struct wined3d_cs_set_scissor_rect *op; @@ -120,7 +120,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_SCISSOR_RECT; op->rect = *rect; -@@ -1053,7 +1056,7 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v +@@ -1055,7 +1058,7 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v { struct wined3d_cs_set_rendertarget_view *op; @@ -129,7 +129,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_RENDERTARGET_VIEW; op->view_idx = view_idx; op->view = view; -@@ -1104,7 +1107,7 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 +@@ -1106,7 +1109,7 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 { struct wined3d_cs_set_depth_stencil_view *op; @@ -138,7 +138,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_DEPTH_STENCIL_VIEW; op->view = view; -@@ -1125,7 +1128,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 +@@ -1127,7 +1130,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 { struct wined3d_cs_set_vertex_declaration *op; @@ -147,7 +147,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_VERTEX_DECLARATION; op->declaration = declaration; -@@ -1159,7 +1162,7 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, +@@ -1161,7 +1164,7 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_source *op; @@ -156,7 +156,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_STREAM_SOURCE; op->stream_idx = stream_idx; op->buffer = buffer; -@@ -1187,7 +1190,7 @@ void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_i +@@ -1189,7 +1192,7 @@ void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_i { struct wined3d_cs_set_stream_source_freq *op; @@ -165,7 +165,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_STREAM_SOURCE_FREQ; op->stream_idx = stream_idx; op->frequency = frequency; -@@ -1220,7 +1223,7 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, +@@ -1222,7 +1225,7 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_output *op; @@ -174,7 +174,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_STREAM_OUTPUT; op->stream_idx = stream_idx; op->buffer = buffer; -@@ -1254,7 +1257,7 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff +@@ -1256,7 +1259,7 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff { struct wined3d_cs_set_index_buffer *op; @@ -183,7 +183,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_INDEX_BUFFER; op->buffer = buffer; op->format_id = format_id; -@@ -1285,7 +1288,7 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha +@@ -1287,7 +1290,7 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha { struct wined3d_cs_set_constant_buffer *op; @@ -192,7 +192,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_CONSTANT_BUFFER; op->type = type; op->cb_idx = cb_idx; -@@ -1379,7 +1382,7 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined +@@ -1381,7 +1384,7 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined { struct wined3d_cs_set_texture *op; @@ -201,7 +201,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_TEXTURE; op->stage = stage; op->texture = texture; -@@ -1403,7 +1406,7 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 +@@ -1413,7 +1416,7 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 { struct wined3d_cs_set_shader_resource_view *op; @@ -210,7 +210,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_SHADER_RESOURCE_VIEW; op->type = type; op->view_idx = view_idx; -@@ -1435,7 +1438,7 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined +@@ -1445,7 +1448,7 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined { struct wined3d_cs_set_unordered_access_view *op; @@ -219,7 +219,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_UNORDERED_ACCESS_VIEW; op->pipeline = pipeline; op->view_idx = view_idx; -@@ -1459,7 +1462,7 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type +@@ -1469,7 +1472,7 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type { struct wined3d_cs_set_sampler *op; @@ -228,7 +228,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_SAMPLER; op->type = type; op->sampler_idx = sampler_idx; -@@ -1484,7 +1487,7 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type +@@ -1494,7 +1497,7 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type { struct wined3d_cs_set_shader *op; @@ -237,7 +237,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_SHADER; op->type = type; op->shader = shader; -@@ -1507,7 +1510,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, +@@ -1517,7 +1520,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, { struct wined3d_cs_set_rasterizer_state *op; @@ -246,7 +246,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_RASTERIZER_STATE; op->state = rasterizer_state; -@@ -1528,7 +1531,7 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render +@@ -1538,7 +1541,7 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render { struct wined3d_cs_set_render_state *op; @@ -255,7 +255,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_RENDER_STATE; op->state = state; op->value = value; -@@ -1551,7 +1554,7 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, +@@ -1561,7 +1564,7 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, { struct wined3d_cs_set_texture_state *op; @@ -264,7 +264,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_TEXTURE_STATE; op->stage = stage; op->state = state; -@@ -1575,7 +1578,7 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, +@@ -1585,7 +1588,7 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, { struct wined3d_cs_set_sampler_state *op; @@ -273,7 +273,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_SAMPLER_STATE; op->sampler_idx = sampler_idx; op->state = state; -@@ -1600,7 +1603,7 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform +@@ -1610,7 +1613,7 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform { struct wined3d_cs_set_transform *op; @@ -282,7 +282,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_TRANSFORM; op->state = state; op->matrix = *matrix; -@@ -1622,7 +1625,7 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const +@@ -1632,7 +1635,7 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const { struct wined3d_cs_set_clip_plane *op; @@ -291,7 +291,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_CLIP_PLANE; op->plane_idx = plane_idx; op->plane = *plane; -@@ -1700,7 +1703,7 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture +@@ -1710,7 +1713,7 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture { struct wined3d_cs_set_color_key *op; @@ -300,7 +300,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_COLOR_KEY; op->texture = texture; op->flags = flags; -@@ -1729,7 +1732,7 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma +@@ -1739,7 +1742,7 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma { struct wined3d_cs_set_material *op; @@ -309,7 +309,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_MATERIAL; op->material = *material; -@@ -1754,7 +1757,7 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) +@@ -1764,7 +1767,7 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) { struct wined3d_cs_reset_state *op; @@ -318,7 +318,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_RESET_STATE; cs->ops->submit(cs); -@@ -1773,7 +1776,7 @@ void wined3d_cs_emit_destroy_object(struct wined3d_cs *cs, void (*callback)(void +@@ -1783,7 +1786,7 @@ void wined3d_cs_emit_destroy_object(struct wined3d_cs *cs, void (*callback)(void { struct wined3d_cs_destroy_object *op; @@ -327,7 +327,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_DESTROY_OBJECT; op->callback = callback; op->object = object; -@@ -1795,7 +1798,7 @@ void wined3d_cs_emit_query_issue(struct wined3d_cs *cs, struct wined3d_query *qu +@@ -1805,7 +1808,7 @@ void wined3d_cs_emit_query_issue(struct wined3d_cs *cs, struct wined3d_query *qu { struct wined3d_cs_query_issue *op; @@ -336,7 +336,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_QUERY_ISSUE; op->query = query; op->flags = flags; -@@ -1818,7 +1821,7 @@ BOOL wined3d_cs_emit_query_poll(struct wined3d_cs *cs, struct wined3d_query *que +@@ -1828,7 +1831,7 @@ BOOL wined3d_cs_emit_query_poll(struct wined3d_cs *cs, struct wined3d_query *que struct wined3d_cs_query_poll *op; BOOL ret; @@ -345,7 +345,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_QUERY_POLL; op->query = query; op->flags = flags; -@@ -1844,7 +1847,7 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso +@@ -1854,7 +1857,7 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso { struct wined3d_cs_preload_resource *op; @@ -354,7 +354,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_PRELOAD_RESOURCE; op->resource = resource; -@@ -1868,7 +1871,7 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou +@@ -1878,7 +1881,7 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou { struct wined3d_cs_unload_resource *op; @@ -363,7 +363,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_UNLOAD_RESOURCE; op->resource = resource; -@@ -1894,7 +1897,7 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, +@@ -1904,7 +1907,7 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, struct wined3d_cs_map *op; HRESULT hr; @@ -372,7 +372,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_MAP; op->resource = resource; op->sub_resource_idx = sub_resource_idx; -@@ -1923,7 +1926,7 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc +@@ -1933,7 +1936,7 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc struct wined3d_cs_unmap *op; HRESULT hr; @@ -381,7 +381,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_UNMAP; op->resource = resource; op->sub_resource_idx = sub_resource_idx; -@@ -1949,7 +1952,7 @@ void wined3d_cs_emit_glfinish(struct wined3d_cs *cs) +@@ -1959,7 +1962,7 @@ void wined3d_cs_emit_glfinish(struct wined3d_cs *cs) { struct wined3d_cs_finish *op; @@ -390,7 +390,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_GLFINISH; cs->ops->submit(cs); -@@ -2006,7 +2009,7 @@ void wined3d_cs_emit_push_constants(struct wined3d_cs *cs, enum wined3d_push_con +@@ -2016,7 +2019,7 @@ void wined3d_cs_emit_push_constants(struct wined3d_cs *cs, enum wined3d_push_con { struct wined3d_cs_push_constants *op; @@ -399,7 +399,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_PUSH_CONSTANTS; op->p = p; op->start_idx = start_idx; -@@ -2035,7 +2038,7 @@ void wined3d_cs_emit_set_primitive_type(struct wined3d_cs *cs, GLenum primitive_ +@@ -2045,7 +2048,7 @@ void wined3d_cs_emit_set_primitive_type(struct wined3d_cs *cs, GLenum primitive_ { struct wined3d_cs_set_primitive_type *op; @@ -408,7 +408,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_PRIMITIVE_TYPE; op->gl_primitive_type = primitive_type; -@@ -2095,7 +2098,7 @@ void wined3d_cs_emit_set_light(struct wined3d_cs *cs, const struct wined3d_light +@@ -2105,7 +2108,7 @@ void wined3d_cs_emit_set_light(struct wined3d_cs *cs, const struct wined3d_light { struct wined3d_cs_set_light *op; @@ -417,7 +417,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_LIGHT; op->light = *light; -@@ -2184,7 +2187,7 @@ void wined3d_cs_emit_set_light_enable(struct wined3d_cs *cs, UINT idx, BOOL enab +@@ -2194,7 +2197,7 @@ void wined3d_cs_emit_set_light_enable(struct wined3d_cs *cs, UINT idx, BOOL enab { struct wined3d_cs_set_light_enable *op; @@ -426,7 +426,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SET_LIGHT_ENABLE; op->idx = idx; op->enable = enable; -@@ -2214,7 +2217,7 @@ void wined3d_cs_emit_blt(struct wined3d_cs *cs, struct wined3d_surface *dst_surf +@@ -2224,7 +2227,7 @@ void wined3d_cs_emit_blt(struct wined3d_cs *cs, struct wined3d_surface *dst_surf { struct wined3d_cs_blt *op; @@ -435,7 +435,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_BLT; op->dst_surface = dst_surface; op->dst_rect = *dst_rect; -@@ -2253,7 +2256,7 @@ void wined3d_cs_emit_clear_rtv(struct wined3d_cs *cs, struct wined3d_rendertarge +@@ -2263,7 +2266,7 @@ void wined3d_cs_emit_clear_rtv(struct wined3d_cs *cs, struct wined3d_rendertarge { struct wined3d_cs_clear_rtv *op; @@ -444,7 +444,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_CLEAR_RTV; op->view = view; op->rect = *rect; -@@ -2289,7 +2292,7 @@ void wined3d_cs_emit_update_texture(struct wined3d_cs *cs, struct wined3d_textur +@@ -2299,7 +2302,7 @@ void wined3d_cs_emit_update_texture(struct wined3d_cs *cs, struct wined3d_textur { struct wined3d_cs_update_texture *op; @@ -453,7 +453,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_UPDATE_TEXTURE; op->src = src; op->dst = dst; -@@ -2355,7 +2358,7 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r +@@ -2365,7 +2368,7 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r { struct wined3d_cs_update_sub_resource *op; @@ -462,7 +462,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE; op->resource = resource; op->sub_resource_idx = sub_resource_idx; -@@ -2384,7 +2387,7 @@ HRESULT wined3d_cs_emit_get_dc(struct wined3d_cs *cs, struct wined3d_texture *te +@@ -2394,7 +2397,7 @@ HRESULT wined3d_cs_emit_get_dc(struct wined3d_cs *cs, struct wined3d_texture *te struct wined3d_cs_get_release_dc *op; HRESULT hr; @@ -471,7 +471,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_GET_DC; op->texture = texture; op->sub_resource_idx = sub_resource_idx; -@@ -2410,7 +2413,7 @@ HRESULT wined3d_cs_emit_release_dc(struct wined3d_cs *cs, struct wined3d_texture +@@ -2420,7 +2423,7 @@ HRESULT wined3d_cs_emit_release_dc(struct wined3d_cs *cs, struct wined3d_texture struct wined3d_cs_get_release_dc *op; HRESULT hr; @@ -480,7 +480,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_RELEASE_DC; op->texture = texture; op->sub_resource_idx = sub_resource_idx; -@@ -2436,7 +2439,7 @@ void wined3d_cs_emit_create_dummy_textures(struct wined3d_cs *cs) +@@ -2446,7 +2449,7 @@ void wined3d_cs_emit_create_dummy_textures(struct wined3d_cs *cs) { struct wined3d_cs_create_dummy_textures *op; @@ -489,7 +489,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_CREATE_DUMMY_TEXTURES; cs->ops->submit_and_wait(cs); -@@ -2456,7 +2459,7 @@ HRESULT wined3d_cs_emit_create_swapchain_context(struct wined3d_cs *cs, struct w +@@ -2466,7 +2469,7 @@ HRESULT wined3d_cs_emit_create_swapchain_context(struct wined3d_cs *cs, struct w struct wined3d_cs_create_swapchain_context *op; HRESULT hr; @@ -498,7 +498,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_CREATE_SWAPCHAIN_CONTEXT; op->swapchain = swapchain; op->hr = &hr; -@@ -2479,7 +2482,7 @@ void wined3d_cs_emit_update_swap_interval(struct wined3d_cs *cs, struct wined3d_ +@@ -2489,7 +2492,7 @@ void wined3d_cs_emit_update_swap_interval(struct wined3d_cs *cs, struct wined3d_ { struct wined3d_cs_update_swap_interval *op; @@ -507,7 +507,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_UPDATE_SWAP_INTERVAL; op->swapchain = swapchain; -@@ -2499,7 +2502,7 @@ void wined3d_cs_emit_sampler_init(struct wined3d_cs *cs, struct wined3d_sampler +@@ -2509,7 +2512,7 @@ void wined3d_cs_emit_sampler_init(struct wined3d_cs *cs, struct wined3d_sampler { struct wined3d_cs_sampler_init *op; @@ -516,7 +516,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_SAMPLER_INIT; op->sampler = sampler; -@@ -2537,7 +2540,7 @@ void wined3d_cs_emit_texture_add_dirty_region(struct wined3d_cs *cs, +@@ -2547,7 +2550,7 @@ void wined3d_cs_emit_texture_add_dirty_region(struct wined3d_cs *cs, if (dirty_region) WARN("Ignoring dirty_region %s.\n", debug_box(dirty_region)); @@ -525,7 +525,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_TEXTURE_ADD_DIRTY_REGION; op->texture = texture; op->sub_resource_idx = sub_resource_idx; -@@ -2567,7 +2570,7 @@ void wined3d_cs_emit_buffer_copy(struct wined3d_cs *cs, struct wined3d_buffer *d +@@ -2577,7 +2580,7 @@ void wined3d_cs_emit_buffer_copy(struct wined3d_cs *cs, struct wined3d_buffer *d { struct wined3d_cs_buffer_copy *op; @@ -534,16 +534,16 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_BUFFER_COPY; op->dst_buffer = dst_buffer; op->dst_offset = dst_offset; -@@ -2595,7 +2598,7 @@ void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d - { - struct wined3d_cs_create_buffer_texture *op; +@@ -2607,7 +2610,7 @@ HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d + struct wined3d_cs_create_buffer_view *op; + HRESULT hr; - op = cs->ops->require_space(cs, sizeof(*op)); + op = cs->ops->require_space(cs, sizeof(*op), 0); - op->opcode = WINED3D_CS_OP_CREATE_BUFFER_TEXTURE; + op->opcode = WINED3D_CS_OP_CREATE_BUFFER_VIEW; op->view = view; - op->buffer = buffer; -@@ -2619,7 +2622,7 @@ void wined3d_cs_emit_create_texture_view(struct wined3d_cs *cs, struct wined3d_g + op->desc = desc; +@@ -2635,7 +2638,7 @@ void wined3d_cs_emit_create_texture_view(struct wined3d_cs *cs, struct wined3d_g { struct wined3d_cs_create_texture_view *op; @@ -552,7 +552,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_CREATE_TEXTURE_VIEW; op->view = view; op->view_target = view_target; -@@ -2643,7 +2646,7 @@ void wined3d_cs_emit_delete_opengl_contexts(struct wined3d_cs *cs, struct wined3 +@@ -2659,7 +2662,7 @@ void wined3d_cs_emit_delete_opengl_contexts(struct wined3d_cs *cs, struct wined3 { struct wined3d_cs_delete_gl_contexts *op; @@ -561,7 +561,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_DELETE_GL_CONTEXTS; op->swapchain = swapchain; -@@ -2706,7 +2709,7 @@ void wined3d_cs_emit_map_vertex_buffers(struct wined3d_cs *cs, UINT src_start_id +@@ -2722,7 +2725,7 @@ void wined3d_cs_emit_map_vertex_buffers(struct wined3d_cs *cs, UINT src_start_id { struct wined3d_cs_map_vertex_buffers *op; @@ -570,7 +570,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_MAP_vertex_buffers; op->src_start_idx = src_start_idx; op->stream_info = stream_info; -@@ -2776,7 +2779,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -2792,7 +2795,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_MAP_vertex_buffers */ wined3d_cs_exec_map_vertex_buffers, }; @@ -579,7 +579,7 @@ index 6761e958cb8..dd018fee2cb 100644 { if (size > cs->data_size) { -@@ -2807,9 +2810,10 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = +@@ -2823,9 +2826,10 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = wined3d_cs_st_submit, }; @@ -591,7 +591,7 @@ index 6761e958cb8..dd018fee2cb 100644 void *data; assert(size <= sizeof(block->data)); -@@ -2817,8 +2821,11 @@ static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size) +@@ -2833,8 +2837,11 @@ static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size) if (!block || block->pos + size > sizeof(block->data)) { if (block) @@ -604,7 +604,7 @@ index 6761e958cb8..dd018fee2cb 100644 wined3d_cs_set_thread_block(cs, block); } -@@ -2836,7 +2843,7 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs) +@@ -2852,7 +2859,7 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs) if (cs->thread_id == GetCurrentThreadId()) wined3d_cs_process_block(cs, block); else @@ -613,7 +613,7 @@ index 6761e958cb8..dd018fee2cb 100644 } static void wined3d_cs_mt_submit_and_wait(struct wined3d_cs *cs) -@@ -2866,7 +2873,7 @@ static void wined3d_cs_emit_stop(struct wined3d_cs *cs) +@@ -2882,7 +2889,7 @@ static void wined3d_cs_emit_stop(struct wined3d_cs *cs) assert(cs->thread_id != GetCurrentThreadId()); @@ -622,7 +622,7 @@ index 6761e958cb8..dd018fee2cb 100644 op->opcode = WINED3D_CS_OP_STOP; wined3d_cs_mt_submit(cs); -@@ -2902,7 +2909,7 @@ static DWORD WINAPI wined3d_cs_run(void *thread_param) +@@ -2918,7 +2925,7 @@ static DWORD WINAPI wined3d_cs_run(void *thread_param) for (;;) { struct wined3d_cs_block *block; @@ -631,7 +631,7 @@ index 6761e958cb8..dd018fee2cb 100644 if (!wined3d_cs_process_block(cs, block)) break; } -@@ -2946,6 +2953,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) +@@ -2962,6 +2969,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) wined3d_cs_list_init(&cs->free_list); wined3d_cs_list_init(&cs->exec_list); @@ -639,7 +639,7 @@ index 6761e958cb8..dd018fee2cb 100644 if (!(cs->thread = CreateThread(NULL, 0, wined3d_cs_run, cs, 0, &cs->thread_id))) { -@@ -2981,6 +2989,7 @@ void wined3d_cs_destroy(struct wined3d_cs *cs) +@@ -2997,6 +3005,7 @@ void wined3d_cs_destroy(struct wined3d_cs *cs) /* FIXME: Cleanup the block lists on thread exit. */ #if 0 @@ -648,10 +648,10 @@ index 6761e958cb8..dd018fee2cb 100644 wined3d_cs_list_cleanup(&cs->free_list); #endif diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index a22bca662f5..1d8be3e89d9 100644 +index f12d64474ea..751fd61de05 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -3215,12 +3215,13 @@ struct wined3d_cs_block +@@ -3218,12 +3218,13 @@ struct wined3d_cs_block { struct list entry; UINT pos; @@ -666,7 +666,7 @@ index a22bca662f5..1d8be3e89d9 100644 void (*submit)(struct wined3d_cs *cs); void (*submit_and_wait)(struct wined3d_cs *cs); }; -@@ -3238,6 +3239,7 @@ struct wined3d_cs +@@ -3241,6 +3242,7 @@ struct wined3d_cs struct wined3d_cs_list free_list; struct wined3d_cs_list exec_list; diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index 2d17a3f6..560c4c73 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -34,7 +34,7 @@ diff --git a/dlls/d3d10core/tests/device.c b/dlls/d3d10core/tests/device.c diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c -@@ -9069,6 +9069,9 @@ float4 main(const ps_in v) : SV_TARGET +@@ -9092,6 +9092,9 @@ float4 main(const ps_in v) : SV_TARGET ID3D11DeviceContext_UpdateSubresource(context, (ID3D11Resource *)index_cb, 0, NULL, &index, 0, 0); draw_quad(&test_context); @@ -44,7 +44,7 @@ diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c check_texture_color(test_context.backbuffer, test_data[i].expected, 1); } -@@ -11320,6 +11323,9 @@ static void test_line_antialiasing_blending(void) +@@ -11345,6 +11348,9 @@ static void test_line_antialiasing_blending(void) ID3D11DeviceContext_ClearRenderTargetView(context, test_context.backbuffer_rtv, &green.x); draw_color_quad(&test_context, &red); @@ -231,7 +231,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c } static BOOL fixed_get_input(BYTE usage, BYTE usage_idx, unsigned int *regnum) -@@ -3490,7 +3540,11 @@ BOOL context_apply_draw_state(struct wined3d_context *context, +@@ -3500,7 +3550,11 @@ BOOL context_apply_draw_state(struct wined3d_context *context, const struct wined3d_device *device, const struct wined3d_state *state) { const struct StateEntry *state_table = context->state_table; @@ -243,7 +243,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c unsigned int i; WORD map; -@@ -3692,6 +3746,15 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, str +@@ -3702,6 +3756,15 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, str TRACE("device %p, target %p.\n", device, target); @@ -311,7 +311,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + WINED3D_CS_OP_SAMPLER_INIT, + WINED3D_CS_OP_TEXTURE_ADD_DIRTY_REGION, + WINED3D_CS_OP_BUFFER_COPY, -+ WINED3D_CS_OP_CREATE_BUFFER_TEXTURE, ++ WINED3D_CS_OP_CREATE_BUFFER_VIEW, + WINED3D_CS_OP_CREATE_TEXTURE_VIEW, + WINED3D_CS_OP_DELETE_GL_CONTEXTS, + WINED3D_CS_OP_MAP_vertex_buffers, @@ -337,7 +337,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c struct wined3d_cs_preload_resource { enum wined3d_cs_op opcode; -@@ -328,7 +371,305 @@ struct wined3d_cs_unmap +@@ -328,7 +371,307 @@ struct wined3d_cs_unmap HRESULT *hr; }; @@ -475,12 +475,14 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + unsigned int size; +}; + -+struct wined3d_cs_create_buffer_texture ++struct wined3d_cs_create_buffer_view +{ + enum wined3d_cs_op opcode; + struct wined3d_gl_view *view; ++ const struct wined3d_view_desc *desc; + struct wined3d_buffer *buffer; + const struct wined3d_format *view_format; ++ HRESULT *hr; +}; + +struct wined3d_cs_create_texture_view @@ -643,7 +645,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_present *op = data; struct wined3d_swapchain *swapchain; -@@ -337,13 +678,24 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data) +@@ -337,13 +680,24 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data) swapchain = op->swapchain; wined3d_swapchain_set_window(swapchain, op->dst_window_override); @@ -668,7 +670,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *swapchain, -@@ -351,8 +703,14 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw +@@ -351,8 +705,14 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw { struct wined3d_cs_present *op; unsigned int i; @@ -683,7 +685,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_PRESENT; op->dst_window_override = dst_window_override; op->swapchain = swapchain; -@@ -366,34 +724,75 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw +@@ -366,34 +726,75 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw wined3d_resource_acquire(&swapchain->back_buffers[i]->resource); } @@ -759,7 +761,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, -@@ -403,7 +802,11 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * +@@ -403,7 +804,11 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * struct wined3d_cs_clear *op; unsigned int i; @@ -771,7 +773,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_CLEAR; op->flags = flags; op->color = *color; -@@ -416,12 +819,21 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * +@@ -416,12 +821,21 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * { for (i = 0; i < cs->device->adapter->gl_info.limits.buffers; ++i) { @@ -793,7 +795,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c cs->ops->submit(cs); } -@@ -532,9 +944,15 @@ static void release_unordered_access_resources(const struct wined3d_shader *shad +@@ -532,9 +946,15 @@ static void release_unordered_access_resources(const struct wined3d_shader *shad } } @@ -809,7 +811,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c const struct wined3d_cs_dispatch *op = data; dispatch_compute(cs->device, state, -@@ -543,6 +961,10 @@ static void wined3d_cs_exec_dispatch(struct wined3d_cs *cs, const void *data) +@@ -543,6 +963,10 @@ static void wined3d_cs_exec_dispatch(struct wined3d_cs *cs, const void *data) release_shader_resources(state, 1u << WINED3D_SHADER_TYPE_COMPUTE); release_unordered_access_resources(state->shader[WINED3D_SHADER_TYPE_COMPUTE], state->unordered_access_view[WINED3D_PIPELINE_COMPUTE]); @@ -820,7 +822,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, -@@ -551,7 +973,11 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, +@@ -551,7 +975,11 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, const struct wined3d_state *state = &cs->device->state; struct wined3d_cs_dispatch *op; @@ -832,7 +834,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_DISPATCH; op->group_count_x = group_count_x; op->group_count_y = group_count_y; -@@ -564,9 +990,15 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, +@@ -564,9 +992,15 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, cs->ops->submit(cs); } @@ -848,7 +850,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c const struct wined3d_cs_draw *op = data; unsigned int i; -@@ -594,14 +1026,26 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) +@@ -594,14 +1028,26 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) } for (i = 0; i < cs->device->adapter->gl_info.limits.buffers; ++i) { @@ -875,7 +877,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned int start_idx, -@@ -611,7 +1055,11 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i +@@ -611,7 +1057,11 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i struct wined3d_cs_draw *op; unsigned int i; @@ -887,7 +889,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_DRAW; op->base_vertex_idx = base_vertex_idx; op->start_idx = start_idx; -@@ -634,11 +1082,19 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i +@@ -634,11 +1084,19 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i } for (i = 0; i < cs->device->adapter->gl_info.limits.buffers; ++i) { @@ -907,7 +909,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c acquire_shader_resources(state, ~(1u << WINED3D_SHADER_TYPE_COMPUTE)); acquire_unordered_access_resources(state->shader[WINED3D_SHADER_TYPE_PIXEL], state->unordered_access_view[WINED3D_PIPELINE_GRAPHICS]); -@@ -646,38 +1102,61 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i +@@ -646,38 +1104,61 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, int base_vertex_idx, unsigned i cs->ops->submit(cs); } @@ -969,7 +971,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_VIEWPORT; op->viewport = *viewport; -@@ -686,17 +1165,30 @@ void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_vi +@@ -686,17 +1167,30 @@ void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_vi } static void wined3d_cs_exec_set_scissor_rect(struct wined3d_cs *cs, const void *data) @@ -1000,7 +1002,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_SCISSOR_RECT; op->rect = *rect; -@@ -705,11 +1197,26 @@ void wined3d_cs_emit_set_scissor_rect(struct wined3d_cs *cs, const RECT *rect) +@@ -705,11 +1199,26 @@ void wined3d_cs_emit_set_scissor_rect(struct wined3d_cs *cs, const RECT *rect) } static void wined3d_cs_exec_set_rendertarget_view(struct wined3d_cs *cs, const void *data) @@ -1027,7 +1029,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int view_idx, -@@ -717,21 +1224,35 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v +@@ -717,21 +1226,35 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v { struct wined3d_cs_set_rendertarget_view *op; @@ -1063,7 +1065,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { struct wined3d_surface *prev_surface = wined3d_rendertarget_view_get_surface(prev); -@@ -743,7 +1264,11 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const +@@ -743,7 +1266,11 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const } } @@ -1075,7 +1077,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c if (!prev != !op->view) { -@@ -760,12 +1285,17 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const +@@ -760,12 +1287,17 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const } device_invalidate_state(device, STATE_FRAMEBUFFER); @@ -1093,7 +1095,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_DEPTH_STENCIL_VIEW; op->view = view; -@@ -774,17 +1304,30 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 +@@ -774,17 +1306,30 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 } static void wined3d_cs_exec_set_vertex_declaration(struct wined3d_cs *cs, const void *data) @@ -1124,7 +1126,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_VERTEX_DECLARATION; op->declaration = declaration; -@@ -793,6 +1336,14 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 +@@ -793,6 +1338,14 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 } static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void *data) @@ -1139,7 +1141,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_stream_source *op = data; struct wined3d_stream_state *stream; -@@ -810,6 +1361,10 @@ static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void +@@ -810,6 +1363,10 @@ static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void InterlockedDecrement(&prev->resource.bind_count); device_invalidate_state(cs->device, STATE_STREAMSRC); @@ -1150,7 +1152,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, -@@ -817,17 +1372,27 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, +@@ -817,17 +1374,27 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_source *op; @@ -1178,7 +1180,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_stream_source_freq *op = data; struct wined3d_stream_state *stream; -@@ -837,22 +1402,36 @@ static void wined3d_cs_exec_set_stream_source_freq(struct wined3d_cs *cs, const +@@ -837,22 +1404,36 @@ static void wined3d_cs_exec_set_stream_source_freq(struct wined3d_cs *cs, const stream->flags = op->flags; device_invalidate_state(cs->device, STATE_STREAMSRC); @@ -1215,7 +1217,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_stream_output *op = data; struct wined3d_stream_output *stream; -@@ -867,6 +1446,10 @@ static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void +@@ -867,6 +1448,10 @@ static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void InterlockedIncrement(&op->buffer->resource.bind_count); if (prev) InterlockedDecrement(&prev->resource.bind_count); @@ -1226,7 +1228,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, -@@ -874,16 +1457,26 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, +@@ -874,16 +1459,26 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_output *op; @@ -1253,7 +1255,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_index_buffer *op = data; struct wined3d_buffer *prev; -@@ -899,6 +1492,10 @@ static void wined3d_cs_exec_set_index_buffer(struct wined3d_cs *cs, const void * +@@ -899,6 +1494,10 @@ static void wined3d_cs_exec_set_index_buffer(struct wined3d_cs *cs, const void * InterlockedDecrement(&prev->resource.bind_count); device_invalidate_state(cs->device, STATE_INDEXBUFFER); @@ -1264,7 +1266,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buffer *buffer, -@@ -906,16 +1503,26 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff +@@ -906,16 +1505,26 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff { struct wined3d_cs_set_index_buffer *op; @@ -1291,7 +1293,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_constant_buffer *op = data; struct wined3d_buffer *prev; -@@ -929,6 +1536,9 @@ static void wined3d_cs_exec_set_constant_buffer(struct wined3d_cs *cs, const voi +@@ -929,6 +1538,9 @@ static void wined3d_cs_exec_set_constant_buffer(struct wined3d_cs *cs, const voi InterlockedDecrement(&prev->resource.bind_count); device_invalidate_state(cs->device, STATE_CONSTANT_BUFFER(op->type)); @@ -1301,7 +1303,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_shader_type type, -@@ -936,16 +1546,26 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha +@@ -936,16 +1548,26 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha { struct wined3d_cs_set_constant_buffer *op; @@ -1328,7 +1330,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info; const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; -@@ -1022,21 +1642,35 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) +@@ -1022,21 +1644,35 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) if (new_use_color_key) device_invalidate_state(cs->device, STATE_COLOR_KEY); @@ -1364,7 +1366,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_shader_resource_view *op = data; struct wined3d_shader_resource_view *prev; -@@ -1051,6 +1685,10 @@ static void wined3d_cs_exec_set_shader_resource_view(struct wined3d_cs *cs, cons +@@ -1051,6 +1687,10 @@ static void wined3d_cs_exec_set_shader_resource_view(struct wined3d_cs *cs, cons if (op->type != WINED3D_SHADER_TYPE_COMPUTE) device_invalidate_state(cs->device, STATE_SHADER_RESOURCE_BINDING); @@ -1375,7 +1377,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3d_shader_type type, -@@ -1058,16 +1696,26 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 +@@ -1058,16 +1698,26 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 { struct wined3d_cs_set_shader_resource_view *op; @@ -1402,7 +1404,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_unordered_access_view *op = data; struct wined3d_unordered_access_view *prev; -@@ -1081,6 +1729,10 @@ static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, con +@@ -1081,6 +1731,10 @@ static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, con InterlockedDecrement(&prev->resource->bind_count); device_invalidate_state(cs->device, STATE_UNORDERED_ACCESS_VIEW_BINDING(op->pipeline)); @@ -1413,7 +1415,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined3d_pipeline pipeline, -@@ -1088,21 +1740,35 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined +@@ -1088,21 +1742,35 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined { struct wined3d_cs_set_unordered_access_view *op; @@ -1449,7 +1451,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type type, -@@ -1110,16 +1776,26 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type +@@ -1110,16 +1778,26 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type { struct wined3d_cs_set_sampler *op; @@ -1476,7 +1478,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_shader *op = data; -@@ -1127,26 +1803,44 @@ static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) +@@ -1127,26 +1805,44 @@ static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) device_invalidate_state(cs->device, STATE_SHADER(op->type)); if (op->type != WINED3D_SHADER_TYPE_COMPUTE) device_invalidate_state(cs->device, STATE_SHADER_RESOURCE_BINDING); @@ -1521,7 +1523,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, -@@ -1154,6 +1848,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, +@@ -1154,6 +1850,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, { struct wined3d_cs_set_rasterizer_state *op; @@ -1529,7 +1531,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_RASTERIZER_STATE; op->state = rasterizer_state; -@@ -1162,31 +1857,57 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, +@@ -1162,31 +1859,57 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, } static void wined3d_cs_exec_set_render_state(struct wined3d_cs *cs, const void *data) @@ -1587,7 +1589,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, -@@ -1194,21 +1915,35 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, +@@ -1194,21 +1917,35 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, { struct wined3d_cs_set_texture_state *op; @@ -1623,7 +1625,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, -@@ -1216,22 +1951,36 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, +@@ -1216,22 +1953,36 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, { struct wined3d_cs_set_sampler_state *op; @@ -1660,7 +1662,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform_state state, -@@ -1239,35 +1988,59 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform +@@ -1239,35 +1990,59 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform { struct wined3d_cs_set_transform *op; @@ -1720,7 +1722,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { const struct wined3d_cs_set_color_key *op = data; struct wined3d_texture *texture = op->texture; -@@ -1328,6 +2101,10 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat +@@ -1328,6 +2103,10 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat break; } } @@ -1731,7 +1733,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture *texture, -@@ -1335,7 +2112,11 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture +@@ -1335,7 +2114,11 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture { struct wined3d_cs_set_color_key *op; @@ -1743,7 +1745,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_SET_COLOR_KEY; op->texture = texture; op->flags = flags; -@@ -1346,22 +2127,33 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture +@@ -1346,22 +2129,33 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture } else op->set = 0; @@ -1777,7 +1779,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_MATERIAL; op->material = *material; -@@ -1372,17 +2164,37 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma +@@ -1372,17 +2166,37 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data) { struct wined3d_adapter *adapter = cs->device->adapter; @@ -1815,7 +1817,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_RESET_STATE; -@@ -1390,17 +2202,32 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) +@@ -1390,17 +2204,32 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) } static void wined3d_cs_exec_destroy_object(struct wined3d_cs *cs, const void *data) @@ -1848,7 +1850,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_DESTROY_OBJECT; op->callback = callback; op->object = object; -@@ -1408,40 +2235,96 @@ void wined3d_cs_emit_destroy_object(struct wined3d_cs *cs, void (*callback)(void +@@ -1408,40 +2237,96 @@ void wined3d_cs_emit_destroy_object(struct wined3d_cs *cs, void (*callback)(void cs->ops->submit(cs); } @@ -1945,7 +1947,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_PRELOAD_RESOURCE; op->resource = resource; -@@ -1450,20 +2333,32 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso +@@ -1450,20 +2335,32 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso cs->ops->submit(cs); } @@ -1978,7 +1980,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_UNLOAD_RESOURCE; op->resource = resource; -@@ -1472,13 +2367,21 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou +@@ -1472,13 +2369,21 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou cs->ops->submit(cs); } @@ -2000,7 +2002,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx, -@@ -1487,7 +2390,11 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, +@@ -1487,7 +2392,11 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, struct wined3d_cs_map *op; HRESULT hr; @@ -2012,7 +2014,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->opcode = WINED3D_CS_OP_MAP; op->resource = resource; op->sub_resource_idx = sub_resource_idx; -@@ -1496,17 +2403,29 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, +@@ -1496,17 +2405,29 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, op->flags = flags; op->hr = &hr; @@ -2042,7 +2044,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c } HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx) -@@ -1514,19 +2433,805 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc +@@ -1514,19 +2435,811 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc struct wined3d_cs_unmap *op; HRESULT hr; @@ -2057,13 +2059,13 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op->hr = &hr; +#if !defined(STAGING_CSMT) - cs->ops->submit(cs); ++ cs->ops->submit(cs); +#else /* STAGING_CSMT */ + cs->ops->submit_and_wait(cs); - - return hr; - } - ++ ++ return hr; ++} ++ +static UINT wined3d_cs_exec_glfinish(struct wined3d_cs *cs, const void *data) +{ + const struct wined3d_cs_finish *op = data; @@ -2351,7 +2353,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + if (src_surface && src_surface != dst_surface) + wined3d_resource_acquire(&src_surface->container->resource); + -+ cs->ops->submit(cs); + cs->ops->submit(cs); +} + +static UINT wined3d_cs_exec_clear_rtv(struct wined3d_cs *cs, const void *data) @@ -2513,10 +2515,15 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + op->hr = &hr; + + cs->ops->submit_and_wait(cs); -+ -+ return hr; -+} -+ ++#endif /* STAGING_CSMT */ + + return hr; + } + ++#if !defined(STAGING_CSMT) + static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = + { ++#else /* STAGING_CSMT */ +static UINT wined3d_cs_exec_release_dc(struct wined3d_cs *cs, const void *data) +{ + const struct wined3d_cs_get_release_dc *op = data; @@ -2539,15 +2546,10 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + op->hr = &hr; + + cs->ops->submit_and_wait(cs); -+#endif /* STAGING_CSMT */ + + return hr; +} + -+#if !defined(STAGING_CSMT) - static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = - { -+#else /* STAGING_CSMT */ +static UINT wined3d_cs_exec_create_dummy_textures(struct wined3d_cs *cs, const void *data) +{ + const struct wined3d_cs_create_dummy_textures *op = data; @@ -2708,27 +2710,33 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + cs->ops->submit(cs); +} + -+static UINT wined3d_cs_exec_create_buffer_texture(struct wined3d_cs *cs, const void *data) ++static UINT wined3d_cs_exec_create_buffer_view(struct wined3d_cs *cs, const void *data) +{ -+ const struct wined3d_cs_create_buffer_texture *op = data; ++ const struct wined3d_cs_create_buffer_view *op = data; + -+ create_buffer_texture(op->view, op->buffer, op->view_format); ++ *op->hr = create_buffer_view(op->view, op->desc, op->buffer, op->view_format); + + return sizeof(*op); +} + -+void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) ++HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) +{ -+ struct wined3d_cs_create_buffer_texture *op; ++ struct wined3d_cs_create_buffer_view *op; ++ HRESULT hr; + + op = cs->ops->require_space(cs, sizeof(*op), 0); -+ op->opcode = WINED3D_CS_OP_CREATE_BUFFER_TEXTURE; ++ op->opcode = WINED3D_CS_OP_CREATE_BUFFER_VIEW; + op->view = view; ++ op->desc = desc; + op->buffer = buffer; + op->view_format = view_format; ++ op->hr = &hr; + + cs->ops->submit_and_wait(cs); ++ ++ return hr; +} + +static UINT wined3d_cs_exec_create_texture_view(struct wined3d_cs *cs, const void *data) @@ -2848,7 +2856,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c /* WINED3D_CS_OP_PRESENT */ wined3d_cs_exec_present, /* WINED3D_CS_OP_CLEAR */ wined3d_cs_exec_clear, /* WINED3D_CS_OP_DISPATCH */ wined3d_cs_exec_dispatch, -@@ -1558,13 +3263,43 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -1558,13 +3271,43 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_RESET_STATE */ wined3d_cs_exec_reset_state, /* WINED3D_CS_OP_DESTROY_OBJECT */ wined3d_cs_exec_destroy_object, /* WINED3D_CS_OP_QUERY_ISSUE */ wined3d_cs_exec_query_issue, @@ -2881,7 +2889,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c + /* WINED3D_CS_OP_SAMPLER_INIT */ wined3d_cs_exec_sampler_init, + /* WINED3D_CS_OP_TEXTURE_ADD_DIRTY_REGION */ wined3d_cs_exec_texture_add_dirty_region, + /* WINED3D_CS_OP_BUFFER_COPY */ wined3d_cs_exec_buffer_copy, -+ /* WINED3D_CS_OP_CREATE_BUFFER_TEXTURE */ wined3d_cs_exec_create_buffer_texture, ++ /* WINED3D_CS_OP_CREATE_BUFFER_VIEW */ wined3d_cs_exec_create_buffer_view, + /* WINED3D_CS_OP_CREATE_TEXTURE_VIEW */ wined3d_cs_exec_create_texture_view, + /* WINED3D_CS_OP_DELETE_GL_CONTEXTS */ wined3d_cs_exec_delete_gl_contexts, + /* WINED3D_CS_OP_MAP_vertex_buffers */ wined3d_cs_exec_map_vertex_buffers, @@ -2892,7 +2900,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c { if (size > cs->data_size) { -@@ -1588,6 +3323,7 @@ static void wined3d_cs_st_submit(struct wined3d_cs *cs) +@@ -1588,6 +3331,7 @@ static void wined3d_cs_st_submit(struct wined3d_cs *cs) wined3d_cs_op_handlers[opcode](cs, cs->data); } @@ -2900,7 +2908,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c static void wined3d_cs_st_push_constants(struct wined3d_cs *cs, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants) { -@@ -1628,15 +3364,161 @@ static void wined3d_cs_st_push_constants(struct wined3d_cs *cs, enum wined3d_pus +@@ -1628,15 +3372,161 @@ static void wined3d_cs_st_push_constants(struct wined3d_cs *cs, enum wined3d_pus for (i = 0, context_count = device->context_count; i < context_count; ++i) { device->contexts[i]->constant_update_mask |= push_constant_info[p].mask; @@ -3062,7 +3070,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) { -@@ -1646,34 +3528,97 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) +@@ -1646,34 +3536,97 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) if (!(cs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*cs)))) return NULL; @@ -4676,7 +4684,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 -@@ -3235,7 +3235,11 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 +@@ -3247,7 +3247,11 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 UINT i; memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ @@ -6053,31 +6061,31 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c const struct wined3d_view_desc *desc, struct wined3d_texture *texture, const struct wined3d_format *view_format) { -@@ -133,7 +137,11 @@ static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target +@@ -181,7 +185,11 @@ static void create_buffer_texture(struct wined3d_gl_view *view, context_release(context); } +#if !defined(STAGING_CSMT) - static void create_buffer_texture(struct wined3d_gl_view *view, + static HRESULT create_buffer_view(struct wined3d_gl_view *view, +#else /* STAGING_CSMT */ -+void create_buffer_texture(struct wined3d_gl_view *view, ++HRESULT create_buffer_view(struct wined3d_gl_view *view, +#endif /* STAGING_CSMT */ - struct wined3d_buffer *buffer, const struct wined3d_format *view_format) + const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, + const struct wined3d_format *view_format) { - const struct wined3d_gl_info *gl_info; -@@ -475,7 +483,11 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ - FIXME("Ignoring buffer range %u-%u.\n", desc->u.buffer.start_idx, desc->u.buffer.count); - } +@@ -515,7 +523,11 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ + struct wined3d_buffer *buffer = buffer_from_resource(resource); + HRESULT hr; +#if !defined(STAGING_CSMT) - create_buffer_texture(&view->gl_view, buffer, view_format); + if (FAILED(hr = create_buffer_view(&view->gl_view, desc, buffer, view_format))) +#else /* STAGING_CSMT */ -+ wined3d_cs_emit_create_buffer_texture(resource->device->cs, &view->gl_view, buffer, view_format); ++ if (FAILED(hr = wined3d_cs_emit_create_buffer_view(resource->device->cs, &view->gl_view, desc, buffer, view_format))) +#endif /* STAGING_CSMT */ - } + return hr; } else -@@ -506,7 +518,12 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ +@@ -546,7 +558,12 @@ static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_ else if (resource->format->typeless_id == view_format->typeless_id && resource->format->gl_view_class == view_format->gl_view_class) { @@ -6090,7 +6098,19 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c } else { -@@ -671,8 +688,13 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces +@@ -702,7 +719,11 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces + struct wined3d_buffer *buffer = buffer_from_resource(resource); + HRESULT hr; + ++#if !defined(STAGING_CSMT) + if (FAILED(hr = create_buffer_view(&view->gl_view, desc, buffer, view->format))) ++#else /* STAGING_CSMT */ ++ if (FAILED(hr = wined3d_cs_emit_create_buffer_view(resource->device->cs, &view->gl_view, desc, buffer, view->format))) ++#endif /* STAGING_CSMT */ + return hr; + } + else +@@ -724,8 +745,13 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces if (desc->u.texture.layer_idx || desc->u.texture.layer_count != depth_or_layer_count) { @@ -6153,7 +6173,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN; -@@ -1496,6 +1499,9 @@ struct wined3d_query +@@ -1497,6 +1500,9 @@ struct wined3d_query const void *data; DWORD data_size; const struct wined3d_query_ops *query_ops; @@ -6163,7 +6183,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; union wined3d_gl_query_object -@@ -1537,6 +1543,9 @@ struct wined3d_occlusion_query +@@ -1538,6 +1544,9 @@ struct wined3d_occlusion_query GLuint id; struct wined3d_context *context; UINT64 samples; @@ -6173,7 +6193,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; struct wined3d_timestamp_query -@@ -1552,6 +1561,38 @@ struct wined3d_timestamp_query +@@ -1553,6 +1562,38 @@ struct wined3d_timestamp_query void context_alloc_timestamp_query(struct wined3d_context *context, struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN; void context_free_timestamp_query(struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN; @@ -6212,7 +6232,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_context { const struct wined3d_gl_info *gl_info; -@@ -1567,6 +1608,9 @@ struct wined3d_context +@@ -1568,6 +1609,9 @@ struct wined3d_context DWORD numDirtyEntries; DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */ unsigned int dirty_compute_states[STATE_COMPUTE_COUNT / (sizeof(unsigned int) * CHAR_BIT) + 1]; @@ -6222,7 +6242,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_device *device; struct wined3d_swapchain *swapchain; -@@ -1680,12 +1724,14 @@ struct wined3d_context +@@ -1681,12 +1725,14 @@ struct wined3d_context GLuint dummy_arbfp_prog; }; @@ -6237,7 +6257,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h typedef void (*APPLYSTATEFUNC)(struct wined3d_context *ctx, const struct wined3d_state *state, DWORD state_id); struct StateEntry -@@ -1824,7 +1870,11 @@ void context_alloc_event_query(struct wined3d_context *context, +@@ -1825,7 +1871,11 @@ void context_alloc_event_query(struct wined3d_context *context, void context_alloc_occlusion_query(struct wined3d_context *context, struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN; void context_apply_blit_state(struct wined3d_context *context, const struct wined3d_device *device) DECLSPEC_HIDDEN; @@ -6249,7 +6269,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h UINT rt_count, const struct wined3d_fb_state *fb) DECLSPEC_HIDDEN; void context_apply_compute_state(struct wined3d_context *context, const struct wined3d_device *device, const struct wined3d_state *state) DECLSPEC_HIDDEN; -@@ -2507,7 +2557,11 @@ struct wined3d_stream_state +@@ -2510,7 +2560,11 @@ struct wined3d_stream_state struct wined3d_state { DWORD flags; @@ -6261,7 +6281,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_vertex_declaration *vertex_declaration; struct wined3d_stream_output stream_output[MAX_STREAM_OUT]; -@@ -2555,6 +2609,16 @@ struct wined3d_state +@@ -2558,6 +2612,16 @@ struct wined3d_state struct wined3d_rasterizer_state *rasterizer_state; }; @@ -6278,7 +6298,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h #define WINED3D_UNMAPPED_STAGE ~0U /* Multithreaded flag. Removed from the public header to signal that -@@ -2613,7 +2677,9 @@ struct wined3d_device +@@ -2616,7 +2680,9 @@ struct wined3d_device struct wine_rb_tree samplers; /* Render Target Support */ @@ -6288,7 +6308,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_rendertarget_view *auto_depth_stencil_view; /* For rendering to a texture using glCopyTexImage */ -@@ -2669,6 +2735,17 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL +@@ -2672,6 +2738,17 @@ 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; @@ -6306,7 +6326,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h static inline BOOL isStateDirty(const struct wined3d_context *context, DWORD state) { -@@ -2744,11 +2821,13 @@ static inline void wined3d_resource_release(struct wined3d_resource *resource) +@@ -2747,11 +2824,13 @@ static inline void wined3d_resource_release(struct wined3d_resource *resource) InterlockedDecrement(&resource->access_count); } @@ -6320,7 +6340,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void resource_cleanup(struct wined3d_resource *resource) DECLSPEC_HIDDEN; HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *device, enum wined3d_resource_type type, const struct wined3d_format *format, -@@ -2859,7 +2938,11 @@ struct wined3d_texture +@@ -2862,7 +2941,11 @@ struct wined3d_texture unsigned int map_count; DWORD locations; @@ -6332,7 +6352,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h } sub_resources[1]; }; -@@ -2912,9 +2995,16 @@ void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, +@@ -2915,9 +2998,16 @@ void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN; BOOL wined3d_texture_check_block_align(const struct wined3d_texture *texture, unsigned int level, const struct wined3d_box *box) DECLSPEC_HIDDEN; @@ -6349,7 +6369,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_texture_invalidate_location(struct wined3d_texture *texture, unsigned int sub_resource_idx, DWORD location) DECLSPEC_HIDDEN; void wined3d_texture_load(struct wined3d_texture *texture, -@@ -2927,6 +3017,10 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned +@@ -2930,6 +3020,10 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN; void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN; @@ -6360,7 +6380,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_texture_set_map_binding(struct wined3d_texture *texture, DWORD map_binding) DECLSPEC_HIDDEN; void wined3d_texture_set_swapchain(struct wined3d_texture *texture, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; -@@ -3034,6 +3128,11 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P +@@ -3037,6 +3131,11 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P void wined3d_surface_upload_data(struct wined3d_surface *surface, const struct wined3d_gl_info *gl_info, const struct wined3d_format *format, const RECT *src_rect, UINT src_pitch, const POINT *dst_point, BOOL srgb, const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN; @@ -6372,7 +6392,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN; -@@ -3048,6 +3147,10 @@ struct wined3d_sampler +@@ -3051,6 +3150,10 @@ struct wined3d_sampler GLuint name; }; @@ -6383,7 +6403,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_vertex_declaration_element { const struct wined3d_format *format; -@@ -3143,9 +3246,14 @@ struct wined3d_stateblock +@@ -3146,9 +3249,14 @@ struct wined3d_stateblock void stateblock_init_contained_states(struct wined3d_stateblock *stateblock) DECLSPEC_HIDDEN; void state_cleanup(struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -6398,7 +6418,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN; enum wined3d_push_constants -@@ -3158,6 +3266,7 @@ enum wined3d_push_constants +@@ -3161,6 +3269,7 @@ enum wined3d_push_constants WINED3D_PUSH_CONSTANTS_PS_B, }; @@ -6406,7 +6426,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_cs_ops { void *(*require_space)(struct wined3d_cs *cs, size_t size); -@@ -3165,34 +3274,129 @@ struct wined3d_cs_ops +@@ -3168,34 +3277,130 @@ struct wined3d_cs_ops void (*push_constants)(struct wined3d_cs *cs, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants); }; @@ -6495,8 +6515,9 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h +void wined3d_cs_emit_clear_rtv(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view, + const RECT *rect, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil, + const struct blit_shader *blitter) DECLSPEC_HIDDEN; -+void wined3d_cs_emit_create_buffer_texture(struct wined3d_cs *cs, struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) DECLSPEC_HIDDEN; ++HRESULT wined3d_cs_emit_create_buffer_view(struct wined3d_cs *cs, struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) DECLSPEC_HIDDEN; +void wined3d_cs_emit_create_dummy_textures(struct wined3d_cs *cs) DECLSPEC_HIDDEN; +HRESULT wined3d_cs_emit_create_swapchain_context(struct wined3d_cs *cs, + struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -6536,7 +6557,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const struct wined3d_vec4 *plane) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture *texture, -@@ -3203,9 +3407,17 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, +@@ -3206,9 +3411,17 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buffer *buffer, enum wined3d_format_id format_id, unsigned int offset) DECLSPEC_HIDDEN; @@ -6554,7 +6575,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, struct wined3d_rasterizer_state *rasterizer_state) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, -@@ -3237,17 +3449,35 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined +@@ -3240,17 +3453,35 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_viewport *viewport) DECLSPEC_HIDDEN; @@ -6590,13 +6611,14 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other * fixed function semantics as D3DCOLOR or FLOAT16 */ -@@ -3348,6 +3578,14 @@ struct wined3d_gl_view +@@ -3351,6 +3582,15 @@ struct wined3d_gl_view GLuint name; }; +#if defined(STAGING_CSMT) -+void create_buffer_texture(struct wined3d_gl_view *view, -+ struct wined3d_buffer *buffer, const struct wined3d_format *view_format) DECLSPEC_HIDDEN; ++HRESULT create_buffer_view(struct wined3d_gl_view *view, ++ const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, ++ const struct wined3d_format *view_format) DECLSPEC_HIDDEN; +void create_texture_view(struct wined3d_gl_view *view, GLenum view_target, + const struct wined3d_view_desc *desc, struct wined3d_texture *texture, + const struct wined3d_format *view_format) DECLSPEC_HIDDEN; @@ -6605,7 +6627,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_shader_resource_view { LONG refcount; -@@ -3383,7 +3621,12 @@ void wined3d_unordered_access_view_invalidate_location(struct wined3d_unordered_ +@@ -3386,7 +3626,12 @@ void wined3d_unordered_access_view_invalidate_location(struct wined3d_unordered_ struct wined3d_swapchain_ops { void (*swapchain_present)(struct wined3d_swapchain *swapchain, @@ -6618,7 +6640,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void (*swapchain_frontbuffer_updated)(struct wined3d_swapchain *swapchain); }; -@@ -3420,6 +3663,10 @@ struct wined3d_swapchain +@@ -3423,6 +3668,10 @@ struct wined3d_swapchain void wined3d_swapchain_activate(struct wined3d_swapchain *swapchain, BOOL activate) DECLSPEC_HIDDEN; struct wined3d_context *swapchain_get_context(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;