summaryrefslogtreecommitdiff
path: root/src/virtio/vulkan/vn_device.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtio/vulkan/vn_device.h')
-rw-r--r--src/virtio/vulkan/vn_device.h56
1 files changed, 52 insertions, 4 deletions
diff --git a/src/virtio/vulkan/vn_device.h b/src/virtio/vulkan/vn_device.h
index 0efd0b26023..d80aa0c5a51 100644
--- a/src/virtio/vulkan/vn_device.h
+++ b/src/virtio/vulkan/vn_device.h
@@ -13,26 +13,74 @@
#include "vn_common.h"
+#include "vn_buffer.h"
#include "vn_device_memory.h"
+#include "vn_feedback.h"
+#include "vn_image.h"
+
+struct vn_device_memory_report {
+ PFN_vkDeviceMemoryReportCallbackEXT callback;
+ void *data;
+};
struct vn_device {
struct vn_device_base base;
struct vn_instance *instance;
struct vn_physical_device *physical_device;
+ uint32_t device_mask;
struct vn_renderer *renderer;
+ struct vn_ring *primary_ring;
- struct vn_queue *queues;
- uint32_t queue_count;
+ struct vn_device_memory_report *memory_reports;
+ uint32_t memory_report_count;
+
+ /* unique queue family indices in which to create the device queues */
+ uint32_t *queue_families;
+ uint32_t queue_family_count;
struct vn_device_memory_pool memory_pools[VK_MAX_MEMORY_TYPES];
- /* cache memory type requirement for AHB backed VkBuffer */
- uint32_t ahb_buffer_memory_type_bits;
+ struct vn_feedback_pool feedback_pool;
+
+ /* feedback cmd pool per queue family used by the device
+ * - length matches queue_family_count
+ * - order matches queue_families
+ */
+ struct vn_feedback_cmd_pool *fb_cmd_pools;
+
+ struct vn_queue *queues;
+ uint32_t queue_count;
+
+ struct vn_buffer_reqs_cache buffer_reqs_cache;
+ struct vn_image_reqs_cache image_reqs_cache;
};
VK_DEFINE_HANDLE_CASTS(vn_device,
base.base.base,
VkDevice,
VK_OBJECT_TYPE_DEVICE)
+static inline void
+vn_device_emit_device_memory_report(struct vn_device *dev,
+ VkDeviceMemoryReportEventTypeEXT type,
+ uint64_t mem_obj_id,
+ VkDeviceSize size,
+ VkObjectType obj_type,
+ uint64_t obj_handle,
+ uint32_t heap_index)
+{
+ assert(dev->memory_reports);
+ const VkDeviceMemoryReportCallbackDataEXT report = {
+ .sType = VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT,
+ .type = type,
+ .memoryObjectId = mem_obj_id,
+ .size = size,
+ .objectType = obj_type,
+ .objectHandle = obj_handle,
+ .heapIndex = heap_index,
+ };
+ for (uint32_t i = 0; i < dev->memory_report_count; i++)
+ dev->memory_reports[i].callback(&report, dev->memory_reports[i].data);
+}
+
#endif /* VN_DEVICE_H */