mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-27 04:30:37 +02:00
winsys/amdgpu: add amdgpu_ib and amdgpu_cs_from_ib helper functions
The latter function allows getting the containing amdgpu_cs from any IB (including non-main ones). Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
9e5ed559ba
commit
f80c6abb9e
2 changed files with 37 additions and 7 deletions
|
|
@ -531,6 +531,10 @@ amdgpu_cs_create(struct radeon_winsys_ctx *rwctx,
|
|||
cs->flush_data = flush_ctx;
|
||||
cs->ring_type = ring_type;
|
||||
|
||||
cs->main.ib_type = IB_MAIN;
|
||||
cs->const_ib.ib_type = IB_CONST;
|
||||
cs->const_preamble_ib.ib_type = IB_CONST_PREAMBLE;
|
||||
|
||||
if (!amdgpu_init_cs_context(&cs->csc1, ring_type)) {
|
||||
FREE(cs);
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,13 @@ struct amdgpu_cs_buffer {
|
|||
enum radeon_bo_domain domains;
|
||||
};
|
||||
|
||||
enum ib_type {
|
||||
IB_CONST_PREAMBLE = 0,
|
||||
IB_CONST = 1, /* the const IB must be first */
|
||||
IB_MAIN = 2,
|
||||
IB_NUM
|
||||
};
|
||||
|
||||
struct amdgpu_ib {
|
||||
struct radeon_winsys_cs base;
|
||||
|
||||
|
|
@ -57,13 +64,7 @@ struct amdgpu_ib {
|
|||
struct pb_buffer *big_ib_buffer;
|
||||
uint8_t *ib_mapped;
|
||||
unsigned used_ib_space;
|
||||
};
|
||||
|
||||
enum ib_type {
|
||||
IB_CONST_PREAMBLE = 0,
|
||||
IB_CONST = 1, /* the const IB must be first */
|
||||
IB_MAIN = 2,
|
||||
IB_NUM
|
||||
enum ib_type ib_type;
|
||||
};
|
||||
|
||||
struct amdgpu_cs_context {
|
||||
|
|
@ -148,12 +149,37 @@ static inline void amdgpu_fence_reference(struct pipe_fence_handle **dst,
|
|||
|
||||
int amdgpu_lookup_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *bo);
|
||||
|
||||
static inline struct amdgpu_ib *
|
||||
amdgpu_ib(struct radeon_winsys_cs *base)
|
||||
{
|
||||
return (struct amdgpu_ib *)base;
|
||||
}
|
||||
|
||||
static inline struct amdgpu_cs *
|
||||
amdgpu_cs(struct radeon_winsys_cs *base)
|
||||
{
|
||||
assert(amdgpu_ib(base)->ib_type == IB_MAIN);
|
||||
return (struct amdgpu_cs*)base;
|
||||
}
|
||||
|
||||
#define get_container(member_ptr, container_type, container_member) \
|
||||
(container_type *)((char *)(member_ptr) - offsetof(container_type, container_member))
|
||||
|
||||
static inline struct amdgpu_cs *
|
||||
amdgpu_cs_from_ib(struct amdgpu_ib *ib)
|
||||
{
|
||||
switch (ib->ib_type) {
|
||||
case IB_MAIN:
|
||||
return get_container(ib, struct amdgpu_cs, main);
|
||||
case IB_CONST:
|
||||
return get_container(ib, struct amdgpu_cs, const_ib);
|
||||
case IB_CONST_PREAMBLE:
|
||||
return get_container(ib, struct amdgpu_cs, const_preamble_ib);
|
||||
default:
|
||||
unreachable("bad ib_type");
|
||||
}
|
||||
}
|
||||
|
||||
static inline boolean
|
||||
amdgpu_bo_is_referenced_by_cs(struct amdgpu_cs *cs,
|
||||
struct amdgpu_winsys_bo *bo)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue