Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/device.c | 46 +++++++++++++++++++++++---------------- dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ 3 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 9766dfada2d..4041a7c0d7f 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1224,27 +1224,9 @@ UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device void CDECL wined3d_device_set_stream_output(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer, UINT offset) { - struct wined3d_stream_output *stream; - struct wined3d_buffer *prev_buffer; - TRACE("device %p, idx %u, buffer %p, offset %u.\n", device, idx, buffer, offset);
- if (idx >= WINED3D_MAX_STREAM_OUTPUT_BUFFERS) - { - WARN("Invalid stream output %u.\n", idx); - return; - } - - stream = &device->cs->c.state->stream_output[idx]; - prev_buffer = stream->buffer; - - if (buffer) - wined3d_buffer_incref(buffer); - stream->buffer = buffer; - stream->offset = offset; - wined3d_device_context_emit_set_stream_output(&device->cs->c, idx, buffer, offset); - if (prev_buffer) - wined3d_buffer_decref(prev_buffer); + wined3d_device_context_set_stream_output(&device->cs->c, idx, buffer, offset); }
struct wined3d_buffer * CDECL wined3d_device_get_stream_output(struct wined3d_device *device, @@ -2389,6 +2371,32 @@ void CDECL wined3d_device_context_set_vertex_declaration(struct wined3d_device_c wined3d_vertex_declaration_decref(prev); }
+void CDECL wined3d_device_context_set_stream_output(struct wined3d_device_context *context, unsigned int idx, + struct wined3d_buffer *buffer, unsigned int offset) +{ + struct wined3d_stream_output *stream; + struct wined3d_buffer *prev_buffer; + + TRACE("context %p, idx %u, buffer %p, offset %u.\n", context, idx, buffer, offset); + + if (idx >= WINED3D_MAX_STREAM_OUTPUT_BUFFERS) + { + WARN("Invalid stream output %u.\n", idx); + return; + } + + stream = &context->state->stream_output[idx]; + prev_buffer = stream->buffer; + + if (buffer) + wined3d_buffer_incref(buffer); + stream->buffer = buffer; + stream->offset = offset; + wined3d_device_context_emit_set_stream_output(context, idx, buffer, offset); + if (prev_buffer) + wined3d_buffer_decref(prev_buffer); +} + void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) { TRACE("device %p, shader %p.\n", device, shader); diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index fb9973354a0..289716d1ae2 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -178,6 +178,7 @@ @ cdecl wined3d_device_context_set_scissor_rects(ptr long ptr) @ cdecl wined3d_device_context_set_shader(ptr long ptr) @ cdecl wined3d_device_context_set_shader_resource_view(ptr long long ptr) +@ cdecl wined3d_device_context_set_stream_output(ptr long ptr long) @ cdecl wined3d_device_context_set_stream_source(ptr long ptr long long) @ cdecl wined3d_device_context_set_unordered_access_view(ptr long long ptr long) @ cdecl wined3d_device_context_set_vertex_declaration(ptr ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 1f8b4a89648..385ac7a8a07 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2579,6 +2579,8 @@ void __cdecl wined3d_device_context_set_shader(struct wined3d_device_context *co enum wined3d_shader_type type, struct wined3d_shader *shader); void __cdecl wined3d_device_context_set_shader_resource_view(struct wined3d_device_context *context, enum wined3d_shader_type type, unsigned int idx, struct wined3d_shader_resource_view *view); +void __cdecl wined3d_device_context_set_stream_output(struct wined3d_device_context *context, unsigned int idx, + struct wined3d_buffer *buffer, unsigned int offset); HRESULT __cdecl wined3d_device_context_set_stream_source(struct wined3d_device_context *context, unsigned int stream_idx, struct wined3d_buffer *buffer, unsigned int offset, unsigned int stride); void __cdecl wined3d_device_context_set_unordered_access_view(struct wined3d_device_context *context,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/d3d11/device.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index 67781c57ef5..5b52eba859a 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -1053,7 +1053,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetDepthStencilState(ID3 static void STDMETHODCALLTYPE d3d11_immediate_context_SOSetTargets(ID3D11DeviceContext1 *iface, UINT buffer_count, ID3D11Buffer *const *buffers, const UINT *offsets) { - struct d3d_device *device = device_from_immediate_ID3D11DeviceContext1(iface); + struct d3d11_immediate_context *context = impl_from_ID3D11DeviceContext1(iface); unsigned int count, i;
TRACE("iface %p, buffer_count %u, buffers %p, offsets %p.\n", iface, buffer_count, buffers, offsets); @@ -1064,12 +1064,12 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_SOSetTargets(ID3D11DeviceC { struct d3d_buffer *buffer = unsafe_impl_from_ID3D11Buffer(buffers[i]);
- wined3d_device_set_stream_output(device->wined3d_device, i, + wined3d_device_context_set_stream_output(context->wined3d_context, i, buffer ? buffer->wined3d_buffer : NULL, offsets ? offsets[i] : 0); } for (; i < D3D11_SO_BUFFER_SLOT_COUNT; ++i) { - wined3d_device_set_stream_output(device->wined3d_device, i, NULL, 0); + wined3d_device_context_set_stream_output(context->wined3d_context, i, NULL, 0); } wined3d_mutex_unlock(); } @@ -2635,7 +2635,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_ClearState(ID3D11DeviceCon ID3D11DeviceContext1_RSSetState(iface, NULL); for (i = 0; i < D3D11_SO_BUFFER_SLOT_COUNT; ++i) { - wined3d_device_set_stream_output(device->wined3d_device, i, NULL, 0); + wined3d_device_context_set_stream_output(context->wined3d_context, i, NULL, 0); } wined3d_device_context_set_predication(context->wined3d_context, NULL, FALSE); wined3d_mutex_unlock();
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 9 ++++----- dlls/wined3d/device.c | 2 +- dlls/wined3d/wined3d.spec | 1 + dlls/wined3d/wined3d_private.h | 2 -- include/wine/wined3d.h | 2 ++ 5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 6bf9827d3e1..12db34d1d0f 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -891,22 +891,21 @@ static void acquire_compute_pipeline_resources(const struct wined3d_state *state state->unordered_access_view[WINED3D_PIPELINE_COMPUTE]); }
-void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, +void CDECL wined3d_device_context_dispatch(struct wined3d_device_context *context, unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z) { - const struct wined3d_state *state = cs->c.state; struct wined3d_cs_dispatch *op;
- op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DISPATCH; op->parameters.indirect = FALSE; op->parameters.u.direct.group_count_x = group_count_x; op->parameters.u.direct.group_count_y = group_count_y; op->parameters.u.direct.group_count_z = group_count_z;
- acquire_compute_pipeline_resources(state); + acquire_compute_pipeline_resources(context->state);
- wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT); }
void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 4041a7c0d7f..b96a0382c6a 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4401,7 +4401,7 @@ void CDECL wined3d_device_dispatch_compute(struct wined3d_device *device, TRACE("device %p, group_count_x %u, group_count_y %u, group_count_z %u.\n", device, group_count_x, group_count_y, group_count_z);
- wined3d_cs_emit_dispatch(device->cs, group_count_x, group_count_y, group_count_z); + wined3d_device_context_dispatch(&device->cs->c, group_count_x, group_count_y, group_count_z); }
void CDECL wined3d_device_dispatch_compute_indirect(struct wined3d_device *device, diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 289716d1ae2..c735587abc6 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -166,6 +166,7 @@ @ cdecl wined3d_device_update_texture(ptr ptr ptr) @ cdecl wined3d_device_validate_device(ptr ptr)
+@ cdecl wined3d_device_context_dispatch(ptr long long long) @ cdecl wined3d_device_context_set_blend_state(ptr ptr ptr long) @ cdecl wined3d_device_context_set_constant_buffer(ptr long long ptr) @ cdecl wined3d_device_context_set_depth_stencil_state(ptr ptr long) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 4c15f6ab178..dd6d2cbab5c 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4735,8 +4735,6 @@ void wined3d_cs_emit_clear_unordered_access_view_uint(struct wined3d_cs *cs, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value) DECLSPEC_HIDDEN; void wined3d_cs_emit_copy_uav_counter(struct wined3d_cs *cs, struct wined3d_buffer *dst_buffer, unsigned int offset, struct wined3d_unordered_access_view *uav) DECLSPEC_HIDDEN; -void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, - unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z) DECLSPEC_HIDDEN; void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, struct wined3d_buffer *buffer, unsigned int offset) DECLSPEC_HIDDEN; void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type primitive_type, diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 385ac7a8a07..f4fafafa80a 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2555,6 +2555,8 @@ HRESULT __cdecl wined3d_device_update_texture(struct wined3d_device *device, struct wined3d_texture *src_texture, struct wined3d_texture *dst_texture); HRESULT __cdecl wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes);
+void __cdecl wined3d_device_context_dispatch(struct wined3d_device_context *context, + unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z); void __cdecl wined3d_device_context_set_blend_state(struct wined3d_device_context *context, struct wined3d_blend_state *state, const struct wined3d_color *blend_factor, unsigned int sample_mask); void __cdecl wined3d_device_context_set_constant_buffer(struct wined3d_device_context *context,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/d3d11/device.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index 5b52eba859a..a94ccc7340e 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -1114,13 +1114,13 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_DrawInstancedIndirect(ID3D static void STDMETHODCALLTYPE d3d11_immediate_context_Dispatch(ID3D11DeviceContext1 *iface, UINT thread_group_count_x, UINT thread_group_count_y, UINT thread_group_count_z) { - struct d3d_device *device = device_from_immediate_ID3D11DeviceContext1(iface); + struct d3d11_immediate_context *context = impl_from_ID3D11DeviceContext1(iface);
TRACE("iface %p, thread_group_count_x %u, thread_group_count_y %u, thread_group_count_z %u.\n", iface, thread_group_count_x, thread_group_count_y, thread_group_count_z);
wined3d_mutex_lock(); - wined3d_device_dispatch_compute(device->wined3d_device, + wined3d_device_context_dispatch(context->wined3d_context, thread_group_count_x, thread_group_count_y, thread_group_count_z); wined3d_mutex_unlock(); }
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 9 ++++----- dlls/wined3d/device.c | 2 +- dlls/wined3d/wined3d.spec | 1 + dlls/wined3d/wined3d_private.h | 2 -- include/wine/wined3d.h | 2 ++ 5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 12db34d1d0f..390a97a64d3 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -908,22 +908,21 @@ void CDECL wined3d_device_context_dispatch(struct wined3d_device_context *contex wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT); }
-void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, +void CDECL wined3d_device_context_dispatch_indirect(struct wined3d_device_context *context, struct wined3d_buffer *buffer, unsigned int offset) { - const struct wined3d_state *state = cs->c.state; struct wined3d_cs_dispatch *op;
- op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DISPATCH; op->parameters.indirect = TRUE; op->parameters.u.indirect.buffer = buffer; op->parameters.u.indirect.offset = offset;
- acquire_compute_pipeline_resources(state); + acquire_compute_pipeline_resources(context->state); wined3d_resource_acquire(&buffer->resource);
- wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index b96a0382c6a..7e123661cdb 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4409,7 +4409,7 @@ void CDECL wined3d_device_dispatch_compute_indirect(struct wined3d_device *devic { TRACE("device %p, buffer %p, offset %u.\n", device, buffer, offset);
- wined3d_cs_emit_dispatch_indirect(device->cs, buffer, offset); + wined3d_device_context_dispatch_indirect(&device->cs->c, buffer, offset); }
void CDECL wined3d_device_set_primitive_type(struct wined3d_device *device, diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index c735587abc6..3b5945076d6 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -167,6 +167,7 @@ @ cdecl wined3d_device_validate_device(ptr ptr)
@ cdecl wined3d_device_context_dispatch(ptr long long long) +@ cdecl wined3d_device_context_dispatch_indirect(ptr ptr long) @ cdecl wined3d_device_context_set_blend_state(ptr ptr ptr long) @ cdecl wined3d_device_context_set_constant_buffer(ptr long long ptr) @ cdecl wined3d_device_context_set_depth_stencil_state(ptr ptr long) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index dd6d2cbab5c..f0205a41c7e 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4735,8 +4735,6 @@ void wined3d_cs_emit_clear_unordered_access_view_uint(struct wined3d_cs *cs, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value) DECLSPEC_HIDDEN; void wined3d_cs_emit_copy_uav_counter(struct wined3d_cs *cs, struct wined3d_buffer *dst_buffer, unsigned int offset, struct wined3d_unordered_access_view *uav) DECLSPEC_HIDDEN; -void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, - struct wined3d_buffer *buffer, unsigned int offset) DECLSPEC_HIDDEN; void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type primitive_type, unsigned int patch_vertex_count, int base_vertex_idx, unsigned int start_idx, unsigned int index_count, unsigned int start_instance, unsigned int instance_count, bool indexed) DECLSPEC_HIDDEN; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index f4fafafa80a..a78590413ac 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2557,6 +2557,8 @@ HRESULT __cdecl wined3d_device_validate_device(const struct wined3d_device *devi
void __cdecl wined3d_device_context_dispatch(struct wined3d_device_context *context, unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z); +void __cdecl wined3d_device_context_dispatch_indirect(struct wined3d_device_context *context, + struct wined3d_buffer *buffer, unsigned int offset); void __cdecl wined3d_device_context_set_blend_state(struct wined3d_device_context *context, struct wined3d_blend_state *state, const struct wined3d_color *blend_factor, unsigned int sample_mask); void __cdecl wined3d_device_context_set_constant_buffer(struct wined3d_device_context *context,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/d3d11/device.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index a94ccc7340e..5f1e52644a2 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -1128,7 +1128,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_Dispatch(ID3D11DeviceConte static void STDMETHODCALLTYPE d3d11_immediate_context_DispatchIndirect(ID3D11DeviceContext1 *iface, ID3D11Buffer *buffer, UINT offset) { - struct d3d_device *device = device_from_immediate_ID3D11DeviceContext1(iface); + struct d3d11_immediate_context *context = impl_from_ID3D11DeviceContext1(iface); struct d3d_buffer *buffer_impl;
TRACE("iface %p, buffer %p, offset %u.\n", iface, buffer, offset); @@ -1136,8 +1136,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_DispatchIndirect(ID3D11Dev buffer_impl = unsafe_impl_from_ID3D11Buffer(buffer);
wined3d_mutex_lock(); - wined3d_device_dispatch_compute_indirect(device->wined3d_device, - buffer_impl->wined3d_buffer, offset); + wined3d_device_context_dispatch_indirect(context->wined3d_context, buffer_impl->wined3d_buffer, offset); wined3d_mutex_unlock(); }
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com