On 8 February 2017 at 11:54, Józef Kucia jkucia@codeweavers.com wrote:
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 422f3f1..f2e10a8 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -44,6 +44,7 @@ enum wined3d_cs_op WINED3D_CS_OP_SET_TEXTURE, WINED3D_CS_OP_SET_SHADER_RESOURCE_VIEW, WINED3D_CS_OP_SET_UNORDERED_ACCESS_VIEW,
- WINED3D_CS_OP_SET_COMPUTE_UAV,
It's a little undesirable to introduce multiple operations that are largely the same, although I don't necessarily see a good way to avoid it either right now.
@@ -1053,6 +1054,35 @@ static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, con device_invalidate_state(cs->device, STATE_UNORDERED_ACCESS_VIEW_BINDING); }
+void wined3d_cs_emit_set_compute_unordered_access_view(struct wined3d_cs *cs, unsigned int view_idx,
struct wined3d_unordered_access_view *view)
+{
- struct wined3d_cs_set_unordered_access_view *op;
- op = cs->ops->require_space(cs, sizeof(*op));
- op->opcode = WINED3D_CS_OP_SET_COMPUTE_UAV;
- op->view_idx = view_idx;
- op->view = view;
- cs->ops->submit(cs);
+}
+static void wined3d_cs_exec_set_compute_unordered_access_view(struct wined3d_cs *cs, const void *data) +{
- const struct wined3d_cs_set_unordered_access_view *op = data;
- struct wined3d_unordered_access_view *prev;
- prev = cs->state.compute_unordered_access_view[op->view_idx];
- cs->state.compute_unordered_access_view[op->view_idx] = op->view;
- if (op->view)
InterlockedIncrement(&op->view->resource->bind_count);
- if (prev)
InterlockedDecrement(&prev->resource->bind_count);
- device_invalidate_state(cs->device, STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING);
+}
I should have noticed this when WINED3D_CS_OP_SET_UNORDERED_ACCESS_VIEW was introduced, but these are between wined3d_cs_exec_set_shader_resource_view() and wined3d_cs_emit_set_shader_resource_view(), please don't do that. More generally, all the other handlers have execution above emission, I think it's best to stick with that.