#include "util/xmlconfig.h"
#include "vk_alloc.h"
#include "vk_debug_report.h"
+#include "vk_object.h"
#include "radv_radeon_winsys.h"
#include "ac_binary.h"
struct radv_physical_device {
VK_LOADER_DATA _loader_data;
+ /* Link in radv_instance::physical_devices */
+ struct list_head link;
+
struct radv_instance * instance;
struct radeon_winsys *ws;
};
struct radv_instance {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
VkAllocationCallbacks alloc;
uint32_t apiVersion;
- int physicalDeviceCount;
- struct radv_physical_device physicalDevices[RADV_MAX_DRM_DEVICES];
char * engineName;
uint32_t engineVersion;
struct radv_physical_device_dispatch_table physical_device_dispatch;
struct radv_device_dispatch_table device_dispatch;
+ bool physical_devices_enumerated;
+ struct list_head physical_devices;
+
struct driOptionCache dri_options;
struct driOptionCache available_dri_options;
};
struct cache_entry;
struct radv_pipeline_cache {
- struct radv_device * device;
+ struct vk_object_base base;
+ struct radv_device * device;
pthread_mutex_t mutex;
+ VkPipelineCacheCreateFlags flags;
uint32_t total_size;
uint32_t table_size;
char *uid;
};
-struct radv_device {
- VK_LOADER_DATA _loader_data;
+#define RADV_BORDER_COLOR_COUNT 4096
+#define RADV_BORDER_COLOR_BUFFER_SIZE (sizeof(VkClearColorValue) * RADV_BORDER_COLOR_COUNT)
- VkAllocationCallbacks alloc;
+struct radv_device_border_color_data {
+ bool used[RADV_BORDER_COLOR_COUNT];
+
+ struct radeon_winsys_bo *bo;
+ VkClearColorValue *colors_gpu_ptr;
+
+ /* Mutex is required to guarantee vkCreateSampler thread safety
+ * given that we are writing to a buffer and checking color occupation */
+ pthread_mutex_t mutex;
+};
+
+struct radv_device {
+ struct vk_device vk;
struct radv_instance * instance;
struct radeon_winsys *ws;
/* Whether anisotropy is forced with RADV_TEX_ANISO (-1 is disabled). */
int force_aniso;
+ struct radv_device_border_color_data border_color_data;
+
struct radv_secure_compile_state *sc_state;
/* Condition variable for legacy timelines, to notify waiters when a
};
struct radv_device_memory {
+ struct vk_object_base base;
struct radeon_winsys_bo *bo;
/* for dedicated allocations */
struct radv_image *image;
};
struct radv_descriptor_set {
+ struct vk_object_base base;
const struct radv_descriptor_set_layout *layout;
uint32_t size;
uint32_t buffer_count;
};
struct radv_descriptor_pool {
+ struct vk_object_base base;
struct radeon_winsys_bo *bo;
uint8_t *mapped_ptr;
uint64_t current_offset;
};
struct radv_descriptor_update_template {
+ struct vk_object_base base;
uint32_t entry_count;
VkPipelineBindPoint bind_point;
struct radv_descriptor_update_template_entry entry[0];
};
struct radv_buffer {
+ struct vk_object_base base;
VkDeviceSize size;
VkBufferUsageFlags usage;
};
struct radv_cmd_pool {
+ struct vk_object_base base;
VkAllocationCallbacks alloc;
struct list_head cmd_buffers;
struct list_head free_cmd_buffers;
};
struct radv_cmd_buffer {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
struct radv_device * device;
uint32_t z);
struct radv_event {
+ struct vk_object_base base;
struct radeon_winsys_bo *bo;
uint64_t *map;
};
#define SI_GS_PER_ES 128
struct radv_pipeline {
+ struct vk_object_base base;
struct radv_device * device;
struct radv_dynamic_state dynamic_state;
};
struct radv_image {
+ struct vk_object_base base;
VkImageType type;
/* The original VkFormat provided by the client. This may not match any
* of the actual surface formats.
};
struct radv_image_view {
+ struct vk_object_base base;
struct radv_image *image; /**< VkImageViewCreateInfo::image */
struct radeon_winsys_bo *bo;
VkFormat radv_get_aspect_format(struct radv_image *image, VkImageAspectFlags mask);
struct radv_sampler_ycbcr_conversion {
+ struct vk_object_base base;
VkFormat format;
VkSamplerYcbcrModelConversion ycbcr_model;
VkSamplerYcbcrRange ycbcr_range;
};
struct radv_buffer_view {
+ struct vk_object_base base;
struct radeon_winsys_bo *bo;
VkFormat vk_format;
uint64_t range; /**< VkBufferViewCreateInfo::range */
}
struct radv_sampler {
+ struct vk_object_base base;
uint32_t state[4];
struct radv_sampler_ycbcr_conversion *ycbcr_sampler;
+ uint32_t border_color_slot;
};
struct radv_framebuffer {
+ struct vk_object_base base;
uint32_t width;
uint32_t height;
uint32_t layers;
};
struct radv_render_pass {
+ struct vk_object_base base;
uint32_t attachment_count;
uint32_t subpass_count;
struct radv_subpass_attachment * subpass_attachments;
void radv_device_finish_meta(struct radv_device *device);
struct radv_query_pool {
+ struct vk_object_base base;
struct radeon_winsys_bo *bo;
uint32_t stride;
uint32_t availability_offset;
};
struct radv_semaphore {
+ struct vk_object_base base;
struct radv_semaphore_part permanent;
struct radv_semaphore_part temporary;
};
const VkImageSubresourceRange *range);
struct radv_fence {
+ struct vk_object_base base;
struct radeon_winsys_fence *fence;
struct wsi_fence *fence_wsi;