Signed-off-by: Zebediah Figura z.figura12@gmail.com --- Apologies for the large series of large patches...
dlls/wined3d/adapter_gl.c | 2 +- dlls/wined3d/adapter_vk.c | 2 +- dlls/wined3d/cs.c | 54 ++++++++++++++++++++++------------ dlls/wined3d/wined3d_private.h | 23 ++++++++++----- 4 files changed, 53 insertions(+), 28 deletions(-)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c index e12a1ff13b7..59a925717e9 100644 --- a/dlls/wined3d/adapter_gl.c +++ b/dlls/wined3d/adapter_gl.c @@ -4807,7 +4807,7 @@ static void wined3d_view_gl_destroy(struct wined3d_device *device,
wined3d_cs_destroy_object(device->cs, wined3d_view_gl_destroy_object, ctx); if (ctx == &c) - device->cs->ops->finish(device->cs, WINED3D_CS_QUEUE_DEFAULT); + device->cs->c.ops->finish(&device->cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void adapter_gl_destroy_rendertarget_view(struct wined3d_rendertarget_view *view) diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 8c79cc05058..8ba912eaee6 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -1394,7 +1394,7 @@ static void wined3d_view_vk_destroy(struct wined3d_device *device, VkBufferView
wined3d_cs_destroy_object(device->cs, wined3d_view_vk_destroy_object, ctx); if (ctx == &c) - device->cs->ops->finish(device->cs, WINED3D_CS_QUEUE_DEFAULT); + device->cs->c.ops->finish(&device->cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void adapter_vk_destroy_rendertarget_view(struct wined3d_rendertarget_view *view) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 4ee3d97b7fc..12a0230b361 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -458,12 +458,12 @@ struct wined3d_cs_stop static inline void *wined3d_cs_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id) { - return cs->ops->require_space(cs, size, queue_id); + return cs->c.ops->require_space(&cs->c, size, queue_id); }
static inline void wined3d_cs_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) { - cs->ops->submit(cs, queue_id); + cs->c.ops->submit(&cs->c, queue_id); }
static const char *debug_cs_op(enum wined3d_cs_op op) @@ -2023,9 +2023,15 @@ wined3d_cs_push_constant_info[] = {FIELD_OFFSET(struct wined3d_state, ps_consts_b), sizeof(BOOL), WINED3D_SHADER_CONST_PS_B}, };
-static void wined3d_cs_st_push_constants(struct wined3d_cs *cs, enum wined3d_push_constants p, +static struct wined3d_cs *wined3d_cs_from_context(struct wined3d_device_context *context) +{ + return CONTAINING_RECORD(context, struct wined3d_cs, c); +} + +static void wined3d_cs_st_push_constants(struct wined3d_device_context *context, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); struct wined3d_device *device = cs->device; unsigned int context_count; unsigned int i; @@ -2048,12 +2054,13 @@ static void wined3d_cs_exec_push_constants(struct wined3d_cs *cs, const void *da { const struct wined3d_cs_push_constants *op = data;
- wined3d_cs_st_push_constants(cs, op->type, op->start_idx, op->count, op->constants); + wined3d_cs_st_push_constants(&cs->c, op->type, op->start_idx, op->count, op->constants); }
-static void wined3d_cs_mt_push_constants(struct wined3d_cs *cs, enum wined3d_push_constants p, +static void wined3d_cs_mt_push_constants(struct wined3d_device_context *context, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); struct wined3d_cs_push_constants *op; size_t size;
@@ -2669,8 +2676,11 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_GENERATE_MIPMAPS */ wined3d_cs_exec_generate_mipmaps, };
-static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id) +static void *wined3d_cs_st_require_space(struct wined3d_device_context *context, + size_t size, enum wined3d_cs_queue_id queue_id) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); + if (size > (cs->data_size - cs->end)) { size_t new_size; @@ -2694,8 +2704,9 @@ static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size, enu return (BYTE *)cs->data + cs->start; }
-static void wined3d_cs_st_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static void wined3d_cs_st_submit(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); enum wined3d_cs_op opcode; size_t start; BYTE *data; @@ -2716,11 +2727,11 @@ static void wined3d_cs_st_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id heap_free(data); }
-static void wined3d_cs_st_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static void wined3d_cs_st_finish(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id) { }
-static const struct wined3d_cs_ops wined3d_cs_st_ops = +static const struct wined3d_device_context_ops wined3d_cs_st_ops = { wined3d_cs_st_require_space, wined3d_cs_st_submit, @@ -2747,10 +2758,12 @@ static void wined3d_cs_queue_submit(struct wined3d_cs_queue *queue, struct wined SetEvent(cs->event); }
-static void wined3d_cs_mt_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static void wined3d_cs_mt_submit(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); + if (cs->thread_id == GetCurrentThreadId()) - return wined3d_cs_st_submit(cs, queue_id); + return wined3d_cs_st_submit(context, queue_id);
wined3d_cs_queue_submit(&cs->queue[queue_id], cs); } @@ -2817,24 +2830,29 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size return packet->data; }
-static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id) +static void *wined3d_cs_mt_require_space(struct wined3d_device_context *context, + size_t size, enum wined3d_cs_queue_id queue_id) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); + if (cs->thread_id == GetCurrentThreadId()) - return wined3d_cs_st_require_space(cs, size, queue_id); + return wined3d_cs_st_require_space(context, size, queue_id);
return wined3d_cs_queue_require_space(&cs->queue[queue_id], size, cs); }
-static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static void wined3d_cs_mt_finish(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id) { + struct wined3d_cs *cs = wined3d_cs_from_context(context); + if (cs->thread_id == GetCurrentThreadId()) - return wined3d_cs_st_finish(cs, queue_id); + return wined3d_cs_st_finish(context, queue_id);
while (cs->queue[queue_id].head != *(volatile LONG *)&cs->queue[queue_id].tail) YieldProcessor(); }
-static const struct wined3d_cs_ops wined3d_cs_mt_ops = +static const struct wined3d_device_context_ops wined3d_cs_mt_ops = { wined3d_cs_mt_require_space, wined3d_cs_mt_submit, @@ -2969,7 +2987,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) if (!(cs = heap_alloc_zero(sizeof(*cs)))) return NULL;
- cs->ops = &wined3d_cs_st_ops; + cs->c.ops = &wined3d_cs_st_ops; cs->device = device; cs->serialize_commands = TRACE_ON(d3d_sync) || wined3d_settings.cs_multithreaded & WINED3D_CSMT_SERIALIZE;
@@ -2982,7 +3000,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) if (wined3d_settings.cs_multithreaded & WINED3D_CSMT_ENABLE && !RtlIsCriticalSectionLockedByThread(NtCurrentTeb()->Peb->LoaderLock)) { - cs->ops = &wined3d_cs_mt_ops; + cs->c.ops = &wined3d_cs_mt_ops;
if (!(cs->event = CreateEventW(NULL, FALSE, FALSE, NULL))) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 56d3ef8fea2..3c77c295027 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -89,6 +89,7 @@ struct wined3d_adapter; struct wined3d_buffer_vk; struct wined3d_context; struct wined3d_context_vk; +struct wined3d_device_context; struct wined3d_gl_info; struct wined3d_state; struct wined3d_swapchain_gl; @@ -4671,18 +4672,24 @@ struct wined3d_cs_queue BYTE data[WINED3D_CS_QUEUE_SIZE]; };
-struct wined3d_cs_ops +struct wined3d_device_context_ops { - void *(*require_space)(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id); - void (*submit)(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id); - void (*finish)(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id); - void (*push_constants)(struct wined3d_cs *cs, enum wined3d_push_constants p, + void *(*require_space)(struct wined3d_device_context *context, size_t size, enum wined3d_cs_queue_id queue_id); + void (*submit)(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id); + void (*finish)(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id); + void (*push_constants)(struct wined3d_device_context *context, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants); };
+struct wined3d_device_context +{ + const struct wined3d_device_context_ops *ops; +}; + struct wined3d_cs { - const struct wined3d_cs_ops *ops; + struct wined3d_device_context c; + struct wined3d_device *device; struct wined3d_state state; HMODULE wined3d_module; @@ -4800,13 +4807,13 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc
static inline void wined3d_cs_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) { - cs->ops->finish(cs, queue_id); + cs->c.ops->finish(&cs->c, queue_id); }
static inline void wined3d_cs_push_constants(struct wined3d_cs *cs, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants) { - cs->ops->push_constants(cs, p, start_idx, count, constants); + cs->c.ops->push_constants(&cs->c, p, start_idx, count, constants); }
static inline void wined3d_resource_wait_idle(struct wined3d_resource *resource)
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 107 +++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 53 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 12a0230b361..49433471d00 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -461,9 +461,10 @@ static inline void *wined3d_cs_require_space(struct wined3d_cs *cs, return cs->c.ops->require_space(&cs->c, size, queue_id); }
-static inline void wined3d_cs_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static inline void wined3d_device_context_submit(struct wined3d_device_context *context, + enum wined3d_cs_queue_id queue_id) { - cs->c.ops->submit(&cs->c, queue_id); + context->ops->submit(context, queue_id); }
static const char *debug_cs_op(enum wined3d_cs_op op) @@ -641,7 +642,7 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw wined3d_resource_acquire(&swapchain->back_buffers[i]->resource); }
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT);
/* Limit input latency by limiting the number of presents that we can get * ahead of the worker thread. */ @@ -711,7 +712,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * wined3d_resource_acquire(view->resource); }
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
void wined3d_cs_emit_clear_rendertarget_view(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view, @@ -747,7 +748,7 @@ void wined3d_cs_emit_clear_rendertarget_view(struct wined3d_cs *cs, struct wined
wined3d_resource_acquire(view->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); if (flags & WINED3DCLEAR_SYNCHRONOUS) wined3d_cs_finish(cs, WINED3D_CS_QUEUE_DEFAULT); } @@ -898,7 +899,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs,
acquire_compute_pipeline_resources(state);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, @@ -916,7 +917,7 @@ void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, acquire_compute_pipeline_resources(state); wined3d_resource_acquire(&buffer->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) @@ -1062,7 +1063,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type pri
acquire_graphics_pipeline_resources(state, indexed, d3d_info);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, enum wined3d_primitive_type primitive_type, @@ -1084,7 +1085,7 @@ void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, enum wined3d_primitive acquire_graphics_pipeline_resources(state, indexed, d3d_info); wined3d_resource_acquire(&buffer->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_flush(struct wined3d_cs *cs, const void *data) @@ -1103,7 +1104,7 @@ void wined3d_cs_emit_flush(struct wined3d_cs *cs) op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_FLUSH;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); cs->queries_flushed = TRUE; }
@@ -1124,7 +1125,7 @@ void wined3d_cs_emit_set_predication(struct wined3d_cs *cs, struct wined3d_query op->predicate = predicate; op->value = value;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_viewports(struct wined3d_cs *cs, const void *data) @@ -1150,7 +1151,7 @@ void wined3d_cs_emit_set_viewports(struct wined3d_cs *cs, unsigned int viewport_ memcpy(op->viewports, viewports, viewport_count * sizeof(*viewports)); op->viewport_count = viewport_count;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_scissor_rects(struct wined3d_cs *cs, const void *data) @@ -1175,7 +1176,7 @@ void wined3d_cs_emit_set_scissor_rects(struct wined3d_cs *cs, unsigned int rect_ memcpy(op->rects, rects, rect_count * sizeof(*rects)); op->rect_count = rect_count;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_rendertarget_view(struct wined3d_cs *cs, const void *data) @@ -1204,7 +1205,7 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v op->view_idx = view_idx; op->view = view;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const void *data) @@ -1251,7 +1252,7 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 op->opcode = WINED3D_CS_OP_SET_DEPTH_STENCIL_VIEW; op->view = view;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_vertex_declaration(struct wined3d_cs *cs, const void *data) @@ -1270,7 +1271,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 op->opcode = WINED3D_CS_OP_SET_VERTEX_DECLARATION; op->declaration = declaration;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void *data) @@ -1305,7 +1306,7 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, op->offset = offset; op->stride = stride;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_stream_source_freq(struct wined3d_cs *cs, const void *data) @@ -1330,7 +1331,7 @@ void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_i op->frequency = frequency; op->flags = flags;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void *data) @@ -1363,7 +1364,7 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, op->buffer = buffer; op->offset = offset;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_index_buffer(struct wined3d_cs *cs, const void *data) @@ -1395,7 +1396,7 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff op->format_id = format_id; op->offset = offset;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_constant_buffer(struct wined3d_cs *cs, const void *data) @@ -1425,7 +1426,7 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha op->cb_idx = cb_idx; op->buffer = buffer;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) @@ -1515,7 +1516,7 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined op->stage = stage; op->texture = texture;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_shader_resource_view(struct wined3d_cs *cs, const void *data) @@ -1548,7 +1549,7 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 op->view_idx = view_idx; op->view = view;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, const void *data) @@ -1582,7 +1583,7 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined op->view = view; op->initial_count = initial_count;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_sampler(struct wined3d_cs *cs, const void *data) @@ -1607,7 +1608,7 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type op->sampler_idx = sampler_idx; op->sampler = sampler;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) @@ -1631,7 +1632,7 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type op->type = type; op->shader = shader;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_blend_state(struct wined3d_cs *cs, const void *data) @@ -1661,7 +1662,7 @@ void wined3d_cs_emit_set_blend_state(struct wined3d_cs *cs, struct wined3d_blend op->factor = *blend_factor; op->sample_mask = sample_mask;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_depth_stencil_state(struct wined3d_cs *cs, const void *data) @@ -1688,7 +1689,7 @@ void wined3d_cs_emit_set_depth_stencil_state(struct wined3d_cs *cs, op->state = state; op->stencil_ref = stencil_ref;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_rasterizer_state(struct wined3d_cs *cs, const void *data) @@ -1708,7 +1709,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, op->opcode = WINED3D_CS_OP_SET_RASTERIZER_STATE; op->state = rasterizer_state;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_render_state(struct wined3d_cs *cs, const void *data) @@ -1728,7 +1729,7 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render op->state = state; op->value = value;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_texture_state(struct wined3d_cs *cs, const void *data) @@ -1750,7 +1751,7 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, op->state = state; op->value = value;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_sampler_state(struct wined3d_cs *cs, const void *data) @@ -1772,7 +1773,7 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, op->state = state; op->value = value;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_transform(struct wined3d_cs *cs, const void *data) @@ -1794,7 +1795,7 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform op->state = state; op->matrix = *matrix;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_clip_plane(struct wined3d_cs *cs, const void *data) @@ -1814,7 +1815,7 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const op->plane_idx = plane_idx; op->plane = *plane;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *data) @@ -1897,7 +1898,7 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture else op->set = 0;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_material(struct wined3d_cs *cs, const void *data) @@ -1916,7 +1917,7 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma op->opcode = WINED3D_CS_OP_SET_MATERIAL; op->material = *material;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data) @@ -1964,7 +1965,7 @@ void wined3d_cs_emit_set_light(struct wined3d_cs *cs, const struct wined3d_light op->opcode = WINED3D_CS_OP_SET_LIGHT; op->light = *light;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_light_enable(struct wined3d_cs *cs, const void *data) @@ -1998,7 +1999,7 @@ void wined3d_cs_emit_set_light_enable(struct wined3d_cs *cs, unsigned int idx, B op->idx = idx; op->enable = enable;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static const struct @@ -2073,7 +2074,7 @@ static void wined3d_cs_mt_push_constants(struct wined3d_device_context *context, op->count = count; memcpy(op->constants, constants, size);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data) @@ -2092,7 +2093,7 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_RESET_STATE;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_callback(struct wined3d_cs *cs, const void *data) @@ -2111,7 +2112,7 @@ static void wined3d_cs_emit_callback(struct wined3d_cs *cs, void (*callback)(voi op->callback = callback; op->object = object;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void (*callback)(void *object), void *object) @@ -2175,7 +2176,7 @@ void wined3d_cs_emit_query_issue(struct wined3d_cs *cs, struct wined3d_query *qu op->query = query; op->flags = flags;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); cs->queries_flushed = FALSE; }
@@ -2198,7 +2199,7 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso
wined3d_resource_acquire(resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_unload_resource(struct wined3d_cs *cs, const void *data) @@ -2220,7 +2221,7 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou
wined3d_resource_acquire(resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_map(struct wined3d_cs *cs, const void *data) @@ -2251,7 +2252,7 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, op->flags = flags; op->hr = &hr;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_MAP); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_MAP); wined3d_cs_finish(cs, WINED3D_CS_QUEUE_MAP);
return hr; @@ -2278,7 +2279,7 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc op->sub_resource_idx = sub_resource_idx; op->hr = &hr;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_MAP); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_MAP); wined3d_cs_finish(cs, WINED3D_CS_QUEUE_MAP);
return hr; @@ -2411,7 +2412,7 @@ void wined3d_cs_emit_blt_sub_resource(struct wined3d_cs *cs, struct wined3d_reso if (src_resource) wined3d_resource_acquire(src_resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); if (flags & WINED3D_BLT_SYNCHRONOUS) wined3d_cs_finish(cs, WINED3D_CS_QUEUE_DEFAULT); } @@ -2492,7 +2493,7 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r
wined3d_resource_acquire(resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_MAP); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_MAP); /* The data pointer may go away, so we need to wait until it is read. * Copying the data may be faster if it's small. */ wined3d_cs_finish(cs, WINED3D_CS_QUEUE_MAP); @@ -2531,7 +2532,7 @@ void wined3d_cs_emit_add_dirty_texture_region(struct wined3d_cs *cs,
wined3d_resource_acquire(&texture->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_clear_unordered_access_view(struct wined3d_cs *cs, const void *data) @@ -2559,7 +2560,7 @@ void wined3d_cs_emit_clear_unordered_access_view_uint(struct wined3d_cs *cs,
wined3d_resource_acquire(view->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_copy_uav_counter(struct wined3d_cs *cs, const void *data) @@ -2588,7 +2589,7 @@ void wined3d_cs_emit_copy_uav_counter(struct wined3d_cs *cs, struct wined3d_buff
wined3d_resource_acquire(&dst_buffer->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_generate_mipmaps(struct wined3d_cs *cs, const void *data) @@ -2610,7 +2611,7 @@ void wined3d_cs_emit_generate_mipmaps(struct wined3d_cs *cs, struct wined3d_shad
wined3d_resource_acquire(view->resource);
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_emit_stop(struct wined3d_cs *cs) @@ -2620,7 +2621,7 @@ static void wined3d_cs_emit_stop(struct wined3d_cs *cs) op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_STOP;
- wined3d_cs_submit(cs, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); wined3d_cs_finish(cs, WINED3D_CS_QUEUE_DEFAULT); }
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 106 +++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 53 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 49433471d00..67d8b9465a3 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -455,10 +455,10 @@ struct wined3d_cs_stop enum wined3d_cs_op opcode; };
-static inline void *wined3d_cs_require_space(struct wined3d_cs *cs, +static inline void *wined3d_device_context_require_space(struct wined3d_device_context *context, size_t size, enum wined3d_cs_queue_id queue_id) { - return cs->c.ops->require_space(&cs->c, size, queue_id); + return context->ops->require_space(context, size, queue_id); }
static inline void wined3d_device_context_submit(struct wined3d_device_context *context, @@ -625,7 +625,7 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw unsigned int i; LONG pending;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_PRESENT; op->dst_window_override = dst_window_override; op->swapchain = swapchain; @@ -686,7 +686,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *
rt_count = flags & WINED3DCLEAR_TARGET ? cs->device->adapter->d3d_info.limits.max_rt_count : 0;
- op = wined3d_cs_require_space(cs, FIELD_OFFSET(struct wined3d_cs_clear, rects[rect_count]), + op = wined3d_device_context_require_space(&cs->c, FIELD_OFFSET(struct wined3d_cs_clear, rects[rect_count]), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_CLEAR; op->flags = flags & (WINED3DCLEAR_TARGET | WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL); @@ -722,7 +722,7 @@ void wined3d_cs_emit_clear_rendertarget_view(struct wined3d_cs *cs, struct wined size_t size;
size = FIELD_OFFSET(struct wined3d_cs_clear, rects[1]) + sizeof(struct wined3d_fb_state); - op = wined3d_cs_require_space(cs, size, WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, size, WINED3D_CS_QUEUE_DEFAULT); op->fb = (void *)&op->rects[1];
op->opcode = WINED3D_CS_OP_CLEAR; @@ -890,7 +890,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, const struct wined3d_state *state = cs->device->state; struct wined3d_cs_dispatch *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, 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; @@ -908,7 +908,7 @@ void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, const struct wined3d_state *state = cs->device->state; struct wined3d_cs_dispatch *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DISPATCH; op->parameters.indirect = TRUE; op->parameters.u.indirect.buffer = buffer; @@ -1049,7 +1049,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type pri const struct wined3d_state *state = cs->device->state; struct wined3d_cs_draw *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DRAW; op->primitive_type = primitive_type; op->patch_vertex_count = patch_vertex_count; @@ -1073,7 +1073,7 @@ void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, enum wined3d_primitive const struct wined3d_state *state = cs->device->state; struct wined3d_cs_draw *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DRAW; op->primitive_type = primitive_type; op->patch_vertex_count = patch_vertex_count; @@ -1101,7 +1101,7 @@ void wined3d_cs_emit_flush(struct wined3d_cs *cs) { struct wined3d_cs_flush *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_FLUSH;
wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); @@ -1120,7 +1120,7 @@ void wined3d_cs_emit_set_predication(struct wined3d_cs *cs, struct wined3d_query { struct wined3d_cs_set_predication *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_PREDICATION; op->predicate = predicate; op->value = value; @@ -1145,7 +1145,7 @@ void wined3d_cs_emit_set_viewports(struct wined3d_cs *cs, unsigned int viewport_ { struct wined3d_cs_set_viewports *op;
- op = wined3d_cs_require_space(cs, FIELD_OFFSET(struct wined3d_cs_set_viewports, viewports[viewport_count]), + op = wined3d_device_context_require_space(&cs->c, FIELD_OFFSET(struct wined3d_cs_set_viewports, viewports[viewport_count]), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_VIEWPORTS; memcpy(op->viewports, viewports, viewport_count * sizeof(*viewports)); @@ -1170,7 +1170,7 @@ void wined3d_cs_emit_set_scissor_rects(struct wined3d_cs *cs, unsigned int rect_ { struct wined3d_cs_set_scissor_rects *op;
- op = wined3d_cs_require_space(cs, FIELD_OFFSET(struct wined3d_cs_set_scissor_rects, rects[rect_count]), + op = wined3d_device_context_require_space(&cs->c, FIELD_OFFSET(struct wined3d_cs_set_scissor_rects, rects[rect_count]), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_SCISSOR_RECTS; memcpy(op->rects, rects, rect_count * sizeof(*rects)); @@ -1200,7 +1200,7 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v { struct wined3d_cs_set_rendertarget_view *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_RENDERTARGET_VIEW; op->view_idx = view_idx; op->view = view; @@ -1248,7 +1248,7 @@ void wined3d_cs_emit_set_depth_stencil_view(struct wined3d_cs *cs, struct wined3 { struct wined3d_cs_set_depth_stencil_view *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_DEPTH_STENCIL_VIEW; op->view = view;
@@ -1267,7 +1267,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3 { struct wined3d_cs_set_vertex_declaration *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_VERTEX_DECLARATION; op->declaration = declaration;
@@ -1299,7 +1299,7 @@ void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_source *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_STREAM_SOURCE; op->stream_idx = stream_idx; op->buffer = buffer; @@ -1325,7 +1325,7 @@ void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_i { struct wined3d_cs_set_stream_source_freq *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_STREAM_SOURCE_FREQ; op->stream_idx = stream_idx; op->frequency = frequency; @@ -1358,7 +1358,7 @@ void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, { struct wined3d_cs_set_stream_output *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_STREAM_OUTPUT; op->stream_idx = stream_idx; op->buffer = buffer; @@ -1390,7 +1390,7 @@ void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buff { struct wined3d_cs_set_index_buffer *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_INDEX_BUFFER; op->buffer = buffer; op->format_id = format_id; @@ -1420,7 +1420,7 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha { struct wined3d_cs_set_constant_buffer *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_CONSTANT_BUFFER; op->type = type; op->cb_idx = cb_idx; @@ -1511,7 +1511,7 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined { struct wined3d_cs_set_texture *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_TEXTURE; op->stage = stage; op->texture = texture; @@ -1543,7 +1543,7 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 { struct wined3d_cs_set_shader_resource_view *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_SHADER_RESOURCE_VIEW; op->type = type; op->view_idx = view_idx; @@ -1576,7 +1576,7 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined { struct wined3d_cs_set_unordered_access_view *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_UNORDERED_ACCESS_VIEW; op->pipeline = pipeline; op->view_idx = view_idx; @@ -1602,7 +1602,7 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type { struct wined3d_cs_set_sampler *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_SAMPLER; op->type = type; op->sampler_idx = sampler_idx; @@ -1627,7 +1627,7 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type { struct wined3d_cs_set_shader *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_SHADER; op->type = type; op->shader = shader; @@ -1656,7 +1656,7 @@ void wined3d_cs_emit_set_blend_state(struct wined3d_cs *cs, struct wined3d_blend { struct wined3d_cs_set_blend_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_BLEND_STATE; op->state = state; op->factor = *blend_factor; @@ -1684,7 +1684,7 @@ void wined3d_cs_emit_set_depth_stencil_state(struct wined3d_cs *cs, { struct wined3d_cs_set_depth_stencil_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_DEPTH_STENCIL_STATE; op->state = state; op->stencil_ref = stencil_ref; @@ -1705,7 +1705,7 @@ void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, { struct wined3d_cs_set_rasterizer_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_RASTERIZER_STATE; op->state = rasterizer_state;
@@ -1724,7 +1724,7 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render { struct wined3d_cs_set_render_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_RENDER_STATE; op->state = state; op->value = value; @@ -1745,7 +1745,7 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, { struct wined3d_cs_set_texture_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_TEXTURE_STATE; op->stage = stage; op->state = state; @@ -1767,7 +1767,7 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, { struct wined3d_cs_set_sampler_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_SAMPLER_STATE; op->sampler_idx = sampler_idx; op->state = state; @@ -1790,7 +1790,7 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform { struct wined3d_cs_set_transform *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_TRANSFORM; op->state = state; op->matrix = *matrix; @@ -1810,7 +1810,7 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const { struct wined3d_cs_set_clip_plane *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_CLIP_PLANE; op->plane_idx = plane_idx; op->plane = *plane; @@ -1886,7 +1886,7 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture { struct wined3d_cs_set_color_key *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_COLOR_KEY; op->texture = texture; op->flags = flags; @@ -1913,7 +1913,7 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma { struct wined3d_cs_set_material *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_MATERIAL; op->material = *material;
@@ -1961,7 +1961,7 @@ void wined3d_cs_emit_set_light(struct wined3d_cs *cs, const struct wined3d_light { struct wined3d_cs_set_light *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_LIGHT; op->light = *light;
@@ -1994,7 +1994,7 @@ void wined3d_cs_emit_set_light_enable(struct wined3d_cs *cs, unsigned int idx, B { struct wined3d_cs_set_light_enable *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_SET_LIGHT_ENABLE; op->idx = idx; op->enable = enable; @@ -2066,7 +2066,7 @@ static void wined3d_cs_mt_push_constants(struct wined3d_device_context *context, size_t size;
size = count * wined3d_cs_push_constant_info[p].size; - op = wined3d_cs_require_space(cs, FIELD_OFFSET(struct wined3d_cs_push_constants, constants[size]), + op = wined3d_device_context_require_space(&cs->c, FIELD_OFFSET(struct wined3d_cs_push_constants, constants[size]), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_PUSH_CONSTANTS; op->type = p; @@ -2090,7 +2090,7 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) { struct wined3d_cs_reset_state *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_RESET_STATE;
wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); @@ -2107,7 +2107,7 @@ static void wined3d_cs_emit_callback(struct wined3d_cs *cs, void (*callback)(voi { struct wined3d_cs_callback *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_CALLBACK; op->callback = callback; op->object = object; @@ -2171,7 +2171,7 @@ void wined3d_cs_emit_query_issue(struct wined3d_cs *cs, struct wined3d_query *qu { struct wined3d_cs_query_issue *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_QUERY_ISSUE; op->query = query; op->flags = flags; @@ -2193,7 +2193,7 @@ void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_reso { struct wined3d_cs_preload_resource *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_PRELOAD_RESOURCE; op->resource = resource;
@@ -2215,7 +2215,7 @@ void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resou { struct wined3d_cs_unload_resource *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_UNLOAD_RESOURCE; op->resource = resource;
@@ -2243,7 +2243,7 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, * increasing the map count would be visible to applications. */ wined3d_not_from_cs(cs);
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_MAP); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_MAP); op->opcode = WINED3D_CS_OP_MAP; op->resource = resource; op->sub_resource_idx = sub_resource_idx; @@ -2273,7 +2273,7 @@ HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resourc
wined3d_not_from_cs(cs);
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_MAP); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_MAP); op->opcode = WINED3D_CS_OP_UNMAP; op->resource = resource; op->sub_resource_idx = sub_resource_idx; @@ -2393,7 +2393,7 @@ void wined3d_cs_emit_blt_sub_resource(struct wined3d_cs *cs, struct wined3d_reso { struct wined3d_cs_blt_sub_resource *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_BLT_SUB_RESOURCE; op->dst_resource = dst_resource; op->dst_sub_resource_idx = dst_sub_resource_idx; @@ -2482,7 +2482,7 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r { struct wined3d_cs_update_sub_resource *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_MAP); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_MAP); op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE; op->resource = resource; op->sub_resource_idx = sub_resource_idx; @@ -2525,7 +2525,7 @@ void wined3d_cs_emit_add_dirty_texture_region(struct wined3d_cs *cs, { struct wined3d_cs_add_dirty_texture_region *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_ADD_DIRTY_TEXTURE_REGION; op->texture = texture; op->layer = layer; @@ -2553,7 +2553,7 @@ void wined3d_cs_emit_clear_unordered_access_view_uint(struct wined3d_cs *cs, { struct wined3d_cs_clear_unordered_access_view *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_CLEAR_UNORDERED_ACCESS_VIEW; op->view = view; op->clear_value = *clear_value; @@ -2581,7 +2581,7 @@ void wined3d_cs_emit_copy_uav_counter(struct wined3d_cs *cs, struct wined3d_buff { struct wined3d_cs_copy_uav_counter *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_COPY_UAV_COUNTER; op->buffer = dst_buffer; op->offset = offset; @@ -2605,7 +2605,7 @@ void wined3d_cs_emit_generate_mipmaps(struct wined3d_cs *cs, struct wined3d_shad { struct wined3d_cs_generate_mipmaps *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_GENERATE_MIPMAPS; op->view = view;
@@ -2618,7 +2618,7 @@ static void wined3d_cs_emit_stop(struct wined3d_cs *cs) { struct wined3d_cs_stop *op;
- op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); + op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_STOP;
wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 149 ++++++++++++++++----------------- dlls/wined3d/wined3d_private.h | 2 +- 2 files changed, 75 insertions(+), 76 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 67d8b9465a3..713b7638f0e 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -655,11 +655,10 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw
static void wined3d_cs_exec_clear(struct wined3d_cs *cs, const void *data) { + struct wined3d_device *device = cs->c.device; const struct wined3d_cs_clear *op = data; - struct wined3d_device *device; unsigned int i;
- device = cs->device; device->blitter->ops->blitter_clear(device->blitter, device, op->rt_count, op->fb, op->rect_count, op->rects, &op->draw_rect, op->flags, &op->color, op->depth, op->stencil);
@@ -678,13 +677,13 @@ static void wined3d_cs_exec_clear(struct wined3d_cs *cs, const void *data) void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) { - const struct wined3d_state *state = cs->device->state; + const struct wined3d_state *state = cs->c.device->state; const struct wined3d_viewport *vp = &state->viewports[0]; struct wined3d_rendertarget_view *view; struct wined3d_cs_clear *op; unsigned int rt_count, i;
- rt_count = flags & WINED3DCLEAR_TARGET ? cs->device->adapter->d3d_info.limits.max_rt_count : 0; + rt_count = flags & WINED3DCLEAR_TARGET ? cs->c.device->adapter->d3d_info.limits.max_rt_count : 0;
op = wined3d_device_context_require_space(&cs->c, FIELD_OFFSET(struct wined3d_cs_clear, rects[rect_count]), WINED3D_CS_QUEUE_DEFAULT); @@ -867,7 +866,7 @@ static void wined3d_cs_exec_dispatch(struct wined3d_cs *cs, const void *data) if (!state->shader[WINED3D_SHADER_TYPE_COMPUTE]) WARN("No compute shader bound, skipping dispatch.\n"); else - cs->device->adapter->adapter_ops->adapter_dispatch_compute(cs->device, state, &op->parameters); + cs->c.device->adapter->adapter_ops->adapter_dispatch_compute(cs->c.device, state, &op->parameters);
if (op->parameters.indirect) wined3d_resource_release(&op->parameters.u.indirect.buffer->resource); @@ -887,7 +886,7 @@ static void acquire_compute_pipeline_resources(const struct wined3d_state *state void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z) { - const struct wined3d_state *state = cs->device->state; + const struct wined3d_state *state = cs->c.device->state; struct wined3d_cs_dispatch *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -905,7 +904,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, struct wined3d_buffer *buffer, unsigned int offset) { - const struct wined3d_state *state = cs->device->state; + const struct wined3d_state *state = cs->c.device->state; struct wined3d_cs_dispatch *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -922,9 +921,9 @@ void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs,
static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) { - const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; + const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; const struct wined3d_shader *geometry_shader; - struct wined3d_device *device = cs->device; + struct wined3d_device *device = cs->c.device; int base_vertex_idx, load_base_vertex_idx; struct wined3d_state *state = &cs->state; const struct wined3d_cs_draw *op = data; @@ -957,20 +956,20 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) if (state->load_base_vertex_index != load_base_vertex_idx) { state->load_base_vertex_index = load_base_vertex_idx; - device_invalidate_state(cs->device, STATE_BASEVERTEXINDEX); + device_invalidate_state(cs->c.device, STATE_BASEVERTEXINDEX); }
if (state->primitive_type != op->primitive_type) { if ((geometry_shader = state->shader[WINED3D_SHADER_TYPE_GEOMETRY]) && !geometry_shader->function) - device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_GEOMETRY)); + device_invalidate_state(cs->c.device, STATE_SHADER(WINED3D_SHADER_TYPE_GEOMETRY)); if (state->primitive_type == WINED3D_PT_POINTLIST || op->primitive_type == WINED3D_PT_POINTLIST) - device_invalidate_state(cs->device, STATE_POINT_ENABLE); + device_invalidate_state(cs->c.device, STATE_POINT_ENABLE); state->primitive_type = op->primitive_type; } state->patch_vertex_count = op->patch_vertex_count;
- cs->device->adapter->adapter_ops->adapter_draw_primitive(cs->device, state, &op->parameters); + cs->c.device->adapter->adapter_ops->adapter_draw_primitive(cs->c.device, state, &op->parameters);
if (op->parameters.indirect) { @@ -1045,8 +1044,8 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type pri 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) { - const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; - const struct wined3d_state *state = cs->device->state; + const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; + const struct wined3d_state *state = cs->c.device->state; struct wined3d_cs_draw *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -1069,8 +1068,8 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type pri void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, enum wined3d_primitive_type primitive_type, unsigned int patch_vertex_count, struct wined3d_buffer *buffer, unsigned int offset, bool indexed) { - const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; - const struct wined3d_state *state = cs->device->state; + const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; + const struct wined3d_state *state = cs->c.device->state; struct wined3d_cs_draw *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -1092,8 +1091,8 @@ static void wined3d_cs_exec_flush(struct wined3d_cs *cs, const void *data) { struct wined3d_context *context;
- context = context_acquire(cs->device, NULL, 0); - cs->device->adapter->adapter_ops->adapter_flush_context(context); + context = context_acquire(cs->c.device, NULL, 0); + cs->c.device->adapter->adapter_ops->adapter_flush_context(context); context_release(context); }
@@ -1137,7 +1136,7 @@ static void wined3d_cs_exec_set_viewports(struct wined3d_cs *cs, const void *dat else memset(cs->state.viewports, 0, sizeof(*cs->state.viewports)); cs->state.viewport_count = op->viewport_count; - device_invalidate_state(cs->device, STATE_VIEWPORT); + device_invalidate_state(cs->c.device, STATE_VIEWPORT); }
void wined3d_cs_emit_set_viewports(struct wined3d_cs *cs, unsigned int viewport_count, @@ -1163,7 +1162,7 @@ static void wined3d_cs_exec_set_scissor_rects(struct wined3d_cs *cs, const void else SetRectEmpty(cs->state.scissor_rects); cs->state.scissor_rect_count = op->rect_count; - device_invalidate_state(cs->device, STATE_SCISSORRECT); + device_invalidate_state(cs->c.device, STATE_SCISSORRECT); }
void wined3d_cs_emit_set_scissor_rects(struct wined3d_cs *cs, unsigned int rect_count, const RECT *rects) @@ -1187,12 +1186,12 @@ static void wined3d_cs_exec_set_rendertarget_view(struct wined3d_cs *cs, const v
prev = cs->state.fb.render_targets[op->view_idx]; cs->state.fb.render_targets[op->view_idx] = op->view; - device_invalidate_state(cs->device, STATE_FRAMEBUFFER); + device_invalidate_state(cs->c.device, STATE_FRAMEBUFFER);
prev_alpha_swizzle = prev && prev->format->id == WINED3DFMT_A8_UNORM; curr_alpha_swizzle = op->view && op->view->format->id == WINED3DFMT_A8_UNORM; if (prev_alpha_swizzle != curr_alpha_swizzle) - device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL)); + device_invalidate_state(cs->c.device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL)); }
void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int view_idx, @@ -1211,7 +1210,7 @@ void wined3d_cs_emit_set_rendertarget_view(struct wined3d_cs *cs, unsigned int v static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const void *data) { const struct wined3d_cs_set_depth_stencil_view *op = data; - struct wined3d_device *device = cs->device; + struct wined3d_device *device = cs->c.device; struct wined3d_rendertarget_view *prev;
if ((prev = cs->state.fb.depth_stencil) && prev->resource->type != WINED3D_RTYPE_BUFFER) @@ -1260,7 +1259,7 @@ static void wined3d_cs_exec_set_vertex_declaration(struct wined3d_cs *cs, const const struct wined3d_cs_set_vertex_declaration *op = data;
cs->state.vertex_declaration = op->declaration; - device_invalidate_state(cs->device, STATE_VDECL); + device_invalidate_state(cs->c.device, STATE_VDECL); }
void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) @@ -1291,7 +1290,7 @@ static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void if (prev) InterlockedDecrement(&prev->resource.bind_count);
- device_invalidate_state(cs->device, STATE_STREAMSRC); + device_invalidate_state(cs->c.device, STATE_STREAMSRC); }
void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, @@ -1318,7 +1317,7 @@ static void wined3d_cs_exec_set_stream_source_freq(struct wined3d_cs *cs, const stream->frequency = op->frequency; stream->flags = op->flags;
- device_invalidate_state(cs->device, STATE_STREAMSRC); + device_invalidate_state(cs->c.device, STATE_STREAMSRC); }
void wined3d_cs_emit_set_stream_source_freq(struct wined3d_cs *cs, UINT stream_idx, UINT frequency, UINT flags) @@ -1350,7 +1349,7 @@ static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void if (prev) InterlockedDecrement(&prev->resource.bind_count);
- device_invalidate_state(cs->device, STATE_STREAM_OUTPUT); + device_invalidate_state(cs->c.device, STATE_STREAM_OUTPUT); }
void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, @@ -1382,7 +1381,7 @@ static void wined3d_cs_exec_set_index_buffer(struct wined3d_cs *cs, const void * if (prev) InterlockedDecrement(&prev->resource.bind_count);
- device_invalidate_state(cs->device, STATE_INDEXBUFFER); + device_invalidate_state(cs->c.device, STATE_INDEXBUFFER); }
void wined3d_cs_emit_set_index_buffer(struct wined3d_cs *cs, struct wined3d_buffer *buffer, @@ -1412,7 +1411,7 @@ static void wined3d_cs_exec_set_constant_buffer(struct wined3d_cs *cs, const voi if (prev) InterlockedDecrement(&prev->resource.bind_count);
- device_invalidate_state(cs->device, STATE_CONSTANT_BUFFER(op->type)); + device_invalidate_state(cs->c.device, STATE_CONSTANT_BUFFER(op->type)); }
void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_shader_type type, @@ -1431,7 +1430,7 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha
static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) { - const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; + const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; const struct wined3d_cs_set_texture *op = data; struct wined3d_texture *prev; BOOL old_use_color_key = FALSE, new_use_color_key = FALSE; @@ -1453,15 +1452,15 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) || (!is_same_fixup(new_format->color_fixup, old_format->color_fixup) && !(can_use_texture_swizzle(d3d_info, new_format) && can_use_texture_swizzle(d3d_info, old_format))) || (new_fmt_flags & WINED3DFMT_FLAG_SHADOW) != (old_fmt_flags & WINED3DFMT_FLAG_SHADOW)) - device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL)); + device_invalidate_state(cs->c.device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL));
if (!prev && op->stage < d3d_info->limits.ffp_blend_stages) { /* The source arguments for color and alpha ops have different * meanings when a NULL texture is bound, so the COLOR_OP and * ALPHA_OP have to be dirtified. */ - device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_COLOR_OP)); - device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_ALPHA_OP)); + device_invalidate_state(cs->c.device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_COLOR_OP)); + device_invalidate_state(cs->c.device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_ALPHA_OP)); }
if (!op->stage && op->texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT) @@ -1490,21 +1489,21 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
if (!op->texture && op->stage < d3d_info->limits.ffp_blend_stages) { - device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_COLOR_OP)); - device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_ALPHA_OP)); + device_invalidate_state(cs->c.device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_COLOR_OP)); + device_invalidate_state(cs->c.device, STATE_TEXTURESTAGE(op->stage, WINED3D_TSS_ALPHA_OP)); }
if (!op->stage && prev->async.color_key_flags & WINED3D_CKEY_SRC_BLT) old_use_color_key = TRUE; }
- device_invalidate_state(cs->device, STATE_SAMPLER(op->stage)); + device_invalidate_state(cs->c.device, STATE_SAMPLER(op->stage));
if (new_use_color_key != old_use_color_key) - device_invalidate_state(cs->device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE)); + device_invalidate_state(cs->c.device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE));
if (new_use_color_key) - device_invalidate_state(cs->device, STATE_COLOR_KEY); + device_invalidate_state(cs->c.device, STATE_COLOR_KEY); }
void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined3d_texture *texture) @@ -1533,9 +1532,9 @@ static void wined3d_cs_exec_set_shader_resource_view(struct wined3d_cs *cs, cons InterlockedDecrement(&prev->resource->bind_count);
if (op->type != WINED3D_SHADER_TYPE_COMPUTE) - device_invalidate_state(cs->device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); else - device_invalidate_state(cs->device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); }
void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3d_shader_type type, @@ -1568,7 +1567,7 @@ static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, con if (op->view && op->initial_count != ~0u) wined3d_unordered_access_view_set_counter(op->view, op->initial_count);
- device_invalidate_state(cs->device, STATE_UNORDERED_ACCESS_VIEW_BINDING(op->pipeline)); + device_invalidate_state(cs->c.device, STATE_UNORDERED_ACCESS_VIEW_BINDING(op->pipeline)); }
void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined3d_pipeline pipeline, @@ -1592,9 +1591,9 @@ static void wined3d_cs_exec_set_sampler(struct wined3d_cs *cs, const void *data)
cs->state.sampler[op->type][op->sampler_idx] = op->sampler; if (op->type != WINED3D_SHADER_TYPE_COMPUTE) - device_invalidate_state(cs->device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); else - device_invalidate_state(cs->device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); }
void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type type, @@ -1616,11 +1615,11 @@ static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) const struct wined3d_cs_set_shader *op = data;
cs->state.shader[op->type] = op->shader; - device_invalidate_state(cs->device, STATE_SHADER(op->type)); + device_invalidate_state(cs->c.device, STATE_SHADER(op->type)); if (op->type != WINED3D_SHADER_TYPE_COMPUTE) - device_invalidate_state(cs->device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); else - device_invalidate_state(cs->device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); + device_invalidate_state(cs->c.device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); }
void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type type, struct wined3d_shader *shader) @@ -1643,12 +1642,12 @@ static void wined3d_cs_exec_set_blend_state(struct wined3d_cs *cs, const void *d if (state->blend_state != op->state) { state->blend_state = op->state; - device_invalidate_state(cs->device, STATE_BLEND); + device_invalidate_state(cs->c.device, STATE_BLEND); } state->blend_factor = op->factor; - device_invalidate_state(cs->device, STATE_BLEND_FACTOR); + device_invalidate_state(cs->c.device, STATE_BLEND_FACTOR); state->sample_mask = op->sample_mask; - device_invalidate_state(cs->device, STATE_SAMPLE_MASK); + device_invalidate_state(cs->c.device, STATE_SAMPLE_MASK); }
void wined3d_cs_emit_set_blend_state(struct wined3d_cs *cs, struct wined3d_blend_state *state, @@ -1673,10 +1672,10 @@ static void wined3d_cs_exec_set_depth_stencil_state(struct wined3d_cs *cs, const if (state->depth_stencil_state != op->state) { state->depth_stencil_state = op->state; - device_invalidate_state(cs->device, STATE_DEPTH_STENCIL); + device_invalidate_state(cs->c.device, STATE_DEPTH_STENCIL); } state->stencil_ref = op->stencil_ref; - device_invalidate_state(cs->device, STATE_STENCIL_REF); + device_invalidate_state(cs->c.device, STATE_STENCIL_REF); }
void wined3d_cs_emit_set_depth_stencil_state(struct wined3d_cs *cs, @@ -1697,7 +1696,7 @@ static void wined3d_cs_exec_set_rasterizer_state(struct wined3d_cs *cs, const vo const struct wined3d_cs_set_rasterizer_state *op = data;
cs->state.rasterizer_state = op->state; - device_invalidate_state(cs->device, STATE_RASTERIZER); + device_invalidate_state(cs->c.device, STATE_RASTERIZER); }
void wined3d_cs_emit_set_rasterizer_state(struct wined3d_cs *cs, @@ -1717,7 +1716,7 @@ static void wined3d_cs_exec_set_render_state(struct wined3d_cs *cs, const void * const struct wined3d_cs_set_render_state *op = data;
cs->state.render_states[op->state] = op->value; - device_invalidate_state(cs->device, STATE_RENDER(op->state)); + device_invalidate_state(cs->c.device, STATE_RENDER(op->state)); }
void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render_state state, DWORD value) @@ -1737,7 +1736,7 @@ static void wined3d_cs_exec_set_texture_state(struct wined3d_cs *cs, const void const struct wined3d_cs_set_texture_state *op = data;
cs->state.texture_states[op->stage][op->state] = op->value; - device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, op->state)); + device_invalidate_state(cs->c.device, STATE_TEXTURESTAGE(op->stage, op->state)); }
void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, @@ -1759,7 +1758,7 @@ static void wined3d_cs_exec_set_sampler_state(struct wined3d_cs *cs, const void const struct wined3d_cs_set_sampler_state *op = data;
cs->state.sampler_states[op->sampler_idx][op->state] = op->value; - device_invalidate_state(cs->device, STATE_SAMPLER(op->sampler_idx)); + device_invalidate_state(cs->c.device, STATE_SAMPLER(op->sampler_idx)); }
void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, @@ -1781,8 +1780,8 @@ static void wined3d_cs_exec_set_transform(struct wined3d_cs *cs, const void *dat const struct wined3d_cs_set_transform *op = data;
cs->state.transforms[op->state] = op->matrix; - if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) - device_invalidate_state(cs->device, STATE_TRANSFORM(op->state)); + if (op->state < WINED3D_TS_WORLD_MATRIX(cs->c.device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) + device_invalidate_state(cs->c.device, STATE_TRANSFORM(op->state)); }
void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform_state state, @@ -1803,7 +1802,7 @@ static void wined3d_cs_exec_set_clip_plane(struct wined3d_cs *cs, const void *da const struct wined3d_cs_set_clip_plane *op = data;
cs->state.clip_planes[op->plane_idx] = op->plane; - device_invalidate_state(cs->device, STATE_CLIPPLANE(op->plane_idx)); + device_invalidate_state(cs->c.device, STATE_CLIPPLANE(op->plane_idx)); }
void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const struct wined3d_vec4 *plane) @@ -1840,9 +1839,9 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat case WINED3D_CKEY_SRC_BLT: if (texture == cs->state.textures[0]) { - device_invalidate_state(cs->device, STATE_COLOR_KEY); + device_invalidate_state(cs->c.device, STATE_COLOR_KEY); if (!(texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT)) - device_invalidate_state(cs->device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE)); + device_invalidate_state(cs->c.device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE)); }
texture->async.src_blt_color_key = op->color_key; @@ -1869,7 +1868,7 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat
case WINED3D_CKEY_SRC_BLT: if (texture == cs->state.textures[0] && texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT) - device_invalidate_state(cs->device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE)); + device_invalidate_state(cs->c.device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE));
texture->async.color_key_flags &= ~WINED3D_CKEY_SRC_BLT; break; @@ -1906,7 +1905,7 @@ static void wined3d_cs_exec_set_material(struct wined3d_cs *cs, const void *data const struct wined3d_cs_set_material *op = data;
cs->state.material = op->material; - device_invalidate_state(cs->device, STATE_MATERIAL); + device_invalidate_state(cs->c.device, STATE_MATERIAL); }
void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_material *material) @@ -1946,8 +1945,8 @@ static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data) if (light_info->glIndex != -1) { if (light_info->OriginalParms.type != op->light.OriginalParms.type) - device_invalidate_state(cs->device, STATE_LIGHT_TYPE); - device_invalidate_state(cs->device, STATE_ACTIVELIGHT(light_info->glIndex)); + device_invalidate_state(cs->c.device, STATE_LIGHT_TYPE); + device_invalidate_state(cs->c.device, STATE_ACTIVELIGHT(light_info->glIndex)); }
light_info->OriginalParms = op->light.OriginalParms; @@ -1971,7 +1970,7 @@ void wined3d_cs_emit_set_light(struct wined3d_cs *cs, const struct wined3d_light static void wined3d_cs_exec_set_light_enable(struct wined3d_cs *cs, const void *data) { const struct wined3d_cs_set_light_enable *op = data; - struct wined3d_device *device = cs->device; + struct wined3d_device *device = cs->c.device; struct wined3d_light_info *light_info; int prev_idx;
@@ -2033,7 +2032,7 @@ static void wined3d_cs_st_push_constants(struct wined3d_device_context *context, unsigned int start_idx, unsigned int count, const void *constants) { struct wined3d_cs *cs = wined3d_cs_from_context(context); - struct wined3d_device *device = cs->device; + struct wined3d_device *device = cs->c.device; unsigned int context_count; unsigned int i; size_t offset; @@ -2079,7 +2078,7 @@ static void wined3d_cs_mt_push_constants(struct wined3d_device_context *context,
static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data) { - struct wined3d_adapter *adapter = cs->device->adapter; + struct wined3d_adapter *adapter = cs->c.device->adapter;
state_cleanup(&cs->state); memset(&cs->state, 0, sizeof(cs->state)); @@ -2332,7 +2331,7 @@ static void wined3d_cs_exec_blt_sub_resource(struct wined3d_cs *cs, const void * dst_texture = texture_from_resource(op->dst_resource); src_texture = texture_from_resource(op->src_resource);
- context = context_acquire(cs->device, NULL, 0); + context = context_acquire(cs->c.device, NULL, 0);
if (!wined3d_texture_load_location(src_texture, op->src_sub_resource_idx, context, src_texture->resource.map_binding)) @@ -2428,7 +2427,7 @@ static void wined3d_cs_exec_update_sub_resource(struct wined3d_cs *cs, const voi struct wined3d_texture *texture; struct wined3d_box src_box;
- context = context_acquire(cs->device, NULL, 0); + context = context_acquire(cs->c.device, NULL, 0);
if (resource->type == WINED3D_RTYPE_BUFFER) { @@ -2506,7 +2505,7 @@ static void wined3d_cs_exec_add_dirty_texture_region(struct wined3d_cs *cs, cons unsigned int sub_resource_idx, i; struct wined3d_context *context;
- context = context_acquire(cs->device, NULL, 0); + context = context_acquire(cs->c.device, NULL, 0); sub_resource_idx = op->layer * texture->level_count; for (i = 0; i < texture->level_count; ++i, ++sub_resource_idx) { @@ -2541,8 +2540,8 @@ static void wined3d_cs_exec_clear_unordered_access_view(struct wined3d_cs *cs, c struct wined3d_unordered_access_view *view = op->view; struct wined3d_context *context;
- context = context_acquire(cs->device, NULL, 0); - cs->device->adapter->adapter_ops->adapter_clear_uav(context, view, &op->clear_value); + context = context_acquire(cs->c.device, NULL, 0); + cs->c.device->adapter->adapter_ops->adapter_clear_uav(context, view, &op->clear_value); context_release(context);
wined3d_resource_release(view->resource); @@ -2569,7 +2568,7 @@ static void wined3d_cs_exec_copy_uav_counter(struct wined3d_cs *cs, const void * struct wined3d_unordered_access_view *view = op->view; struct wined3d_context *context;
- context = context_acquire(cs->device, NULL, 0); + context = context_acquire(cs->c.device, NULL, 0); wined3d_unordered_access_view_copy_counter(view, op->buffer, op->offset, context); context_release(context);
@@ -2989,7 +2988,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) return NULL;
cs->c.ops = &wined3d_cs_st_ops; - cs->device = device; + cs->c.device = device; cs->serialize_commands = TRACE_ON(d3d_sync) || wined3d_settings.cs_multithreaded & WINED3D_CSMT_SERIALIZE;
state_init(&cs->state, d3d_info, WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 3c77c295027..63a07df5735 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4684,13 +4684,13 @@ struct wined3d_device_context_ops struct wined3d_device_context { const struct wined3d_device_context_ops *ops; + struct wined3d_device *device; };
struct wined3d_cs { struct wined3d_device_context c;
- struct wined3d_device *device; struct wined3d_state state; HMODULE wined3d_module; HANDLE thread;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 18 +++- dlls/wined3d/device.c | 189 +++++++++++++++------------------ dlls/wined3d/texture.c | 2 +- dlls/wined3d/wined3d_private.h | 3 +- 4 files changed, 103 insertions(+), 109 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 713b7638f0e..d67582116b0 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -677,7 +677,7 @@ static void wined3d_cs_exec_clear(struct wined3d_cs *cs, const void *data) void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) { - const struct wined3d_state *state = cs->c.device->state; + const struct wined3d_state *state = cs->c.state; const struct wined3d_viewport *vp = &state->viewports[0]; struct wined3d_rendertarget_view *view; struct wined3d_cs_clear *op; @@ -886,7 +886,7 @@ static void acquire_compute_pipeline_resources(const struct wined3d_state *state void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, unsigned int group_count_x, unsigned int group_count_y, unsigned int group_count_z) { - const struct wined3d_state *state = cs->c.device->state; + 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); @@ -904,7 +904,7 @@ void wined3d_cs_emit_dispatch(struct wined3d_cs *cs, void wined3d_cs_emit_dispatch_indirect(struct wined3d_cs *cs, struct wined3d_buffer *buffer, unsigned int offset) { - const struct wined3d_state *state = cs->c.device->state; + 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); @@ -1045,7 +1045,7 @@ void wined3d_cs_emit_draw(struct wined3d_cs *cs, enum wined3d_primitive_type pri unsigned int index_count, unsigned int start_instance, unsigned int instance_count, bool indexed) { const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; - const struct wined3d_state *state = cs->c.device->state; + const struct wined3d_state *state = cs->c.state; struct wined3d_cs_draw *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -1069,7 +1069,7 @@ void wined3d_cs_emit_draw_indirect(struct wined3d_cs *cs, enum wined3d_primitive unsigned int patch_vertex_count, struct wined3d_buffer *buffer, unsigned int offset, bool indexed) { const struct wined3d_d3d_info *d3d_info = &cs->c.device->adapter->d3d_info; - const struct wined3d_state *state = cs->c.device->state; + const struct wined3d_state *state = cs->c.state; struct wined3d_cs_draw *op;
op = wined3d_device_context_require_space(&cs->c, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); @@ -2987,6 +2987,12 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) if (!(cs = heap_alloc_zero(sizeof(*cs)))) return NULL;
+ if (FAILED(wined3d_state_create(device, &cs->c.state))) + { + heap_free(cs); + return NULL; + } + cs->c.ops = &wined3d_cs_st_ops; cs->c.device = device; cs->serialize_commands = TRACE_ON(d3d_sync) || wined3d_settings.cs_multithreaded & WINED3D_CSMT_SERIALIZE; @@ -3031,6 +3037,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) return cs;
fail: + wined3d_state_destroy(cs->c.state); state_cleanup(&cs->state); heap_free(cs); return NULL; @@ -3046,6 +3053,7 @@ void wined3d_cs_destroy(struct wined3d_cs *cs) ERR("Closing event failed.\n"); }
+ wined3d_state_destroy(cs->c.state); state_cleanup(&cs->state); heap_free(cs->data); heap_free(cs); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index aaf91a03947..f4811e26018 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -251,8 +251,6 @@ void wined3d_device_cleanup(struct wined3d_device *device) wine_rb_destroy(&device->depth_stencil_states, device_leftover_depth_stencil_state, NULL); wine_rb_destroy(&device->so_descs, device_free_so_desc, NULL);
- wined3d_state_destroy(device->state); - device->state = NULL; wined3d_decref(device->wined3d); device->wined3d = NULL; } @@ -1085,7 +1083,7 @@ HRESULT wined3d_device_set_implicit_swapchain(struct wined3d_device *device, str { static const struct wined3d_color black = {0.0f, 0.0f, 0.0f, 0.0f}; const struct wined3d_swapchain_desc *swapchain_desc; - struct wined3d_fb_state *fb = &device->state->fb; + struct wined3d_fb_state *fb = &device->cs->c.state->fb; DWORD clear_flags = 0; unsigned int i; HRESULT hr; @@ -1192,7 +1190,7 @@ static void device_free_depth_stencil_state(struct wine_rb_entry *entry, void *c
void wined3d_device_uninit_3d(struct wined3d_device *device) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_resource *resource, *cursor; struct wined3d_rendertarget_view *view; struct wined3d_texture *texture; @@ -1302,7 +1300,7 @@ void CDECL wined3d_device_set_stream_output(struct wined3d_device *device, UINT return; }
- stream = &device->state->stream_output[idx]; + stream = &device->cs->c.state->stream_output[idx]; prev_buffer = stream->buffer;
if (buffer) @@ -1326,8 +1324,8 @@ struct wined3d_buffer * CDECL wined3d_device_get_stream_output(struct wined3d_de }
if (offset) - *offset = device->state->stream_output[idx].offset; - return device->state->stream_output[idx].buffer; + *offset = device->cs->c.state->stream_output[idx].offset; + return device->cs->c.state->stream_output[idx].buffer; }
HRESULT CDECL wined3d_device_set_stream_source(struct wined3d_device *device, UINT stream_idx, @@ -1350,7 +1348,7 @@ HRESULT CDECL wined3d_device_set_stream_source(struct wined3d_device *device, UI return WINED3DERR_INVALIDCALL; }
- stream = &device->state->streams[stream_idx]; + stream = &device->cs->c.state->streams[stream_idx]; prev_buffer = stream->buffer;
if (prev_buffer == buffer @@ -1387,7 +1385,7 @@ HRESULT CDECL wined3d_device_get_stream_source(const struct wined3d_device *devi return WINED3DERR_INVALIDCALL; }
- stream = &device->state->streams[stream_idx]; + stream = &device->cs->c.state->streams[stream_idx]; *buffer = stream->buffer; if (offset) *offset = stream->offset; @@ -1403,7 +1401,7 @@ static void wined3d_device_set_stream_source_freq(struct wined3d_device *device,
TRACE("device %p, stream_idx %u, divider %#x.\n", device, stream_idx, divider);
- stream = &device->state->streams[stream_idx]; + stream = &device->cs->c.state->streams[stream_idx]; old_flags = stream->flags; old_freq = stream->frequency;
@@ -1429,13 +1427,13 @@ static void wined3d_device_set_transform(struct wined3d_device *device, * tend towards setting the same matrix repeatedly for some reason. * * From here on we assume that the new matrix is different, wherever it matters. */ - if (!memcmp(&device->state->transforms[state], matrix, sizeof(*matrix))) + if (!memcmp(&device->cs->c.state->transforms[state], matrix, sizeof(*matrix))) { TRACE("The application is setting the same matrix over again.\n"); return; }
- device->state->transforms[state] = *matrix; + device->cs->c.state->transforms[state] = *matrix; wined3d_cs_emit_set_transform(device->cs, state, matrix); }
@@ -1444,7 +1442,7 @@ static void wined3d_device_get_transform(const struct wined3d_device *device, { TRACE("device %p, state %s, matrix %p.\n", device, debug_d3dtstype(state), matrix);
- *matrix = device->state->transforms[state]; + *matrix = device->cs->c.state->transforms[state]; }
/* Note lights are real special cases. Although the device caps state only @@ -1462,7 +1460,7 @@ static void wined3d_device_set_light(struct wined3d_device *device,
TRACE("device %p, light_idx %u, light %p.\n", device, light_idx, light);
- if (FAILED(wined3d_light_state_set_light(&device->state->light_state, light_idx, light, &object))) + if (FAILED(wined3d_light_state_set_light(&device->cs->c.state->light_state, light_idx, light, &object))) return;
/* Initialize the object. */ @@ -1556,7 +1554,7 @@ static void wined3d_device_set_light(struct wined3d_device *device,
static void wined3d_device_set_light_enable(struct wined3d_device *device, UINT light_idx, BOOL enable) { - struct wined3d_light_state *light_state = &device->state->light_state; + struct wined3d_light_state *light_state = &device->cs->c.state->light_state; struct wined3d_light_info *light_info;
TRACE("device %p, light_idx %u, enable %#x.\n", device, light_idx, enable); @@ -1581,7 +1579,7 @@ static void wined3d_device_set_light_enable(struct wined3d_device *device, UINT static HRESULT wined3d_device_set_clip_plane(struct wined3d_device *device, UINT plane_idx, const struct wined3d_vec4 *plane) { - struct wined3d_vec4 *clip_planes = device->state->clip_planes; + struct wined3d_vec4 *clip_planes = device->cs->c.state->clip_planes;
TRACE("device %p, plane_idx %u, plane %p.\n", device, plane_idx, plane);
@@ -1630,14 +1628,14 @@ static void wined3d_device_set_material(struct wined3d_device *device, const str { TRACE("device %p, material %p.\n", device, material);
- device->state->material = *material; + device->cs->c.state->material = *material; wined3d_cs_emit_set_material(device->cs, material); }
void CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, struct wined3d_buffer *buffer, enum wined3d_format_id format_id, unsigned int offset) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; enum wined3d_format_id prev_format; struct wined3d_buffer *prev_buffer; unsigned int prev_offset; @@ -1665,7 +1663,7 @@ void CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, struct wined3d_buffer * CDECL wined3d_device_get_index_buffer(const struct wined3d_device *device, enum wined3d_format_id *format, unsigned int *offset) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, format %p, offset %p.\n", device, format, offset);
@@ -1679,13 +1677,13 @@ void CDECL wined3d_device_set_base_vertex_index(struct wined3d_device *device, I { TRACE("device %p, base_index %d.\n", device, base_index);
- device->state->base_vertex_index = base_index; + device->cs->c.state->base_vertex_index = base_index; }
void CDECL wined3d_device_set_viewports(struct wined3d_device *device, unsigned int viewport_count, const struct wined3d_viewport *viewports) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; unsigned int i;
TRACE("device %p, viewport_count %u, viewports %p.\n", device, viewport_count, viewports); @@ -1708,7 +1706,7 @@ void CDECL wined3d_device_set_viewports(struct wined3d_device *device, unsigned void CDECL wined3d_device_get_viewports(const struct wined3d_device *device, unsigned int *viewport_count, struct wined3d_viewport *viewports) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state; unsigned int count;
TRACE("device %p, viewport_count %p, viewports %p.\n", device, viewport_count, viewports); @@ -1722,7 +1720,7 @@ void CDECL wined3d_device_get_viewports(const struct wined3d_device *device, uns
static void resolve_depth_buffer(struct wined3d_device *device) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state; struct wined3d_rendertarget_view *src_view; struct wined3d_resource *dst_resource; struct wined3d_texture *dst_texture; @@ -1742,7 +1740,7 @@ static void resolve_depth_buffer(struct wined3d_device *device) void CDECL wined3d_device_set_blend_state(struct wined3d_device *device, struct wined3d_blend_state *blend_state, const struct wined3d_color *blend_factor, unsigned int sample_mask) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_blend_state *prev;
TRACE("device %p, blend_state %p, blend_factor %s, sample_mask %#x.\n", @@ -1766,7 +1764,7 @@ void CDECL wined3d_device_set_blend_state(struct wined3d_device *device, struct wined3d_blend_state * CDECL wined3d_device_get_blend_state(const struct wined3d_device *device, struct wined3d_color *blend_factor, unsigned int *sample_mask) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, blend_factor %p, sample_mask %p.\n", device, blend_factor, sample_mask);
@@ -1778,7 +1776,7 @@ struct wined3d_blend_state * CDECL wined3d_device_get_blend_state(const struct w void CDECL wined3d_device_set_depth_stencil_state(struct wined3d_device *device, struct wined3d_depth_stencil_state *depth_stencil_state, unsigned int stencil_ref) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_depth_stencil_state *prev;
TRACE("device %p, depth_stencil_state %p, stencil_ref %u.\n", device, depth_stencil_state, stencil_ref); @@ -1799,7 +1797,7 @@ void CDECL wined3d_device_set_depth_stencil_state(struct wined3d_device *device, struct wined3d_depth_stencil_state * CDECL wined3d_device_get_depth_stencil_state(const struct wined3d_device *device, unsigned int *stencil_ref) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, stencil_ref %p.\n", device, stencil_ref);
@@ -1810,7 +1808,7 @@ struct wined3d_depth_stencil_state * CDECL wined3d_device_get_depth_stencil_stat void CDECL wined3d_device_set_rasterizer_state(struct wined3d_device *device, struct wined3d_rasterizer_state *rasterizer_state) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_rasterizer_state *prev;
TRACE("device %p, rasterizer_state %p.\n", device, rasterizer_state); @@ -1831,7 +1829,7 @@ struct wined3d_rasterizer_state * CDECL wined3d_device_get_rasterizer_state(stru { TRACE("device %p.\n", device);
- return device->state->rasterizer_state; + return device->cs->c.state->rasterizer_state; }
void CDECL wined3d_device_set_render_state(struct wined3d_device *device, @@ -1845,11 +1843,11 @@ void CDECL wined3d_device_set_render_state(struct wined3d_device *device, return; }
- if (value == device->state->render_states[state]) + if (value == device->cs->c.state->render_states[state]) TRACE("Application is setting the old value over, nothing to do.\n"); else { - device->state->render_states[state] = value; + device->cs->c.state->render_states[state] = value; wined3d_cs_emit_set_render_state(device->cs, state, value); }
@@ -1864,7 +1862,7 @@ DWORD CDECL wined3d_device_get_render_state(const struct wined3d_device *device, { TRACE("device %p, state %s (%#x).\n", device, debug_d3drenderstate(state), state);
- return device->state->render_states[state]; + return device->cs->c.state->render_states[state]; }
static void wined3d_device_set_sampler_state(struct wined3d_device *device, @@ -1873,20 +1871,20 @@ static void wined3d_device_set_sampler_state(struct wined3d_device *device, TRACE("device %p, sampler_idx %u, state %s, value %#x.\n", device, sampler_idx, debug_d3dsamplerstate(state), value);
- if (value == device->state->sampler_states[sampler_idx][state]) + if (value == device->cs->c.state->sampler_states[sampler_idx][state]) { TRACE("Application is setting the old value over, nothing to do.\n"); return; }
- device->state->sampler_states[sampler_idx][state] = value; + device->cs->c.state->sampler_states[sampler_idx][state] = value; wined3d_cs_emit_set_sampler_state(device->cs, sampler_idx, state, value); }
void CDECL wined3d_device_set_scissor_rects(struct wined3d_device *device, unsigned int rect_count, const RECT *rects) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; unsigned int i;
TRACE("device %p, rect_count %u, rects %p.\n", device, rect_count, rects); @@ -1914,7 +1912,7 @@ void CDECL wined3d_device_set_scissor_rects(struct wined3d_device *device, unsig
void CDECL wined3d_device_get_scissor_rects(const struct wined3d_device *device, unsigned int *rect_count, RECT *rects) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state; unsigned int count;
TRACE("device %p, rect_count %p, rects %p.\n", device, rect_count, rects); @@ -1933,7 +1931,7 @@ void CDECL wined3d_device_set_state(struct wined3d_device *device, struct wined3
TRACE("device %p, state %p.\n", device, state);
- device->state = state; + device->cs->c.state = state;
for (i = 0; i < WINED3D_MAX_RENDER_TARGETS; ++i) { @@ -2053,13 +2051,13 @@ struct wined3d_state * CDECL wined3d_device_get_state(struct wined3d_device *dev { TRACE("device %p.\n", device);
- return device->state; + return device->cs->c.state; }
void CDECL wined3d_device_set_vertex_declaration(struct wined3d_device *device, struct wined3d_vertex_declaration *declaration) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_vertex_declaration *prev;
TRACE("device %p, declaration %p.\n", device, declaration); @@ -2080,12 +2078,12 @@ struct wined3d_vertex_declaration * CDECL wined3d_device_get_vertex_declaration( { TRACE("device %p.\n", device);
- return device->state->vertex_declaration; + return device->cs->c.state->vertex_declaration; }
void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2106,13 +2104,13 @@ struct wined3d_shader * CDECL wined3d_device_get_vertex_shader(const struct wine { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_VERTEX]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_VERTEX]; }
void CDECL wined3d_device_set_constant_buffer(struct wined3d_device *device, enum wined3d_shader_type type, UINT idx, struct wined3d_buffer *buffer) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_buffer *prev;
TRACE("device %p, type %#x, idx %u, buffer %p.\n", device, type, idx, buffer); @@ -2146,14 +2144,14 @@ struct wined3d_buffer * CDECL wined3d_device_get_constant_buffer(const struct wi return NULL; }
- return device->state->cb[shader_type][idx]; + return device->cs->c.state->cb[shader_type][idx]; }
static void wined3d_device_set_shader_resource_view(struct wined3d_device *device, enum wined3d_shader_type type, UINT idx, struct wined3d_shader_resource_view *view) { const struct wined3d_rendertarget_view *dsv; - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader_resource_view *prev;
if (idx >= MAX_SHADER_RESOURCE_VIEWS) @@ -2206,7 +2204,7 @@ static struct wined3d_shader_resource_view *wined3d_device_get_shader_resource_v return NULL; }
- return device->state->shader_resource_view[shader_type][idx]; + return device->cs->c.state->shader_resource_view[shader_type][idx]; }
struct wined3d_shader_resource_view * CDECL wined3d_device_get_vs_resource_view(const struct wined3d_device *device, @@ -2220,7 +2218,7 @@ struct wined3d_shader_resource_view * CDECL wined3d_device_get_vs_resource_view( static void wined3d_device_set_sampler(struct wined3d_device *device, enum wined3d_shader_type type, UINT idx, struct wined3d_sampler *sampler) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_sampler *prev;
if (idx >= MAX_SAMPLER_OBJECTS) @@ -2257,7 +2255,7 @@ static struct wined3d_sampler *wined3d_device_get_sampler(const struct wined3d_d return NULL; }
- return device->state->sampler[shader_type][idx]; + return device->cs->c.state->sampler[shader_type][idx]; }
struct wined3d_sampler * CDECL wined3d_device_get_vs_sampler(const struct wined3d_device *device, UINT idx) @@ -2275,7 +2273,7 @@ static void wined3d_device_set_vs_consts_b(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->vs_consts_b[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->vs_consts_b[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2293,7 +2291,7 @@ static void wined3d_device_set_vs_consts_i(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->vs_consts_i[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->vs_consts_i[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2311,7 +2309,7 @@ static void wined3d_device_set_vs_consts_f(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->vs_consts_f[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->vs_consts_f[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2323,7 +2321,7 @@ static void wined3d_device_set_vs_consts_f(struct wined3d_device *device,
void CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2344,7 +2342,7 @@ struct wined3d_shader * CDECL wined3d_device_get_pixel_shader(const struct wined { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_PIXEL]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_PIXEL]; }
void CDECL wined3d_device_set_ps_resource_view(struct wined3d_device *device, @@ -2385,7 +2383,7 @@ static void wined3d_device_set_ps_consts_b(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->ps_consts_b[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->ps_consts_b[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2403,7 +2401,7 @@ static void wined3d_device_set_ps_consts_i(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->ps_consts_i[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->ps_consts_i[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2421,7 +2419,7 @@ static void wined3d_device_set_ps_consts_f(struct wined3d_device *device, TRACE("device %p, start_idx %u, count %u, constants %p.\n", device, start_idx, count, constants);
- memcpy(&device->state->ps_consts_f[start_idx], constants, count * sizeof(*constants)); + memcpy(&device->cs->c.state->ps_consts_f[start_idx], constants, count * sizeof(*constants)); if (TRACE_ON(d3d)) { for (i = 0; i < count; ++i) @@ -2433,7 +2431,7 @@ static void wined3d_device_set_ps_consts_f(struct wined3d_device *device,
void CDECL wined3d_device_set_hull_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2453,7 +2451,7 @@ struct wined3d_shader * CDECL wined3d_device_get_hull_shader(const struct wined3 { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_HULL]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_HULL]; }
void CDECL wined3d_device_set_hs_resource_view(struct wined3d_device *device, @@ -2489,7 +2487,7 @@ struct wined3d_sampler * CDECL wined3d_device_get_hs_sampler(const struct wined3
void CDECL wined3d_device_set_domain_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2509,7 +2507,7 @@ struct wined3d_shader * CDECL wined3d_device_get_domain_shader(const struct wine { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_DOMAIN]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_DOMAIN]; }
void CDECL wined3d_device_set_ds_resource_view(struct wined3d_device *device, @@ -2545,7 +2543,7 @@ struct wined3d_sampler * CDECL wined3d_device_get_ds_sampler(const struct wined3
void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2565,7 +2563,7 @@ struct wined3d_shader * CDECL wined3d_device_get_geometry_shader(const struct wi { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_GEOMETRY]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_GEOMETRY]; }
void CDECL wined3d_device_set_gs_resource_view(struct wined3d_device *device, @@ -2600,7 +2598,7 @@ struct wined3d_sampler * CDECL wined3d_device_get_gs_sampler(const struct wined3
void CDECL wined3d_device_set_compute_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_shader *prev;
TRACE("device %p, shader %p.\n", device, shader); @@ -2620,7 +2618,7 @@ struct wined3d_shader * CDECL wined3d_device_get_compute_shader(const struct win { TRACE("device %p.\n", device);
- return device->state->shader[WINED3D_SHADER_TYPE_COMPUTE]; + return device->cs->c.state->shader[WINED3D_SHADER_TYPE_COMPUTE]; }
void CDECL wined3d_device_set_cs_resource_view(struct wined3d_device *device, @@ -2658,7 +2656,7 @@ static void wined3d_device_set_pipeline_unordered_access_view(struct wined3d_dev enum wined3d_pipeline pipeline, unsigned int idx, struct wined3d_unordered_access_view *uav, unsigned int initial_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_unordered_access_view *prev;
if (idx >= MAX_UNORDERED_ACCESS_VIEWS) @@ -2688,7 +2686,7 @@ static struct wined3d_unordered_access_view *wined3d_device_get_pipeline_unorder return NULL; }
- return device->state->unordered_access_view[pipeline][idx]; + return device->cs->c.state->unordered_access_view[pipeline][idx]; }
void CDECL wined3d_device_set_cs_uav(struct wined3d_device *device, unsigned int idx, @@ -3289,7 +3287,7 @@ static HRESULT process_vertices_strided(const struct wined3d_device *device, DWO enum wined3d_material_color_source diffuse_source, specular_source, ambient_source, emissive_source; const struct wined3d_color *material_specular_state_colour; struct wined3d_matrix mat, proj_mat, view_mat, world_mat; - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state; const struct wined3d_format *output_colour_format; static const struct wined3d_color black; struct wined3d_map_desc map_desc; @@ -3607,7 +3605,7 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, UINT src_start_idx, UINT dst_idx, UINT vertex_count, struct wined3d_buffer *dst_buffer, const struct wined3d_vertex_declaration *declaration, DWORD flags, DWORD dst_fvf) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_stream_info stream_info; struct wined3d_resource *resource; struct wined3d_box box = {0}; @@ -3696,13 +3694,13 @@ static void wined3d_device_set_texture_stage_state(struct wined3d_device *device return; }
- if (value == device->state->texture_states[stage][state]) + if (value == device->cs->c.state->texture_states[stage][state]) { TRACE("Application is setting the old value over, nothing to do.\n"); return; }
- device->state->texture_states[stage][state] = value; + device->cs->c.state->texture_states[stage][state] = value;
wined3d_cs_emit_set_texture_state(device->cs, stage, state, value); } @@ -3710,7 +3708,7 @@ static void wined3d_device_set_texture_stage_state(struct wined3d_device *device static void wined3d_device_set_texture(struct wined3d_device *device, UINT stage, struct wined3d_texture *texture) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_texture *prev;
TRACE("device %p, stage %u, texture %p.\n", device, stage, texture); @@ -4201,7 +4199,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) HRESULT CDECL wined3d_device_clear(struct wined3d_device *device, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) { - struct wined3d_fb_state *fb = &device->state->fb; + struct wined3d_fb_state *fb = &device->cs->c.state->fb;
TRACE("device %p, rect_count %u, rects %p, flags %#x, color %s, depth %.8e, stencil %u.\n", device, rect_count, rects, flags, debug_color(color), depth, stencil); @@ -4240,7 +4238,7 @@ HRESULT CDECL wined3d_device_clear(struct wined3d_device *device, DWORD rect_cou void CDECL wined3d_device_set_predication(struct wined3d_device *device, struct wined3d_query *predicate, BOOL value) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_query *prev;
TRACE("device %p, predicate %p, value %#x.\n", device, predicate, value); @@ -4260,7 +4258,7 @@ void CDECL wined3d_device_set_predication(struct wined3d_device *device,
struct wined3d_query * CDECL wined3d_device_get_predication(struct wined3d_device *device, BOOL *value) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, value %p.\n", device, value);
@@ -4289,7 +4287,7 @@ void CDECL wined3d_device_dispatch_compute_indirect(struct wined3d_device *devic void CDECL wined3d_device_set_primitive_type(struct wined3d_device *device, enum wined3d_primitive_type primitive_type, unsigned int patch_vertex_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, primitive_type %s, patch_vertex_count %u.\n", device, debug_d3dprimitivetype(primitive_type), patch_vertex_count); @@ -4301,7 +4299,7 @@ void CDECL wined3d_device_set_primitive_type(struct wined3d_device *device, void CDECL wined3d_device_get_primitive_type(const struct wined3d_device *device, enum wined3d_primitive_type *primitive_type, unsigned int *patch_vertex_count) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, primitive_type %p, patch_vertex_count %p.\n", device, primitive_type, patch_vertex_count); @@ -4315,7 +4313,7 @@ void CDECL wined3d_device_get_primitive_type(const struct wined3d_device *device
HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT start_vertex, UINT vertex_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, start_vertex %u, vertex_count %u.\n", device, start_vertex, vertex_count);
@@ -4328,7 +4326,7 @@ HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT void CDECL wined3d_device_draw_primitive_instanced(struct wined3d_device *device, UINT start_vertex, UINT vertex_count, UINT start_instance, UINT instance_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, start_vertex %u, vertex_count %u, start_instance %u, instance_count %u.\n", device, start_vertex, vertex_count, start_instance, instance_count); @@ -4340,7 +4338,7 @@ void CDECL wined3d_device_draw_primitive_instanced(struct wined3d_device *device void CDECL wined3d_device_draw_primitive_instanced_indirect(struct wined3d_device *device, struct wined3d_buffer *buffer, unsigned int offset) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, buffer %p, offset %u.\n", device, buffer, offset);
@@ -4350,7 +4348,7 @@ void CDECL wined3d_device_draw_primitive_instanced_indirect(struct wined3d_devic
HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, start_idx %u, index_count %u.\n", device, start_idx, index_count);
@@ -4373,7 +4371,7 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic void CDECL wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device *device, UINT start_idx, UINT index_count, UINT start_instance, UINT instance_count) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, start_idx %u, index_count %u, start_instance %u, instance_count %u.\n", device, start_idx, index_count, start_instance, instance_count); @@ -4385,7 +4383,7 @@ void CDECL wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device void CDECL wined3d_device_draw_indexed_primitive_instanced_indirect(struct wined3d_device *device, struct wined3d_buffer *buffer, unsigned int offset) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
TRACE("device %p, buffer %p, offset %u.\n", device, buffer, offset);
@@ -4550,7 +4548,7 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device,
HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes) { - const struct wined3d_state *state = device->state; + const struct wined3d_state *state = device->cs->c.state; struct wined3d_texture *texture; DWORD i;
@@ -5136,20 +5134,20 @@ struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(co return NULL; }
- return device->state->fb.render_targets[view_idx]; + return device->cs->c.state->fb.render_targets[view_idx]; }
struct wined3d_rendertarget_view * CDECL wined3d_device_get_depth_stencil_view(const struct wined3d_device *device) { TRACE("device %p.\n", device);
- return device->state->fb.depth_stencil; + return device->cs->c.state->fb.depth_stencil; }
static void wined3d_unbind_srv_for_rtv(struct wined3d_device *device, const struct wined3d_rendertarget_view *view, BOOL dsv) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state;
if (view && wined3d_is_rtv_srv_bound(view)) { @@ -5171,7 +5169,7 @@ static void wined3d_unbind_srv_for_rtv(struct wined3d_device *device, HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device, unsigned int view_idx, struct wined3d_rendertarget_view *view, BOOL set_viewport) { - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_rendertarget_view *prev; unsigned int max_rt_count;
@@ -5237,7 +5235,7 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device HRESULT CDECL wined3d_device_set_depth_stencil_view(struct wined3d_device *device, struct wined3d_rendertarget_view *view) { - struct wined3d_fb_state *fb = &device->state->fb; + struct wined3d_fb_state *fb = &device->cs->c.state->fb; struct wined3d_rendertarget_view *prev;
TRACE("device %p, view %p.\n", device, view); @@ -5512,7 +5510,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info; struct wined3d_swapchain_state *swapchain_state; struct wined3d_swapchain_desc *current_desc; - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_resource *resource, *cursor; struct wined3d_rendertarget_view *view; struct wined3d_swapchain *swapchain; @@ -5867,7 +5865,7 @@ static void device_resource_remove(struct wined3d_device *device, struct wined3d void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) { enum wined3d_resource_type type = resource->type; - struct wined3d_state *state = device->state; + struct wined3d_state *state = device->cs->c.state; struct wined3d_rendertarget_view *rtv; unsigned int i;
@@ -6025,7 +6023,6 @@ HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined struct wined3d_adapter *adapter = wined3d->adapters[adapter_idx]; const struct wined3d_fragment_pipe_ops *fragment_pipeline; const struct wined3d_vertex_pipe_ops *vertex_pipeline; - struct wined3d_state *state; unsigned int i; HRESULT hr;
@@ -6076,19 +6073,11 @@ HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined return hr; }
- if (FAILED(hr = wined3d_state_create(device, &state))) - { - ERR("Failed to create device state, hr %#x.\n", hr); - goto err; - } - - device->state = state; device->max_frame_latency = 3;
if (!(device->cs = wined3d_cs_create(device))) { WARN("Failed to create command stream.\n"); - state_cleanup(state); hr = E_FAIL; goto err; } @@ -6096,8 +6085,6 @@ HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined return WINED3D_OK;
err: - if (state) - wined3d_state_destroy(state); for (i = 0; i < ARRAY_SIZE(device->multistate_funcs); ++i) { heap_free(device->multistate_funcs[i]); diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index d6408fb1c7a..a4148b166f2 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -1610,7 +1610,7 @@ DWORD CDECL wined3d_texture_set_lod(struct wined3d_texture *texture, DWORD lod) wined3d_texture_gl(texture)->texture_srgb.base_level = ~0u; if (resource->bind_count) wined3d_cs_emit_set_sampler_state(device->cs, texture->sampler, WINED3D_SAMP_MAX_MIP_LEVEL, - device->state->sampler_states[texture->sampler][WINED3D_SAMP_MAX_MIP_LEVEL]); + device->cs->c.state->sampler_states[texture->sampler][WINED3D_SAMP_MAX_MIP_LEVEL]); }
return old; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 63a07df5735..66757b30a16 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3777,8 +3777,6 @@ struct wined3d_device
enum wined3d_feature_level feature_level;
- struct wined3d_state *state; - /* Internal use fields */ struct wined3d_device_creation_parameters create_parms; HWND focus_window; @@ -4685,6 +4683,7 @@ struct wined3d_device_context { const struct wined3d_device_context_ops *ops; struct wined3d_device *device; + struct wined3d_state *state; };
struct wined3d_cs
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/cs.c | 7 ++++--- dlls/wined3d/device.c | 14 +++++++------- dlls/wined3d/wined3d_private.h | 5 +++-- 3 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index d67582116b0..5176c635cf5 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1622,16 +1622,17 @@ static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) device_invalidate_state(cs->c.device, STATE_COMPUTE_SHADER_RESOURCE_BINDING); }
-void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type type, struct wined3d_shader *shader) +void wined3d_device_context_emit_set_shader(struct wined3d_device_context *context, + enum wined3d_shader_type type, struct wined3d_shader *shader) { struct wined3d_cs_set_shader *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_SET_SHADER; op->type = type; op->shader = shader;
- wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); + wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT); }
static void wined3d_cs_exec_set_blend_state(struct wined3d_cs *cs, const void *data) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index f4811e26018..e6ac3621d4e 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1959,7 +1959,7 @@ void CDECL wined3d_device_set_state(struct wined3d_device *device, struct wined3
for (i = 0; i < WINED3D_SHADER_TYPE_COUNT; ++i) { - wined3d_cs_emit_set_shader(device->cs, i, state->shader[i]); + wined3d_device_context_emit_set_shader(&device->cs->c, i, state->shader[i]); for (j = 0; j < MAX_CONSTANT_BUFFERS; ++j) { wined3d_cs_emit_set_constant_buffer(device->cs, i, j, state->cb[i][j]); @@ -2095,7 +2095,7 @@ void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struc if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_VERTEX] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_VERTEX, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_VERTEX, shader); if (prev) wined3d_shader_decref(prev); } @@ -2333,7 +2333,7 @@ void CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_PIXEL] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_PIXEL, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_PIXEL, shader); if (prev) wined3d_shader_decref(prev); } @@ -2442,7 +2442,7 @@ void CDECL wined3d_device_set_hull_shader(struct wined3d_device *device, struct if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_HULL] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_HULL, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_HULL, shader); if (prev) wined3d_shader_decref(prev); } @@ -2498,7 +2498,7 @@ void CDECL wined3d_device_set_domain_shader(struct wined3d_device *device, struc if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_DOMAIN] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_DOMAIN, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_DOMAIN, shader); if (prev) wined3d_shader_decref(prev); } @@ -2554,7 +2554,7 @@ void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, str if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_GEOMETRY] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_GEOMETRY, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_GEOMETRY, shader); if (prev) wined3d_shader_decref(prev); } @@ -2609,7 +2609,7 @@ void CDECL wined3d_device_set_compute_shader(struct wined3d_device *device, stru if (shader) wined3d_shader_incref(shader); state->shader[WINED3D_SHADER_TYPE_COMPUTE] = shader; - wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_COMPUTE, shader); + wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_COMPUTE, shader); if (prev) wined3d_shader_decref(prev); } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 66757b30a16..a16da66b309 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4774,8 +4774,6 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, enum wined3d_sampler_state state, DWORD value) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_scissor_rects(struct wined3d_cs *cs, unsigned int rect_count, const RECT *rects) DECLSPEC_HIDDEN; -void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type type, - struct wined3d_shader *shader) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_stream_output(struct wined3d_cs *cs, UINT stream_idx, struct wined3d_buffer *buffer, UINT offset) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_stream_source(struct wined3d_cs *cs, UINT stream_idx, @@ -4815,6 +4813,9 @@ static inline void wined3d_cs_push_constants(struct wined3d_cs *cs, enum wined3d cs->c.ops->push_constants(&cs->c, p, start_idx, count, constants); }
+void wined3d_device_context_emit_set_shader(struct wined3d_device_context *context, enum wined3d_shader_type type, + struct wined3d_shader *shader) DECLSPEC_HIDDEN; + static inline void wined3d_resource_wait_idle(struct wined3d_resource *resource) { const struct wined3d_cs *cs = resource->device->cs;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/device.c | 86 ++++++++-------------------------- dlls/wined3d/wined3d.spec | 2 + dlls/wined3d/wined3d_private.h | 1 - include/wine/wined3d.h | 4 ++ 4 files changed, 25 insertions(+), 68 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index e6ac3621d4e..06329293261 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2081,25 +2081,33 @@ struct wined3d_vertex_declaration * CDECL wined3d_device_get_vertex_declaration( return device->cs->c.state->vertex_declaration; }
-void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) +void CDECL wined3d_device_context_set_shader(struct wined3d_device_context *context, + enum wined3d_shader_type type, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; + struct wined3d_state *state = context->state; struct wined3d_shader *prev;
- TRACE("device %p, shader %p.\n", device, shader); + TRACE("context %p, type %#x, shader %p.\n", context, type, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_VERTEX]; + prev = state->shader[type]; if (shader == prev) return;
if (shader) wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_VERTEX] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_VERTEX, shader); + state->shader[type] = shader; + wined3d_device_context_emit_set_shader(context, type, shader); if (prev) wined3d_shader_decref(prev); }
+void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) +{ + TRACE("device %p, shader %p.\n", device, shader); + + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_VERTEX, shader); +} + struct wined3d_shader * CDECL wined3d_device_get_vertex_shader(const struct wined3d_device *device) { TRACE("device %p.\n", device); @@ -2321,21 +2329,9 @@ static void wined3d_device_set_vs_consts_f(struct wined3d_device *device,
void CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; - struct wined3d_shader *prev; - TRACE("device %p, shader %p.\n", device, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_PIXEL]; - if (shader == prev) - return; - - if (shader) - wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_PIXEL] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_PIXEL, shader); - if (prev) - wined3d_shader_decref(prev); + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_PIXEL, shader); }
struct wined3d_shader * CDECL wined3d_device_get_pixel_shader(const struct wined3d_device *device) @@ -2431,20 +2427,9 @@ static void wined3d_device_set_ps_consts_f(struct wined3d_device *device,
void CDECL wined3d_device_set_hull_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; - struct wined3d_shader *prev; - TRACE("device %p, shader %p.\n", device, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_HULL]; - if (shader == prev) - return; - if (shader) - wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_HULL] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_HULL, shader); - if (prev) - wined3d_shader_decref(prev); + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_HULL, shader); }
struct wined3d_shader * CDECL wined3d_device_get_hull_shader(const struct wined3d_device *device) @@ -2487,20 +2472,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_hs_sampler(const struct wined3
void CDECL wined3d_device_set_domain_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; - struct wined3d_shader *prev; - TRACE("device %p, shader %p.\n", device, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_DOMAIN]; - if (shader == prev) - return; - if (shader) - wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_DOMAIN] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_DOMAIN, shader); - if (prev) - wined3d_shader_decref(prev); + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_DOMAIN, shader); }
struct wined3d_shader * CDECL wined3d_device_get_domain_shader(const struct wined3d_device *device) @@ -2543,20 +2517,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_ds_sampler(const struct wined3
void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; - struct wined3d_shader *prev; - TRACE("device %p, shader %p.\n", device, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_GEOMETRY]; - if (shader == prev) - return; - if (shader) - wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_GEOMETRY] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_GEOMETRY, shader); - if (prev) - wined3d_shader_decref(prev); + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_GEOMETRY, shader); }
struct wined3d_shader * CDECL wined3d_device_get_geometry_shader(const struct wined3d_device *device) @@ -2598,20 +2561,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_gs_sampler(const struct wined3
void CDECL wined3d_device_set_compute_shader(struct wined3d_device *device, struct wined3d_shader *shader) { - struct wined3d_state *state = device->cs->c.state; - struct wined3d_shader *prev; - TRACE("device %p, shader %p.\n", device, shader);
- prev = state->shader[WINED3D_SHADER_TYPE_COMPUTE]; - if (shader == prev) - return; - if (shader) - wined3d_shader_incref(shader); - state->shader[WINED3D_SHADER_TYPE_COMPUTE] = shader; - wined3d_device_context_emit_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_COMPUTE, shader); - if (prev) - wined3d_shader_decref(prev); + return wined3d_device_context_set_shader(&device->cs->c, WINED3D_SHADER_TYPE_COMPUTE, shader); }
struct wined3d_shader * CDECL wined3d_device_get_compute_shader(const struct wined3d_device *device) diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 6b6480cec8f..f1d477af703 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -166,6 +166,8 @@ @ cdecl wined3d_device_update_texture(ptr ptr ptr) @ cdecl wined3d_device_validate_device(ptr ptr)
+@ cdecl wined3d_device_context_set_shader(ptr long ptr) + @ cdecl wined3d_output_find_closest_matching_mode(ptr ptr) @ cdecl wined3d_output_get_adapter(ptr) @ cdecl wined3d_output_get_desc(ptr ptr) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index a16da66b309..ee00530981c 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -89,7 +89,6 @@ struct wined3d_adapter; struct wined3d_buffer_vk; struct wined3d_context; struct wined3d_context_vk; -struct wined3d_device_context; struct wined3d_gl_info; struct wined3d_state; struct wined3d_swapchain_gl; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 0d67e8c89d1..030e3fdcb67 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2214,6 +2214,7 @@ struct wined3d_blend_state; struct wined3d_buffer; struct wined3d_depth_stencil_state; struct wined3d_device; +struct wined3d_device_context; struct wined3d_output; struct wined3d_palette; struct wined3d_query; @@ -2547,6 +2548,9 @@ 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_set_shader(struct wined3d_device_context *context, + enum wined3d_shader_type type, struct wined3d_shader *shader); + HRESULT __cdecl wined3d_output_find_closest_matching_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode); struct wined3d_adapter * __cdecl wined3d_output_get_adapter(const struct wined3d_output *output);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com