#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
-#include "main/macros.h"
+#include <string.h>
+#include <vulkan/vulkan.h>
#include "amd_family.h"
+#include "util/u_memory.h"
+#include "util/u_math.h"
struct radeon_info;
struct ac_surf_info;
struct radeon_surf;
-#define FREE(x) free(x)
-
enum radeon_bo_domain { /* bitfield */
RADEON_DOMAIN_GTT = 2,
RADEON_DOMAIN_VRAM = 4,
RADEON_FLAG_READ_ONLY = (1 << 7),
RADEON_FLAG_32BIT = (1 << 8),
RADEON_FLAG_PREFER_LOCAL_BO = (1 << 9),
+ RADEON_FLAG_ZERO_VRAM = (1 << 10),
};
enum radeon_bo_usage { /* bitfield */
RADEON_USAGE_READWRITE = RADEON_USAGE_READ | RADEON_USAGE_WRITE
};
-enum ring_type {
- RING_GFX = 0,
- RING_COMPUTE,
- RING_DMA,
- RING_UVD,
- RING_VCE,
- RING_LAST,
-};
-
enum radeon_ctx_priority {
RADEON_CTX_PRIORITY_INVALID = -1,
RADEON_CTX_PRIORITY_LOW = 0,
struct {
/* surface flags */
unsigned swizzle_mode:5;
+ bool scanout;
} gfx9;
} u;
uint32_t metadata[64];
};
-uint32_t syncobj_handle;
struct radeon_winsys_fence;
+struct radeon_winsys_ctx;
struct radeon_winsys_bo {
uint64_t va;
bool is_local;
- bool vram_cpu_access;
+ bool vram_no_cpu_access;
};
struct radv_winsys_sem_counts {
uint32_t syncobj_count;
+ uint32_t syncobj_reset_count; /* for wait only, whether to reset the syncobj */
uint32_t sem_count;
uint32_t *syncobj;
struct radeon_winsys_sem **sem;
struct radeon_winsys_bo *(*buffer_from_fd)(struct radeon_winsys *ws,
int fd,
unsigned priority,
- unsigned *stride, unsigned *offset);
+ uint64_t *alloc_size);
bool (*buffer_get_fd)(struct radeon_winsys *ws,
struct radeon_winsys_bo *bo,
int *fd);
+ bool (*buffer_get_flags_from_fd)(struct radeon_winsys *ws, int fd,
+ enum radeon_bo_domain *domains,
+ enum radeon_bo_flag *flags);
+
void (*buffer_unmap)(struct radeon_winsys_bo *bo);
void (*buffer_set_metadata)(struct radeon_winsys_bo *bo,
void (*buffer_get_metadata)(struct radeon_winsys_bo *bo,
struct radeon_bo_metadata *md);
- void (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
- uint64_t offset, uint64_t size,
- struct radeon_winsys_bo *bo, uint64_t bo_offset);
- struct radeon_winsys_ctx *(*ctx_create)(struct radeon_winsys *ws,
- enum radeon_ctx_priority priority);
+ VkResult (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
+ uint64_t offset, uint64_t size,
+ struct radeon_winsys_bo *bo, uint64_t bo_offset);
+ VkResult (*ctx_create)(struct radeon_winsys *ws,
+ enum radeon_ctx_priority priority,
+ struct radeon_winsys_ctx **ctx);
void (*ctx_destroy)(struct radeon_winsys_ctx *ctx);
bool (*ctx_wait_idle)(struct radeon_winsys_ctx *ctx,
void (*cs_reset)(struct radeon_cmdbuf *cs);
- bool (*cs_finalize)(struct radeon_cmdbuf *cs);
+ VkResult (*cs_finalize)(struct radeon_cmdbuf *cs);
void (*cs_grow)(struct radeon_cmdbuf * cs, size_t min_size);
- int (*cs_submit)(struct radeon_winsys_ctx *ctx,
- int queue_index,
- struct radeon_cmdbuf **cs_array,
- unsigned cs_count,
- struct radeon_cmdbuf *initial_preamble_cs,
- struct radeon_cmdbuf *continue_preamble_cs,
- struct radv_winsys_sem_info *sem_info,
- const struct radv_winsys_bo_list *bo_list, /* optional */
- bool can_patch,
- struct radeon_winsys_fence *fence);
+ VkResult (*cs_submit)(struct radeon_winsys_ctx *ctx,
+ int queue_index,
+ struct radeon_cmdbuf **cs_array,
+ unsigned cs_count,
+ struct radeon_cmdbuf *initial_preamble_cs,
+ struct radeon_cmdbuf *continue_preamble_cs,
+ struct radv_winsys_sem_info *sem_info,
+ const struct radv_winsys_bo_list *bo_list, /* optional */
+ bool can_patch,
+ struct radeon_winsys_fence *fence);
void (*cs_add_buffer)(struct radeon_cmdbuf *cs,
struct radeon_winsys_bo *bo);
void (*destroy_sem)(struct radeon_winsys_sem *sem);
/* new shareable sync objects */
- int (*create_syncobj)(struct radeon_winsys *ws, uint32_t *handle);
+ int (*create_syncobj)(struct radeon_winsys *ws, bool create_signaled,
+ uint32_t *handle);
void (*destroy_syncobj)(struct radeon_winsys *ws, uint32_t handle);
void (*reset_syncobj)(struct radeon_winsys *ws, uint32_t handle);