Add debug utilities for Vulkan
Features: - Debug-only tracking of objects by type. See get_driver_allocs_by_object_type et al. - Debug-only Breadcrumb info for debugging GPU crashes and device lost - Performance report per frame from get_perf_report - Some VMA calls had to be modified in order to insert the necessary memory callbacks Functionality marked as "debug-only" is only available in debug or dev builds. Misc fixes: - Early break optimization in RenderingDevice::uniform_set_create ============================ The work was performed by collaboration of TheForge and Google. I am merely splitting it up into smaller PRs and cleaning it up.
This commit is contained in:
committed by
Rémi Verschelde
parent
5ca419e32c
commit
364f916f3f
@@ -111,7 +111,18 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver {
|
||||
PFN_vkAcquireNextImageKHR AcquireNextImageKHR = nullptr;
|
||||
PFN_vkQueuePresentKHR QueuePresentKHR = nullptr;
|
||||
PFN_vkCreateRenderPass2KHR CreateRenderPass2KHR = nullptr;
|
||||
|
||||
// Debug marker extensions.
|
||||
PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT = nullptr;
|
||||
PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT = nullptr;
|
||||
PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT = nullptr;
|
||||
PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT = nullptr;
|
||||
|
||||
// Debug device fault.
|
||||
PFN_vkGetDeviceFaultInfoEXT GetDeviceFaultInfoEXT = nullptr;
|
||||
};
|
||||
// Debug marker extensions.
|
||||
VkDebugReportObjectTypeEXT _convert_to_debug_report_objectType(VkObjectType p_object_type);
|
||||
|
||||
VkDevice vk_device = VK_NULL_HANDLE;
|
||||
RenderingContextDriverVulkan *context_driver = nullptr;
|
||||
@@ -132,6 +143,10 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver {
|
||||
ShaderCapabilities shader_capabilities;
|
||||
StorageBufferCapabilities storage_buffer_capabilities;
|
||||
bool pipeline_cache_control_support = false;
|
||||
bool device_fault_support = false;
|
||||
#if defined(VK_TRACK_DEVICE_MEMORY)
|
||||
bool device_memory_report_support = false;
|
||||
#endif
|
||||
DeviceFunctions device_functions;
|
||||
|
||||
void _register_requested_device_extension(const CharString &p_extension_name, bool p_required);
|
||||
@@ -160,10 +175,13 @@ private:
|
||||
|
||||
VmaPool _find_or_create_small_allocs_pool(uint32_t p_mem_type_index);
|
||||
|
||||
private:
|
||||
BufferID breadcrumb_buffer;
|
||||
|
||||
public:
|
||||
/*****************/
|
||||
/**** BUFFERS ****/
|
||||
/*****************/
|
||||
private:
|
||||
struct BufferInfo {
|
||||
VkBuffer vk_buffer = VK_NULL_HANDLE;
|
||||
struct {
|
||||
@@ -174,7 +192,6 @@ private:
|
||||
VkBufferView vk_view = VK_NULL_HANDLE; // For texel buffers.
|
||||
};
|
||||
|
||||
public:
|
||||
virtual BufferID buffer_create(uint64_t p_size, BitField<BufferUsageBits> p_usage, MemoryAllocationType p_allocation_type) override final;
|
||||
virtual bool buffer_set_texel_format(BufferID p_buffer, DataFormat p_format) override final;
|
||||
virtual void buffer_free(BufferID p_buffer) override final;
|
||||
@@ -187,6 +204,7 @@ public:
|
||||
/*****************/
|
||||
|
||||
struct TextureInfo {
|
||||
VkImage vk_image = VK_NULL_HANDLE;
|
||||
VkImageView vk_view = VK_NULL_HANDLE;
|
||||
DataFormat rd_format = DATA_FORMAT_MAX;
|
||||
VkImageCreateInfo vk_create_info = {};
|
||||
@@ -405,6 +423,7 @@ public:
|
||||
virtual ShaderID shader_create_from_bytecode(const Vector<uint8_t> &p_shader_binary, ShaderDescription &r_shader_desc, String &r_name) override final;
|
||||
virtual void shader_free(ShaderID p_shader) override final;
|
||||
|
||||
virtual void shader_destroy_modules(ShaderID p_shader) override final;
|
||||
/*********************/
|
||||
/**** UNIFORM SET ****/
|
||||
/*********************/
|
||||
@@ -606,6 +625,13 @@ public:
|
||||
virtual void command_begin_label(CommandBufferID p_cmd_buffer, const char *p_label_name, const Color &p_color) override final;
|
||||
virtual void command_end_label(CommandBufferID p_cmd_buffer) override final;
|
||||
|
||||
/****************/
|
||||
/**** DEBUG *****/
|
||||
/****************/
|
||||
virtual void command_insert_breadcrumb(CommandBufferID p_cmd_buffer, uint32_t p_data) override final;
|
||||
void print_lost_device_info();
|
||||
void on_device_lost() const;
|
||||
|
||||
/********************/
|
||||
/**** SUBMISSION ****/
|
||||
/********************/
|
||||
@@ -620,6 +646,7 @@ public:
|
||||
virtual void set_object_name(ObjectType p_type, ID p_driver_id, const String &p_name) override final;
|
||||
virtual uint64_t get_resource_native_handle(DriverResource p_type, ID p_driver_id) override final;
|
||||
virtual uint64_t get_total_memory_used() override final;
|
||||
|
||||
virtual uint64_t limit_get(Limit p_limit) override final;
|
||||
virtual uint64_t api_trait_get(ApiTrait p_trait) override final;
|
||||
virtual bool has_feature(Features p_feature) override final;
|
||||
@@ -651,4 +678,6 @@ public:
|
||||
virtual ~RenderingDeviceDriverVulkan();
|
||||
};
|
||||
|
||||
using VKC = RenderingContextDriverVulkan;
|
||||
|
||||
#endif // RENDERING_DEVICE_DRIVER_VULKAN_H
|
||||
|
||||
Reference in New Issue
Block a user