struct radv_image_view;
struct radv_instance;
-VkResult __vk_errorf(struct radv_instance *instance, VkResult error, const char *file, int line, const char *format, ...);
-
-#define vk_error(instance, error) __vk_errorf(instance, error, __FILE__, __LINE__, NULL);
-#define vk_errorf(instance, error, format, ...) __vk_errorf(instance, error, __FILE__, __LINE__, format, ## __VA_ARGS__);
+VkResult __vk_errorv(struct radv_instance *instance, const void *object,
+ VkDebugReportObjectTypeEXT type, VkResult error,
+ const char *file, int line, const char *format,
+ va_list args);
+
+VkResult __vk_errorf(struct radv_instance *instance, const void *object,
+ VkDebugReportObjectTypeEXT type, VkResult error,
+ const char *file, int line, const char *format, ...)
+ radv_printflike(7, 8);
+
+#define vk_error(instance, error) \
+ __vk_errorf(instance, NULL, \
+ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, \
+ error, __FILE__, __LINE__, NULL);
+#define vk_errorf(instance, error, format, ...) \
+ __vk_errorf(instance, NULL, \
+ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, \
+ error, __FILE__, __LINE__, format, ## __VA_ARGS__);
void __radv_finishme(const char *file, int line, const char *format, ...)
radv_printflike(3, 4);
uint32_t apiVersion;
+ char * applicationName;
+ uint32_t applicationVersion;
char * engineName;
uint32_t engineVersion;
#define RADV_MAX_QUEUE_FAMILIES 3
+struct radv_deferred_queue_submission;
+
enum ring_type radv_queue_family_to_ring(int f);
struct radv_queue {
struct list_head pending_submissions;
pthread_mutex_t pending_mutex;
+
+ pthread_mutex_t thread_mutex;
+ pthread_cond_t thread_cond;
+ struct radv_deferred_queue_submission *thread_submission;
+ pthread_t submission_thread;
+ bool thread_exit;
+ bool thread_running;
};
struct radv_bo_list {
uint32_t thread_trace_buffer_size;
int thread_trace_start_frame;
+ /* Trap handler. */
+ struct radv_shader_variant *trap_handler_shader;
+ struct radeon_winsys_bo *tma_bo; /* Trap Memory Address */
+ uint32_t *tma_ptr;
+
/* Overallocation. */
bool overallocation_disallowed;
uint64_t allocated_memory_size[VK_MAX_MEMORY_HEAPS];
mtx_t overallocation_mutex;
+
+ /* Track the number of device loss occurs. */
+ int lost;
};
+VkResult _radv_device_set_lost(struct radv_device *device,
+ const char *file, int line,
+ const char *msg, ...)
+ radv_printflike(4, 5);
+
+#define radv_device_set_lost(dev, ...) \
+ _radv_device_set_lost(dev, __FILE__, __LINE__, __VA_ARGS__)
+
+static inline bool
+radv_device_is_lost(const struct radv_device *device)
+{
+ return unlikely(p_atomic_read(&device->lost));
+}
+
struct radv_device_memory {
struct vk_object_base base;
struct radeon_winsys_bo *bo;
struct radv_vertex_binding {
struct radv_buffer * buffer;
VkDeviceSize offset;
+ VkDeviceSize size;
+ VkDeviceSize stride;
};
struct radv_streamout_binding {
void si_emit_graphics(struct radv_device *device,
struct radeon_cmdbuf *cs);
-void si_emit_compute(struct radv_physical_device *physical_device,
+void si_emit_compute(struct radv_device *device,
struct radeon_cmdbuf *cs);
void cik_create_gfx_config(struct radv_device *device);
bool radv_get_memory_fd(struct radv_device *device,
struct radv_device_memory *memory,
int *pFD);
+void radv_free_memory(struct radv_device *device,
+ const VkAllocationCallbacks* pAllocator,
+ struct radv_device_memory *mem);
static inline void
radv_emit_shader_pointer_head(struct radeon_cmdbuf *cs,
struct radv_multisample_state {
uint32_t db_eqaa;
- uint32_t pa_sc_line_cntl;
uint32_t pa_sc_mode_cntl_0;
uint32_t pa_sc_mode_cntl_1;
uint32_t pa_sc_aa_config;
uint8_t incr;
};
-struct radv_vertex_elements_info {
- uint32_t format_size[MAX_VERTEX_ATTRIBS];
-};
-
struct radv_ia_multi_vgt_param_helpers {
uint32_t base;
bool partial_es_wave;
uint32_t ctx_cs_hash;
struct radeon_cmdbuf ctx_cs;
- struct radv_vertex_elements_info vertex_elements;
-
uint32_t binding_stride[MAX_VBS];
uint8_t num_vertex_bindings;
unsigned tess_patch_control_points;
unsigned pa_su_sc_mode_cntl;
unsigned db_depth_control;
+ bool uses_dynamic_stride;
/* Used for rbplus */
uint32_t col_format;
uint32_t cb_target_mask;
- bool is_dual_src;
} graphics;
};
gl_shader_stage stage,
int idx);
-struct radv_shader_variant *radv_get_shader(struct radv_pipeline *pipeline,
+struct radv_shader_variant *radv_get_shader(const struct radv_pipeline *pipeline,
gl_shader_stage stage);
struct radv_graphics_pipeline_create_info {
RADV_SEMAPHORE_NONE,
RADV_SEMAPHORE_WINSYS,
RADV_SEMAPHORE_SYNCOBJ,
+ RADV_SEMAPHORE_TIMELINE_SYNCOBJ,
RADV_SEMAPHORE_TIMELINE,
} radv_semaphore_kind;
struct list_head waiters;
};
+struct radv_timeline_syncobj {
+ /* Keep syncobj first, so common-code can just handle this as
+ * non-timeline syncobj. */
+ uint32_t syncobj;
+ uint64_t max_point; /* max submitted point. */
+};
+
struct radv_semaphore_part {
radv_semaphore_kind kind;
union {
uint32_t syncobj;
struct radeon_winsys_sem *ws_sem;
struct radv_timeline timeline;
+ struct radv_timeline_syncobj timeline_syncobj;
};
};
struct radv_image *image,
const VkImageSubresourceRange *range);
+typedef enum {
+ RADV_FENCE_NONE,
+ RADV_FENCE_WINSYS,
+ RADV_FENCE_SYNCOBJ,
+ RADV_FENCE_WSI,
+} radv_fence_kind;
+
+struct radv_fence_part {
+ radv_fence_kind kind;
+
+ union {
+ /* AMDGPU winsys fence. */
+ struct radeon_winsys_fence *fence;
+
+ /* DRM syncobj handle for syncobj-based fences. */
+ uint32_t syncobj;
+
+ /* WSI fence. */
+ struct wsi_fence *fence_wsi;
+ };
+};
+
struct radv_fence {
struct vk_object_base base;
- struct radeon_winsys_fence *fence;
- struct wsi_fence *fence_wsi;
-
- uint32_t syncobj;
- uint32_t temp_syncobj;
+ struct radv_fence_part permanent;
+ struct radv_fence_part temporary;
};
/* radv_nir_to_llvm.c */
case 0xc: /* GL_TRIANGLES_ADJACENCY_ARB */
return 6;
case 7: /* GL_QUADS */
- return V_028A6C_OUTPRIM_TYPE_TRISTRIP;
+ return V_028A6C_TRISTRIP;
default:
assert(0);
return 0;
}
}
+/**
+ * Helper used for debugging compiler issues by enabling/disabling LLVM for a
+ * specific shader stage (developers only).
+ */
+static inline bool
+radv_use_llvm_for_stage(struct radv_device *device, UNUSED gl_shader_stage stage)
+{
+ return device->physical_device->use_llvm;
+}
+
#define RADV_DEFINE_HANDLE_CASTS(__radv_type, __VkType) \
\
static inline struct __radv_type * \