debug_report.h revision 622622377a1ac71a81a88e335f170c4a08835f06
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 20622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu#include <vulkan/vulkan.h> 21715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#include <shared_mutex> 22715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 23715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallnamespace vulkan { 24622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wunamespace driver { 25715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 26715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall// clang-format off 27622622377a1ac71a81a88e335f170c4a08835f06Chia-I WuVKAPI_ATTR VkResult CreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); 28622622377a1ac71a81a88e335f170c4a08835f06Chia-I WuVKAPI_ATTR void DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); 29622622377a1ac71a81a88e335f170c4a08835f06Chia-I WuVKAPI_ATTR void DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); 30715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall// clang-format on 31715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 32715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallclass DebugReportCallbackList { 33715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall public: 34715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList() 35715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall : head_{nullptr, 0, nullptr, nullptr, VK_NULL_HANDLE} {} 36715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList(const DebugReportCallbackList&) = delete; 37715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall DebugReportCallbackList& operator=(const DebugReportCallbackList&) = delete; 38715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall ~DebugReportCallbackList() = default; 39715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 40715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkResult CreateCallback( 41715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkInstance instance, 42715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkDebugReportCallbackCreateInfoEXT* create_info, 43715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkAllocationCallbacks* allocator, 44715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT* callback); 45715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void DestroyCallback(VkInstance instance, 46715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT callback, 47715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkAllocationCallbacks* allocator); 48715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void Message(VkDebugReportFlagsEXT flags, 49715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportObjectTypeEXT object_type, 50715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall uint64_t object, 51715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall size_t location, 52715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall int32_t message_code, 53715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const char* layer_prefix, 54715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const char* message); 55715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 56715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall private: 57715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall struct Node { 58715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall Node* next; 59715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportFlagsEXT flags; 60715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall PFN_vkDebugReportCallbackEXT callback; 61715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall void* data; 62715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT driver_callback; 63715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall }; 64715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 65715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall // TODO(jessehall): replace with std::shared_mutex when available in libc++ 66715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall std::shared_timed_mutex rwmutex_; 67715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall Node head_; 68715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}; 69715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 70622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu} // namespace driver 71715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} // namespace vulkan 72715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 73715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#endif // LIBVULKAN_DEBUG_REPORT_H 74