d3d12: Give bos a unique identifier to be used for state tracking

Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17688>
This commit is contained in:
Jesse Natalie 2022-07-19 14:47:47 -07:00 committed by Marge Bot
parent bc9616129e
commit 17c3f4f3e1
4 changed files with 12 additions and 3 deletions

View File

@ -108,6 +108,7 @@ d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_fo
pipe_reference_init(&bo->reference, 1);
bo->res = res;
bo->trans_state = create_trans_state(res, format);
bo->unique_id = p_atomic_inc_return(&screen->resource_id_generator);
bo->residency_status = residency;
bo->last_used_timestamp = 0;
@ -167,7 +168,7 @@ d3d12_bo_new(struct d3d12_screen *screen, uint64_t size, const pb_desc *pb_desc)
}
struct d3d12_bo *
d3d12_bo_wrap_buffer(struct pb_buffer *buf)
d3d12_bo_wrap_buffer(struct d3d12_screen *screen, struct pb_buffer *buf)
{
struct d3d12_bo *bo;
@ -178,6 +179,7 @@ d3d12_bo_wrap_buffer(struct pb_buffer *buf)
pipe_reference_init(&bo->reference, 1);
bo->buffer = buf;
bo->trans_state = NULL; /* State from base BO will be used */
bo->unique_id = p_atomic_inc_return(&screen->resource_id_generator);
return bo;
}

View File

@ -47,6 +47,12 @@ struct d3d12_bo {
struct pb_buffer *buffer;
struct TransitionableResourceState *trans_state;
/* Used as a key in per-context resource state maps,
* to avoid needing to lock them for single-threaded lookups to
* protect against resource destruction.
*/
uint64_t unique_id;
struct list_head residency_list_entry;
uint64_t estimated_size;
int64_t last_used_timestamp;
@ -111,7 +117,7 @@ struct d3d12_bo *
d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_format format, enum d3d12_residency_status residency);
struct d3d12_bo *
d3d12_bo_wrap_buffer(struct pb_buffer *buf);
d3d12_bo_wrap_buffer(struct d3d12_screen *screen, struct pb_buffer *buf);
void
d3d12_debug_describe_bo(char* buf, struct d3d12_bo* ptr);

View File

@ -159,7 +159,7 @@ init_buffer(struct d3d12_screen *screen,
buf = bufmgr->create_buffer(bufmgr, templ->width0, &buf_desc);
if (!buf)
return false;
res->bo = d3d12_bo_wrap_buffer(buf);
res->bo = d3d12_bo_wrap_buffer(screen, buf);
return true;
}

View File

@ -93,6 +93,7 @@ struct d3d12_screen {
struct d3d12_descriptor_handle null_rtv;
volatile uint32_t ctx_count;
volatile uint64_t resource_id_generator;
/* capabilities */
D3D_FEATURE_LEVEL max_feature_level;