debug_report.h revision 715b86ac7d0853131b375ff786c87d8d87a762a1
1715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall/* 2715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * Copyright 2016 The Android Open Source Project 3715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * 4715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 5715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * you may not use this file except in compliance with the License. 6715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * You may obtain a copy of the License at 7715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * 8715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * http://www.apache.org/licenses/LICENSE-2.0 9715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * 10715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * Unless required by applicable law or agreed to in writing, software 11715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 12715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * See the License for the specific language governing permissions and 14715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall * limitations under the License. 15715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall */ 16715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 17715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#ifndef LIBVULKAN_DEBUG_REPORT_H 18715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#define LIBVULKAN_DEBUG_REPORT_H 1 19715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 20715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#include <shared_mutex> 21715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#include <vulkan/vk_ext_debug_report.h> 22715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 23715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallnamespace vulkan { 24715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 25715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall// clang-format off 26715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVKAPI_ATTR VkResult CreateDebugReportCallbackEXT_Bottom(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); 27715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVKAPI_ATTR void DestroyDebugReportCallbackEXT_Bottom(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); 28715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVKAPI_ATTR void DebugReportMessageEXT_Bottom(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); 29715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall// clang-format on 30715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 31715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallclass DebugReportCallbackList { 32715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall public: 33715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList() 34715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall : head_{nullptr, 0, nullptr, nullptr, VK_NULL_HANDLE} {} 35715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList(const DebugReportCallbackList&) = delete; 36715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList& operator=(const DebugReportCallbackList&) = delete; 37715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall ~DebugReportCallbackList() = default; 38715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 39715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkResult CreateCallback( 40715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkInstance instance, 41715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkDebugReportCallbackCreateInfoEXT* create_info, 42715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkAllocationCallbacks* allocator, 43715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT* callback); 44715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void DestroyCallback(VkInstance instance, 45715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT callback, 46715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkAllocationCallbacks* allocator); 47715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void Message(VkDebugReportFlagsEXT flags, 48715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportObjectTypeEXT object_type, 49715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall uint64_t object, 50715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall size_t location, 51715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall int32_t message_code, 52715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const char* layer_prefix, 53715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const char* message); 54715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 55715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall private: 56715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall struct Node { 57715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall Node* next; 58715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportFlagsEXT flags; 59715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall PFN_vkDebugReportCallbackEXT callback; 60715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void* data; 61715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT driver_callback; 62715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall }; 63715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 64715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall // TODO(jessehall): replace with std::shared_mutex when available in libc++ 65715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall std::shared_timed_mutex rwmutex_; 66715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall Node head_; 67715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}; 68715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 69715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} // namespace vulkan 70715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 71715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#endif // LIBVULKAN_DEBUG_REPORT_H 72