Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/wined3d/cs.c | 18 ++++++++++++------ dlls/wined3d/wined3d_private.h | 3 +++ 2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index dd8cae825fa..626dd0ac132 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -34,6 +34,7 @@ struct wined3d_deferred_upload unsigned int sub_resource_idx; uint8_t *sysmem; struct wined3d_box box; + uint32_t upload_flags; };
struct wined3d_command_list @@ -2429,9 +2430,9 @@ static void wined3d_device_context_upload_bo(struct wined3d_device_context *cont { struct wined3d_cs_update_sub_resource *op;
- TRACE("context %p, resource %p, sub_resource_idx %u, box %s, bo %s, row_pitch %u, slice_pitch %u.\n", + TRACE("context %p, resource %p, sub_resource_idx %u, box %s, bo %s, flags %#x, row_pitch %u, slice_pitch %u.\n", context, resource, sub_resource_idx, debug_box(box), - debug_const_bo_address(&bo->addr), row_pitch, slice_pitch); + debug_const_bo_address(&bo->addr), bo->flags, row_pitch, slice_pitch);
op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE; @@ -2518,7 +2519,8 @@ HRESULT wined3d_device_context_emit_unmap(struct wined3d_device_context *context unsigned int row_pitch, slice_pitch;
wined3d_resource_get_sub_resource_map_pitch(resource, sub_resource_idx, &row_pitch, &slice_pitch); - wined3d_device_context_upload_bo(context, resource, sub_resource_idx, &box, &bo, row_pitch, slice_pitch); + if (bo.flags & UPLOAD_BO_UPLOAD_ON_UNMAP) + wined3d_device_context_upload_bo(context, resource, sub_resource_idx, &box, &bo, row_pitch, slice_pitch); return WINED3D_OK; }
@@ -2749,6 +2751,7 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte op->box = *box; op->bo.addr.buffer_object = 0; op->bo.addr.addr = data; + op->bo.flags = 0; op->row_pitch = row_pitch; op->slice_pitch = slice_pitch;
@@ -3475,7 +3478,7 @@ static void wined3d_deferred_context_push_constants(struct wined3d_device_contex FIXME("context %p, p %#x, start_idx %u, count %u, constants %p, stub!\n", context, p, start_idx, count, constants); }
-static const struct wined3d_deferred_upload *deferred_context_get_upload(struct wined3d_deferred_context *deferred, +static struct wined3d_deferred_upload *deferred_context_get_upload(struct wined3d_deferred_context *deferred, struct wined3d_resource *resource, unsigned int sub_resource_idx) { SIZE_T i = deferred->upload_count; @@ -3519,13 +3522,13 @@ static void *wined3d_deferred_context_prepare_upload_bo(struct wined3d_device_co
if (flags & WINED3D_MAP_NOOVERWRITE) { - const struct wined3d_deferred_upload *upload; - if ((upload = deferred_context_get_upload(deferred, resource, sub_resource_idx))) { + upload->upload_flags = 0; map_ptr = (uint8_t *)align((size_t)upload->sysmem, RESOURCE_ALIGNMENT); bo->addr.buffer_object = 0; bo->addr.addr = map_ptr; + bo->flags = 0; return map_ptr; }
@@ -3540,6 +3543,7 @@ static void *wined3d_deferred_context_prepare_upload_bo(struct wined3d_device_co return NULL;
upload = &deferred->uploads[deferred->upload_count++]; + upload->upload_flags = UPLOAD_BO_UPLOAD_ON_UNMAP; upload->resource = resource; wined3d_resource_incref(resource); upload->sub_resource_idx = sub_resource_idx; @@ -3549,6 +3553,7 @@ static void *wined3d_deferred_context_prepare_upload_bo(struct wined3d_device_co bo->addr.buffer_object = 0; map_ptr = (uint8_t *)align((size_t)sysmem, RESOURCE_ALIGNMENT); bo->addr.addr = map_ptr; + bo->flags = UPLOAD_BO_UPLOAD_ON_UNMAP; return map_ptr; }
@@ -3563,6 +3568,7 @@ static bool wined3d_deferred_context_get_upload_bo(struct wined3d_device_context *box = upload->box; bo->addr.buffer_object = 0; bo->addr.addr = (uint8_t *)align((size_t)upload->sysmem, RESOURCE_ALIGNMENT); + bo->flags = upload->upload_flags; return true; }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index c801e5b3ce8..520eb968eb6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3324,9 +3324,12 @@ bool wined3d_driver_info_init(struct wined3d_driver_info *driver_info, const struct wined3d_gpu_description *gpu_description, enum wined3d_feature_level feature_level, UINT64 vram_bytes, UINT64 sysmem_bytes) DECLSPEC_HIDDEN;
+#define UPLOAD_BO_UPLOAD_ON_UNMAP 0x1 + struct upload_bo { struct wined3d_const_bo_address addr; + uint32_t flags; };
struct wined3d_adapter_ops
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/wined3d/resource.c | 26 ++++++++++++++++++++++++++ dlls/wined3d/texture.c | 22 +--------------------- dlls/wined3d/wined3d_private.h | 2 ++ 3 files changed, 29 insertions(+), 21 deletions(-)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index 3d24d375bc8..8f31996595c 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -586,3 +586,29 @@ VkPipelineStageFlags vk_pipeline_stage_mask_from_bind_flags(uint32_t bind_flags)
return flags; } + +void *resource_offset_map_pointer(struct wined3d_resource *resource, unsigned int sub_resource_idx, + uint8_t *base_memory, const struct wined3d_box *box) +{ + const struct wined3d_format *format = resource->format; + unsigned int row_pitch, slice_pitch; + + wined3d_resource_get_sub_resource_map_pitch(resource, sub_resource_idx, &row_pitch, &slice_pitch); + + if ((resource->format_flags & (WINED3DFMT_FLAG_BLOCKS | WINED3DFMT_FLAG_BROKEN_PITCH)) == WINED3DFMT_FLAG_BLOCKS) + { + /* Compressed textures are block based, so calculate the offset of + * the block that contains the top-left pixel of the mapped box. */ + return base_memory + + (box->front * slice_pitch) + + ((box->top / format->block_height) * row_pitch) + + ((box->left / format->block_width) * format->block_byte_count); + } + else + { + return base_memory + + (box->front * slice_pitch) + + (box->top * row_pitch) + + (box->left * format->byte_count); + } +} diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index f9babc6e28f..db32274960f 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -3466,11 +3466,8 @@ static void texture_resource_sub_resource_get_map_pitch(struct wined3d_resource static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resource, unsigned int sub_resource_idx, void **map_ptr, const struct wined3d_box *box, DWORD flags) { - const struct wined3d_format *format = resource->format; struct wined3d_texture_sub_resource *sub_resource; struct wined3d_device *device = resource->device; - unsigned int fmt_flags = resource->format_flags; - unsigned int row_pitch, slice_pitch; struct wined3d_context *context; struct wined3d_texture *texture; struct wined3d_bo_address data; @@ -3537,24 +3534,7 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour
context_release(context);
- texture_resource_sub_resource_get_map_pitch(resource, sub_resource_idx, &row_pitch, &slice_pitch); - - if ((fmt_flags & (WINED3DFMT_FLAG_BLOCKS | WINED3DFMT_FLAG_BROKEN_PITCH)) == WINED3DFMT_FLAG_BLOCKS) - { - /* Compressed textures are block based, so calculate the offset of - * the block that contains the top-left pixel of the mapped box. */ - *map_ptr = base_memory - + (box->front * slice_pitch) - + ((box->top / format->block_height) * row_pitch) - + ((box->left / format->block_width) * format->block_byte_count); - } - else - { - *map_ptr = base_memory - + (box->front * slice_pitch) - + (box->top * row_pitch) - + (box->left * format->byte_count); - } + *map_ptr = resource_offset_map_pointer(resource, sub_resource_idx, base_memory, box);
if (texture->swapchain && texture->swapchain->front_buffer == texture) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 520eb968eb6..5a5c6c9c0a3 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4165,6 +4165,8 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device * unsigned int bind_flags, unsigned int access, unsigned int width, unsigned int height, unsigned int depth, unsigned int size, void *parent, const struct wined3d_parent_ops *parent_ops, const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN; +void *resource_offset_map_pointer(struct wined3d_resource *resource, unsigned int sub_resource_idx, + uint8_t *base_memory, const struct wined3d_box *box) DECLSPEC_HIDDEN; void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN; HRESULT wined3d_resource_check_box_dimensions(struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box) DECLSPEC_HIDDEN;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/wined3d/cs.c | 26 +++++++++++++------------- dlls/wined3d/wined3d_private.h | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 626dd0ac132..c3b0343bed2 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -2468,7 +2468,7 @@ HRESULT wined3d_device_context_emit_map(struct wined3d_device_context *context, wined3d_resource_get_sub_resource_map_pitch(resource, sub_resource_idx, &row_pitch, &slice_pitch);
if ((flags & (WINED3D_MAP_DISCARD | WINED3D_MAP_NOOVERWRITE)) - && (*map_ptr = context->ops->prepare_upload_bo(context, resource, + && (*map_ptr = context->ops->map_upload_bo(context, resource, sub_resource_idx, box, row_pitch, slice_pitch, flags, &bo))) { TRACE("Returning upload bo %s, map pointer %p, row pitch %u, slice pitch %u.\n", @@ -2514,7 +2514,7 @@ HRESULT wined3d_device_context_emit_unmap(struct wined3d_device_context *context struct upload_bo bo; HRESULT hr;
- if (context->ops->get_upload_bo(context, resource, sub_resource_idx, &box, &bo)) + if (context->ops->unmap_upload_bo(context, resource, sub_resource_idx, &box, &bo)) { unsigned int row_pitch, slice_pitch;
@@ -2733,7 +2733,7 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte struct upload_bo bo; void *map_ptr;
- if ((map_ptr = context->ops->prepare_upload_bo(context, resource, sub_resource_idx, box, + if ((map_ptr = context->ops->map_upload_bo(context, resource, sub_resource_idx, box, row_pitch, slice_pitch, WINED3D_MAP_WRITE, &bo))) { wined3d_format_copy_data(resource->format, data, row_pitch, slice_pitch, map_ptr, row_pitch, slice_pitch, @@ -3052,7 +3052,7 @@ static void wined3d_cs_st_finish(struct wined3d_device_context *context, enum wi { }
-static void *wined3d_cs_prepare_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, +static void *wined3d_cs_map_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, unsigned int row_pitch, unsigned int slice_pitch, uint32_t flags, struct upload_bo *bo) { @@ -3060,7 +3060,7 @@ static void *wined3d_cs_prepare_upload_bo(struct wined3d_device_context *context return NULL; }
-static bool wined3d_cs_get_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, +static bool wined3d_cs_unmap_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_box *box, struct upload_bo *bo) { return false; @@ -3072,8 +3072,8 @@ static const struct wined3d_device_context_ops wined3d_cs_st_ops = wined3d_cs_st_submit, wined3d_cs_st_finish, wined3d_cs_st_push_constants, - wined3d_cs_prepare_upload_bo, - wined3d_cs_get_upload_bo, + wined3d_cs_map_upload_bo, + wined3d_cs_unmap_upload_bo, wined3d_cs_issue_query, wined3d_cs_flush, wined3d_cs_acquire_resource, @@ -3199,8 +3199,8 @@ static const struct wined3d_device_context_ops wined3d_cs_mt_ops = wined3d_cs_mt_submit, wined3d_cs_mt_finish, wined3d_cs_mt_push_constants, - wined3d_cs_prepare_upload_bo, - wined3d_cs_get_upload_bo, + wined3d_cs_map_upload_bo, + wined3d_cs_unmap_upload_bo, wined3d_cs_issue_query, wined3d_cs_flush, wined3d_cs_acquire_resource, @@ -3494,7 +3494,7 @@ static struct wined3d_deferred_upload *deferred_context_get_upload(struct wined3 return NULL; }
-static void *wined3d_deferred_context_prepare_upload_bo(struct wined3d_device_context *context, +static void *wined3d_deferred_context_map_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, unsigned int row_pitch, unsigned int slice_pitch, uint32_t flags, struct upload_bo *bo) { @@ -3557,7 +3557,7 @@ static void *wined3d_deferred_context_prepare_upload_bo(struct wined3d_device_co return map_ptr; }
-static bool wined3d_deferred_context_get_upload_bo(struct wined3d_device_context *context, +static bool wined3d_deferred_context_unmap_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_box *box, struct upload_bo *bo) { struct wined3d_deferred_context *deferred = wined3d_deferred_context_from_context(context); @@ -3619,8 +3619,8 @@ static const struct wined3d_device_context_ops wined3d_deferred_context_ops = wined3d_deferred_context_submit, wined3d_deferred_context_finish, wined3d_deferred_context_push_constants, - wined3d_deferred_context_prepare_upload_bo, - wined3d_deferred_context_get_upload_bo, + wined3d_deferred_context_map_upload_bo, + wined3d_deferred_context_unmap_upload_bo, wined3d_deferred_context_issue_query, wined3d_deferred_context_flush, wined3d_deferred_context_acquire_resource, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 5a5c6c9c0a3..9e6c7249b3a 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4740,10 +4740,10 @@ struct wined3d_device_context_ops 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); - void *(*prepare_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, + void *(*map_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, unsigned int row_pitch, unsigned int slice_pitch, uint32_t flags, struct upload_bo *upload_bo); - bool (*get_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, + bool (*unmap_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_box *box, struct upload_bo *upload_bo); void (*issue_query)(struct wined3d_device_context *context, struct wined3d_query *query, unsigned int flags); void (*flush)(struct wined3d_device_context *context);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
We will need to mark the resource as no longer mapped, from the client's perspective.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/wined3d/cs.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index c3b0343bed2..4456f84f0a3 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -2730,6 +2730,7 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte const void *data, unsigned int row_pitch, unsigned int slice_pitch) { struct wined3d_cs_update_sub_resource *op; + struct wined3d_box dummy_box; struct upload_bo bo; void *map_ptr;
@@ -2738,6 +2739,7 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte { wined3d_format_copy_data(resource->format, data, row_pitch, slice_pitch, map_ptr, row_pitch, slice_pitch, box->right - box->left, box->bottom - box->top, box->back - box->front); + context->ops->unmap_upload_bo(context, resource, sub_resource_idx, &dummy_box, &bo); wined3d_device_context_upload_bo(context, resource, sub_resource_idx, box, &bo, row_pitch, slice_pitch); return; }
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/wined3d/cs.c | 26 ++++++++------------------ dlls/wined3d/wined3d_private.h | 2 +- 2 files changed, 9 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 4456f84f0a3..f22009cf1c8 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -2462,17 +2462,15 @@ HRESULT wined3d_device_context_emit_map(struct wined3d_device_context *context, { unsigned int row_pitch, slice_pitch; struct wined3d_cs_map *op; - struct upload_bo bo; HRESULT hr;
wined3d_resource_get_sub_resource_map_pitch(resource, sub_resource_idx, &row_pitch, &slice_pitch);
if ((flags & (WINED3D_MAP_DISCARD | WINED3D_MAP_NOOVERWRITE)) && (*map_ptr = context->ops->map_upload_bo(context, resource, - sub_resource_idx, box, row_pitch, slice_pitch, flags, &bo))) + sub_resource_idx, box, row_pitch, slice_pitch, flags))) { - TRACE("Returning upload bo %s, map pointer %p, row pitch %u, slice pitch %u.\n", - debug_const_bo_address(&bo.addr), *map_ptr, row_pitch, slice_pitch); + TRACE("Returning map pointer %p, row pitch %u, slice pitch %u.\n", *map_ptr, row_pitch, slice_pitch); return WINED3D_OK; }
@@ -2735,7 +2733,7 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte void *map_ptr;
if ((map_ptr = context->ops->map_upload_bo(context, resource, sub_resource_idx, box, - row_pitch, slice_pitch, WINED3D_MAP_WRITE, &bo))) + row_pitch, slice_pitch, WINED3D_MAP_WRITE))) { wined3d_format_copy_data(resource->format, data, row_pitch, slice_pitch, map_ptr, row_pitch, slice_pitch, box->right - box->left, box->bottom - box->top, box->back - box->front); @@ -3056,7 +3054,7 @@ static void wined3d_cs_st_finish(struct wined3d_device_context *context, enum wi
static void *wined3d_cs_map_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, unsigned int row_pitch, - unsigned int slice_pitch, uint32_t flags, struct upload_bo *bo) + unsigned int slice_pitch, uint32_t flags) { /* FIXME: We would like to return mapped or newly allocated memory here. */ return NULL; @@ -3498,12 +3496,12 @@ static struct wined3d_deferred_upload *deferred_context_get_upload(struct wined3
static void *wined3d_deferred_context_map_upload_bo(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, - unsigned int row_pitch, unsigned int slice_pitch, uint32_t flags, struct upload_bo *bo) + unsigned int row_pitch, unsigned int slice_pitch, uint32_t flags) { struct wined3d_deferred_context *deferred = wined3d_deferred_context_from_context(context); const struct wined3d_format *format = resource->format; struct wined3d_deferred_upload *upload; - uint8_t *sysmem, *map_ptr; + uint8_t *sysmem; size_t size;
size = (box->back - box->front - 1) * slice_pitch @@ -3527,11 +3525,7 @@ static void *wined3d_deferred_context_map_upload_bo(struct wined3d_device_contex if ((upload = deferred_context_get_upload(deferred, resource, sub_resource_idx))) { upload->upload_flags = 0; - map_ptr = (uint8_t *)align((size_t)upload->sysmem, RESOURCE_ALIGNMENT); - bo->addr.buffer_object = 0; - bo->addr.addr = map_ptr; - bo->flags = 0; - return map_ptr; + return (void *)align((size_t)upload->sysmem, RESOURCE_ALIGNMENT); }
return NULL; @@ -3552,11 +3546,7 @@ static void *wined3d_deferred_context_map_upload_bo(struct wined3d_device_contex upload->sysmem = sysmem; upload->box = *box;
- bo->addr.buffer_object = 0; - map_ptr = (uint8_t *)align((size_t)sysmem, RESOURCE_ALIGNMENT); - bo->addr.addr = map_ptr; - bo->flags = UPLOAD_BO_UPLOAD_ON_UNMAP; - return map_ptr; + return (void *)align((size_t)upload->sysmem, RESOURCE_ALIGNMENT); }
static bool wined3d_deferred_context_unmap_upload_bo(struct wined3d_device_context *context, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 9e6c7249b3a..9c19894ab77 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4742,7 +4742,7 @@ struct wined3d_device_context_ops unsigned int start_idx, unsigned int count, const void *constants); void *(*map_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, unsigned int row_pitch, - unsigned int slice_pitch, uint32_t flags, struct upload_bo *upload_bo); + unsigned int slice_pitch, uint32_t flags); bool (*unmap_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_box *box, struct upload_bo *upload_bo); void (*issue_query)(struct wined3d_device_context *context, struct wined3d_query *query, unsigned int flags);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
On Thu, 30 Sept 2021 at 00:15, Zebediah Figura zfigura@codeweavers.com wrote:
@@ -34,6 +34,7 @@ struct wined3d_deferred_upload unsigned int sub_resource_idx; uint8_t *sysmem; struct wined3d_box box;
- uint32_t upload_flags;
};
struct wined3d_command_list
This doesn't apply trivially after patch 215737, but doesn't really conflict.