On 9/29/21 10:48, Henri Verbeet wrote:
On Tue, 28 Sept 2021 at 23:28, Zebediah Figura zfigura@codeweavers.com wrote:
@@ -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 = UPLOAD_BO_UPLOAD_ON_UNMAP; op->row_pitch = row_pitch; op->slice_pitch = slice_pitch;
Do we need UPLOAD_BO_UPLOAD_ON_UNMAP here? It seems a little out of place, and wined3d_cs_exec_update_sub_resource() doesn't appear to use it.
No, I suppose we don't. Thinking too far ahead...
Although if we obsolesce UPLOAD_BO_UPLOAD_ON_UNMAP entirely, which is possible, that does mean we can't use it for deferred contexts as you suggest below. (And if we don't, it's mildly weird not to pass it here.)
@@ -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->map_flags = flags; 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->map_flags = flags; 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,9 @@ 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 = 0;
if (!(upload->map_flags & WINED3D_MAP_NOOVERWRITE))
bo->flags |= UPLOAD_BO_UPLOAD_ON_UNMAP; return true; }
In some ways, it would seem nicer to store the UPLOAD_BO flags directly in the wined3d_deferred_upload structure, instead of deriving them from the stored map flags. Perhaps there are other reasons to store the map flags in subsequent patches though?
I suppose that works. I don't think there was any other instance I had planned that checks the map flags for deferred contexts.