[PATCH 1/4] wined3d: Move the wined3d_state field of struct wined3d_cs to a new wined3d_cs_state structure.
Zebediah Figura
z.figura12 at gmail.com
Mon Mar 1 22:42:11 CST 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
This is a proposed approach at implementing deferred contexts. The idea is to
create a wined3d_cs object per ID3D11DeviceContext. Deferred contexts will have
their own wined3d_cs_ops structure, and some operations (i.e. maps and queries)
will be partially split to wined3d_cs_ops methods.
The point of this patch is to avoid allocating space for unused wined3d_state
objects. Presumably other fields could also be moved to the wined3d_cs_state
structure as well.
dlls/wined3d/cs.c | 115 +++++++++++++++++----------------
dlls/wined3d/texture.c | 2 +-
dlls/wined3d/wined3d_private.h | 8 ++-
3 files changed, 66 insertions(+), 59 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 4ee3d97b7fc..9e3ea4c8086 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -532,7 +532,7 @@ static void wined3d_cs_exec_nop(struct wined3d_cs *cs, const void *data)
static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data)
{
struct wined3d_texture *logo_texture, *cursor_texture, *back_buffer;
- struct wined3d_rendertarget_view *dsv = cs->state.fb.depth_stencil;
+ struct wined3d_rendertarget_view *dsv = cs->cs_state->state.fb.depth_stencil;
const struct wined3d_cs_present *op = data;
const struct wined3d_swapchain_desc *desc;
struct wined3d_swapchain *swapchain;
@@ -690,7 +690,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *
op->opcode = WINED3D_CS_OP_CLEAR;
op->flags = flags & (WINED3DCLEAR_TARGET | WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL);
op->rt_count = rt_count;
- op->fb = &cs->state.fb;
+ op->fb = &cs->cs_state->state.fb;
SetRect(&op->draw_rect, vp->x, vp->y, vp->x + vp->width, vp->y + vp->height);
if (state->rasterizer_state && state->rasterizer_state->desc.scissor)
IntersectRect(&op->draw_rect, &op->draw_rect, &state->scissor_rects[0]);
@@ -861,7 +861,7 @@ static void release_unordered_access_resources(const struct wined3d_shader *shad
static void wined3d_cs_exec_dispatch(struct wined3d_cs *cs, const void *data)
{
const struct wined3d_cs_dispatch *op = data;
- struct wined3d_state *state = &cs->state;
+ struct wined3d_state *state = &cs->cs_state->state;
if (!state->shader[WINED3D_SHADER_TYPE_COMPUTE])
WARN("No compute shader bound, skipping dispatch.\n");
@@ -925,7 +925,7 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data)
const struct wined3d_shader *geometry_shader;
struct wined3d_device *device = cs->device;
int base_vertex_idx, load_base_vertex_idx;
- struct wined3d_state *state = &cs->state;
+ struct wined3d_state *state = &cs->cs_state->state;
const struct wined3d_cs_draw *op = data;
unsigned int i;
@@ -1111,8 +1111,8 @@ static void wined3d_cs_exec_set_predication(struct wined3d_cs *cs, const void *d
{
const struct wined3d_cs_set_predication *op = data;
- cs->state.predicate = op->predicate;
- cs->state.predicate_value = op->value;
+ cs->cs_state->state.predicate = op->predicate;
+ cs->cs_state->state.predicate_value = op->value;
}
void wined3d_cs_emit_set_predication(struct wined3d_cs *cs, struct wined3d_query *predicate, BOOL value)
@@ -1132,10 +1132,10 @@ static void wined3d_cs_exec_set_viewports(struct wined3d_cs *cs, const void *dat
const struct wined3d_cs_set_viewports *op = data;
if (op->viewport_count)
- memcpy(cs->state.viewports, op->viewports, op->viewport_count * sizeof(*op->viewports));
+ memcpy(cs->cs_state->state.viewports, op->viewports, op->viewport_count * sizeof(*op->viewports));
else
- memset(cs->state.viewports, 0, sizeof(*cs->state.viewports));
- cs->state.viewport_count = op->viewport_count;
+ memset(cs->cs_state->state.viewports, 0, sizeof(*cs->cs_state->state.viewports));
+ cs->cs_state->state.viewport_count = op->viewport_count;
device_invalidate_state(cs->device, STATE_VIEWPORT);
}
@@ -1158,10 +1158,10 @@ static void wined3d_cs_exec_set_scissor_rects(struct wined3d_cs *cs, const void
const struct wined3d_cs_set_scissor_rects *op = data;
if (op->rect_count)
- memcpy(cs->state.scissor_rects, op->rects, op->rect_count * sizeof(*op->rects));
+ memcpy(cs->cs_state->state.scissor_rects, op->rects, op->rect_count * sizeof(*op->rects));
else
- SetRectEmpty(cs->state.scissor_rects);
- cs->state.scissor_rect_count = op->rect_count;
+ SetRectEmpty(cs->cs_state->state.scissor_rects);
+ cs->cs_state->state.scissor_rect_count = op->rect_count;
device_invalidate_state(cs->device, STATE_SCISSORRECT);
}
@@ -1184,8 +1184,8 @@ static void wined3d_cs_exec_set_rendertarget_view(struct wined3d_cs *cs, const v
BOOL prev_alpha_swizzle, curr_alpha_swizzle;
struct wined3d_rendertarget_view *prev;
- prev = cs->state.fb.render_targets[op->view_idx];
- cs->state.fb.render_targets[op->view_idx] = op->view;
+ prev = cs->cs_state->state.fb.render_targets[op->view_idx];
+ cs->cs_state->state.fb.render_targets[op->view_idx] = op->view;
device_invalidate_state(cs->device, STATE_FRAMEBUFFER);
prev_alpha_swizzle = prev && prev->format->id == WINED3DFMT_A8_UNORM;
@@ -1213,7 +1213,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
struct wined3d_device *device = cs->device;
struct wined3d_rendertarget_view *prev;
- if ((prev = cs->state.fb.depth_stencil) && prev->resource->type != WINED3D_RTYPE_BUFFER)
+ if ((prev = cs->cs_state->state.fb.depth_stencil) && prev->resource->type != WINED3D_RTYPE_BUFFER)
{
struct wined3d_texture *prev_texture = texture_from_resource(prev->resource);
@@ -1223,7 +1223,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
prev->sub_resource_idx, WINED3D_LOCATION_DISCARDED);
}
- cs->state.fb.depth_stencil = op->view;
+ cs->cs_state->state.fb.depth_stencil = op->view;
if (!prev != !op->view)
{
@@ -1258,7 +1258,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;
+ cs->cs_state->state.vertex_declaration = op->declaration;
device_invalidate_state(cs->device, STATE_VDECL);
}
@@ -1279,7 +1279,7 @@ static void wined3d_cs_exec_set_stream_source(struct wined3d_cs *cs, const void
struct wined3d_stream_state *stream;
struct wined3d_buffer *prev;
- stream = &cs->state.streams[op->stream_idx];
+ stream = &cs->cs_state->state.streams[op->stream_idx];
prev = stream->buffer;
stream->buffer = op->buffer;
stream->offset = op->offset;
@@ -1313,7 +1313,7 @@ static void wined3d_cs_exec_set_stream_source_freq(struct wined3d_cs *cs, const
const struct wined3d_cs_set_stream_source_freq *op = data;
struct wined3d_stream_state *stream;
- stream = &cs->state.streams[op->stream_idx];
+ stream = &cs->cs_state->state.streams[op->stream_idx];
stream->frequency = op->frequency;
stream->flags = op->flags;
@@ -1339,7 +1339,7 @@ static void wined3d_cs_exec_set_stream_output(struct wined3d_cs *cs, const void
struct wined3d_stream_output *stream;
struct wined3d_buffer *prev;
- stream = &cs->state.stream_output[op->stream_idx];
+ stream = &cs->cs_state->state.stream_output[op->stream_idx];
prev = stream->buffer;
stream->buffer = op->buffer;
stream->offset = op->offset;
@@ -1371,10 +1371,10 @@ static void wined3d_cs_exec_set_index_buffer(struct wined3d_cs *cs, const void *
const struct wined3d_cs_set_index_buffer *op = data;
struct wined3d_buffer *prev;
- prev = cs->state.index_buffer;
- cs->state.index_buffer = op->buffer;
- cs->state.index_format = op->format_id;
- cs->state.index_offset = op->offset;
+ prev = cs->cs_state->state.index_buffer;
+ cs->cs_state->state.index_buffer = op->buffer;
+ cs->cs_state->state.index_format = op->format_id;
+ cs->cs_state->state.index_offset = op->offset;
if (op->buffer)
InterlockedIncrement(&op->buffer->resource.bind_count);
@@ -1403,8 +1403,8 @@ static void wined3d_cs_exec_set_constant_buffer(struct wined3d_cs *cs, const voi
const struct wined3d_cs_set_constant_buffer *op = data;
struct wined3d_buffer *prev;
- prev = cs->state.cb[op->type][op->cb_idx];
- cs->state.cb[op->type][op->cb_idx] = op->buffer;
+ prev = cs->cs_state->state.cb[op->type][op->cb_idx];
+ cs->cs_state->state.cb[op->type][op->cb_idx] = op->buffer;
if (op->buffer)
InterlockedIncrement(&op->buffer->resource.bind_count);
@@ -1435,8 +1435,8 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
struct wined3d_texture *prev;
BOOL old_use_color_key = FALSE, new_use_color_key = FALSE;
- prev = cs->state.textures[op->stage];
- cs->state.textures[op->stage] = op->texture;
+ prev = cs->cs_state->state.textures[op->stage];
+ cs->cs_state->state.textures[op->stage] = op->texture;
if (op->texture)
{
@@ -1478,7 +1478,7 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
TRACE("Searching for other stages the texture is bound to.\n");
for (i = 0; i < WINED3D_MAX_COMBINED_SAMPLERS; ++i)
{
- if (cs->state.textures[i] == prev)
+ if (cs->cs_state->state.textures[i] == prev)
{
TRACE("Texture is also bound to stage %u.\n", i);
prev->sampler = i;
@@ -1523,8 +1523,8 @@ static void wined3d_cs_exec_set_shader_resource_view(struct wined3d_cs *cs, cons
const struct wined3d_cs_set_shader_resource_view *op = data;
struct wined3d_shader_resource_view *prev;
- prev = cs->state.shader_resource_view[op->type][op->view_idx];
- cs->state.shader_resource_view[op->type][op->view_idx] = op->view;
+ prev = cs->cs_state->state.shader_resource_view[op->type][op->view_idx];
+ cs->cs_state->state.shader_resource_view[op->type][op->view_idx] = op->view;
if (op->view)
InterlockedIncrement(&op->view->resource->bind_count);
@@ -1556,8 +1556,8 @@ static void wined3d_cs_exec_set_unordered_access_view(struct wined3d_cs *cs, con
const struct wined3d_cs_set_unordered_access_view *op = data;
struct wined3d_unordered_access_view *prev;
- prev = cs->state.unordered_access_view[op->pipeline][op->view_idx];
- cs->state.unordered_access_view[op->pipeline][op->view_idx] = op->view;
+ prev = cs->cs_state->state.unordered_access_view[op->pipeline][op->view_idx];
+ cs->cs_state->state.unordered_access_view[op->pipeline][op->view_idx] = op->view;
if (op->view)
InterlockedIncrement(&op->view->resource->bind_count);
@@ -1589,7 +1589,7 @@ static void wined3d_cs_exec_set_sampler(struct wined3d_cs *cs, const void *data)
{
const struct wined3d_cs_set_sampler *op = data;
- cs->state.sampler[op->type][op->sampler_idx] = op->sampler;
+ cs->cs_state->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);
else
@@ -1614,7 +1614,7 @@ 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;
+ cs->cs_state->state.shader[op->type] = op->shader;
device_invalidate_state(cs->device, STATE_SHADER(op->type));
if (op->type != WINED3D_SHADER_TYPE_COMPUTE)
device_invalidate_state(cs->device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING);
@@ -1637,7 +1637,7 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type
static void wined3d_cs_exec_set_blend_state(struct wined3d_cs *cs, const void *data)
{
const struct wined3d_cs_set_blend_state *op = data;
- struct wined3d_state *state = &cs->state;
+ struct wined3d_state *state = &cs->cs_state->state;
if (state->blend_state != op->state)
{
@@ -1667,7 +1667,7 @@ void wined3d_cs_emit_set_blend_state(struct wined3d_cs *cs, struct wined3d_blend
static void wined3d_cs_exec_set_depth_stencil_state(struct wined3d_cs *cs, const void *data)
{
const struct wined3d_cs_set_depth_stencil_state *op = data;
- struct wined3d_state *state = &cs->state;
+ struct wined3d_state *state = &cs->cs_state->state;
if (state->depth_stencil_state != op->state)
{
@@ -1695,7 +1695,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;
+ cs->cs_state->state.rasterizer_state = op->state;
device_invalidate_state(cs->device, STATE_RASTERIZER);
}
@@ -1715,7 +1715,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;
+ cs->cs_state->state.render_states[op->state] = op->value;
device_invalidate_state(cs->device, STATE_RENDER(op->state));
}
@@ -1735,7 +1735,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;
+ cs->cs_state->state.texture_states[op->stage][op->state] = op->value;
device_invalidate_state(cs->device, STATE_TEXTURESTAGE(op->stage, op->state));
}
@@ -1757,7 +1757,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;
+ cs->cs_state->state.sampler_states[op->sampler_idx][op->state] = op->value;
device_invalidate_state(cs->device, STATE_SAMPLER(op->sampler_idx));
}
@@ -1779,7 +1779,7 @@ 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;
+ cs->cs_state->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));
}
@@ -1801,7 +1801,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;
+ cs->cs_state->state.clip_planes[op->plane_idx] = op->plane;
device_invalidate_state(cs->device, STATE_CLIPPLANE(op->plane_idx));
}
@@ -1837,7 +1837,7 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat
break;
case WINED3D_CKEY_SRC_BLT:
- if (texture == cs->state.textures[0])
+ if (texture == cs->cs_state->state.textures[0])
{
device_invalidate_state(cs->device, STATE_COLOR_KEY);
if (!(texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT))
@@ -1867,7 +1867,7 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat
break;
case WINED3D_CKEY_SRC_BLT:
- if (texture == cs->state.textures[0] && texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT)
+ if (texture == cs->cs_state->state.textures[0] && texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT)
device_invalidate_state(cs->device, STATE_RENDER(WINED3D_RS_COLORKEYENABLE));
texture->async.color_key_flags &= ~WINED3D_CKEY_SRC_BLT;
@@ -1904,7 +1904,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;
+ cs->cs_state->state.material = op->material;
device_invalidate_state(cs->device, STATE_MATERIAL);
}
@@ -1927,7 +1927,7 @@ static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data)
light_idx = op->light.OriginalIndex;
- if (!(light_info = wined3d_light_state_get_light(&cs->state.light_state, light_idx)))
+ if (!(light_info = wined3d_light_state_get_light(&cs->cs_state->state.light_state, light_idx)))
{
TRACE("Adding new light.\n");
if (!(light_info = heap_alloc_zero(sizeof(*light_info))))
@@ -1937,7 +1937,7 @@ static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data)
}
hash_idx = LIGHTMAP_HASHFUNC(light_idx);
- list_add_head(&cs->state.light_state.light_map[hash_idx], &light_info->entry);
+ list_add_head(&cs->cs_state->state.light_state.light_map[hash_idx], &light_info->entry);
light_info->glIndex = -1;
light_info->OriginalIndex = light_idx;
}
@@ -1974,14 +1974,14 @@ static void wined3d_cs_exec_set_light_enable(struct wined3d_cs *cs, const void *
struct wined3d_light_info *light_info;
int prev_idx;
- if (!(light_info = wined3d_light_state_get_light(&cs->state.light_state, op->idx)))
+ if (!(light_info = wined3d_light_state_get_light(&cs->cs_state->state.light_state, op->idx)))
{
ERR("Light doesn't exist.\n");
return;
}
prev_idx = light_info->glIndex;
- wined3d_light_state_enable_light(&cs->state.light_state, &device->adapter->d3d_info, light_info, op->enable);
+ wined3d_light_state_enable_light(&cs->cs_state->state.light_state, &device->adapter->d3d_info, light_info, op->enable);
if (light_info->glIndex != prev_idx)
{
device_invalidate_state(device, STATE_LIGHT_TYPE);
@@ -2037,7 +2037,7 @@ static void wined3d_cs_st_push_constants(struct wined3d_cs *cs, enum wined3d_pus
device->shader_backend->shader_update_float_pixel_constants(device, start_idx, count);
offset = wined3d_cs_push_constant_info[p].offset + start_idx * wined3d_cs_push_constant_info[p].size;
- memcpy((BYTE *)&cs->state + offset, constants, count * wined3d_cs_push_constant_info[p].size);
+ memcpy((BYTE *)&cs->cs_state->state + offset, constants, count * wined3d_cs_push_constant_info[p].size);
for (i = 0, context_count = device->context_count; i < context_count; ++i)
{
device->contexts[i]->constant_update_mask |= wined3d_cs_push_constant_info[p].mask;
@@ -2073,9 +2073,9 @@ static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data)
{
struct wined3d_adapter *adapter = cs->device->adapter;
- state_cleanup(&cs->state);
- memset(&cs->state, 0, sizeof(cs->state));
- state_init(&cs->state, &adapter->d3d_info, WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT);
+ state_cleanup(&cs->cs_state->state);
+ memset(&cs->cs_state->state, 0, sizeof(cs->cs_state->state));
+ state_init(&cs->cs_state->state, &adapter->d3d_info, WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT);
}
void wined3d_cs_emit_reset_state(struct wined3d_cs *cs)
@@ -2973,7 +2973,8 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device)
cs->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);
+ cs->cs_state = &device->cs_state;
+ state_init(&cs->cs_state->state, d3d_info, WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT);
cs->data_size = WINED3D_INITIAL_CS_SIZE;
if (!(cs->data = heap_alloc(cs->data_size)))
@@ -3013,7 +3014,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device)
return cs;
fail:
- state_cleanup(&cs->state);
+ state_cleanup(&cs->cs_state->state);
heap_free(cs);
return NULL;
}
@@ -3028,7 +3029,7 @@ void wined3d_cs_destroy(struct wined3d_cs *cs)
ERR("Closing event failed.\n");
}
- state_cleanup(&cs->state);
+ state_cleanup(&cs->cs_state->state);
heap_free(cs->data);
heap_free(cs);
}
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index d6408fb1c7a..17063a09009 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -5314,8 +5314,8 @@ static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsig
uint32_t flags, const struct wined3d_color *colour, float depth, unsigned int stencil)
{
struct wined3d_rendertarget_view *rtv = rt_count ? fb->render_targets[0] : NULL;
+ const struct wined3d_state *state = &device->cs->cs_state->state;
struct wined3d_rendertarget_view *dsv = fb->depth_stencil;
- const struct wined3d_state *state = &device->cs->state;
struct wined3d_texture *depth_stencil = NULL;
unsigned int drawable_width, drawable_height;
const struct wined3d_gl_info *gl_info;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 56d3ef8fea2..18717b5207f 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3745,6 +3745,11 @@ struct wined3d_so_desc_entry
struct wined3d_stream_output_element elements[1];
};
+struct wined3d_cs_state
+{
+ struct wined3d_state state;
+};
+
struct wined3d_device
{
LONG ref;
@@ -3812,6 +3817,7 @@ struct wined3d_device
struct wined3d_sampler *null_sampler;
/* Command stream */
+ struct wined3d_cs_state cs_state;
struct wined3d_cs *cs;
/* Context management */
@@ -4684,7 +4690,7 @@ struct wined3d_cs
{
const struct wined3d_cs_ops *ops;
struct wined3d_device *device;
- struct wined3d_state state;
+ struct wined3d_cs_state *cs_state;
HMODULE wined3d_module;
HANDLE thread;
DWORD thread_id;
--
2.20.1
More information about the wine-devel
mailing list