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:
@@ -108,6 +108,7 @@ d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_fo
|
|||||||
pipe_reference_init(&bo->reference, 1);
|
pipe_reference_init(&bo->reference, 1);
|
||||||
bo->res = res;
|
bo->res = res;
|
||||||
bo->trans_state = create_trans_state(res, format);
|
bo->trans_state = create_trans_state(res, format);
|
||||||
|
bo->unique_id = p_atomic_inc_return(&screen->resource_id_generator);
|
||||||
|
|
||||||
bo->residency_status = residency;
|
bo->residency_status = residency;
|
||||||
bo->last_used_timestamp = 0;
|
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 *
|
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;
|
struct d3d12_bo *bo;
|
||||||
|
|
||||||
@@ -178,6 +179,7 @@ d3d12_bo_wrap_buffer(struct pb_buffer *buf)
|
|||||||
pipe_reference_init(&bo->reference, 1);
|
pipe_reference_init(&bo->reference, 1);
|
||||||
bo->buffer = buf;
|
bo->buffer = buf;
|
||||||
bo->trans_state = NULL; /* State from base BO will be used */
|
bo->trans_state = NULL; /* State from base BO will be used */
|
||||||
|
bo->unique_id = p_atomic_inc_return(&screen->resource_id_generator);
|
||||||
|
|
||||||
return bo;
|
return bo;
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,12 @@ struct d3d12_bo {
|
|||||||
struct pb_buffer *buffer;
|
struct pb_buffer *buffer;
|
||||||
struct TransitionableResourceState *trans_state;
|
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;
|
struct list_head residency_list_entry;
|
||||||
uint64_t estimated_size;
|
uint64_t estimated_size;
|
||||||
int64_t last_used_timestamp;
|
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);
|
d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_format format, enum d3d12_residency_status residency);
|
||||||
|
|
||||||
struct d3d12_bo *
|
struct d3d12_bo *
|
||||||
d3d12_bo_wrap_buffer(struct pb_buffer *buf);
|
d3d12_bo_wrap_buffer(struct d3d12_screen *screen, struct pb_buffer *buf);
|
||||||
|
|
||||||
void
|
void
|
||||||
d3d12_debug_describe_bo(char* buf, struct d3d12_bo* ptr);
|
d3d12_debug_describe_bo(char* buf, struct d3d12_bo* ptr);
|
||||||
|
@@ -159,7 +159,7 @@ init_buffer(struct d3d12_screen *screen,
|
|||||||
buf = bufmgr->create_buffer(bufmgr, templ->width0, &buf_desc);
|
buf = bufmgr->create_buffer(bufmgr, templ->width0, &buf_desc);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return false;
|
return false;
|
||||||
res->bo = d3d12_bo_wrap_buffer(buf);
|
res->bo = d3d12_bo_wrap_buffer(screen, buf);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -93,6 +93,7 @@ struct d3d12_screen {
|
|||||||
struct d3d12_descriptor_handle null_rtv;
|
struct d3d12_descriptor_handle null_rtv;
|
||||||
|
|
||||||
volatile uint32_t ctx_count;
|
volatile uint32_t ctx_count;
|
||||||
|
volatile uint64_t resource_id_generator;
|
||||||
|
|
||||||
/* capabilities */
|
/* capabilities */
|
||||||
D3D_FEATURE_LEVEL max_feature_level;
|
D3D_FEATURE_LEVEL max_feature_level;
|
||||||
|
Reference in New Issue
Block a user