aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtneygo@google.com>2015-11-30 15:28:25 -0700
committerJon Ashburn <jon@lunarg.com>2015-12-17 11:20:06 -0700
commitfd150e9eb3ba16a0df0f817cc00087827e49efd7 (patch)
treefec4d8adb1c192d0c249988eb44a1561486015b4
parentc0e34c259c07ab819529c7b1ca712127dd633949 (diff)
downloadusermoji-fd150e9eb3ba16a0df0f817cc00087827e49efd7.tar.xz
debug_report: Add DebugReportMessage function
-rw-r--r--include/vulkan/vk_layer.h1
-rw-r--r--include/vulkan/vk_lunarg_debug_report.h11
-rw-r--r--layers/vk_layer_logging.h4
-rw-r--r--loader/debug_report.c83
-rw-r--r--loader/debug_report.h10
-rw-r--r--loader/loader.c1
-rw-r--r--loader/loader.h1
-rw-r--r--loader/table_ops.h3
-rwxr-xr-xvulkan.py10
9 files changed, 124 insertions, 0 deletions
diff --git a/include/vulkan/vk_layer.h b/include/vulkan/vk_layer.h
index 5ac2f7ed..401ca866 100644
--- a/include/vulkan/vk_layer.h
+++ b/include/vulkan/vk_layer.h
@@ -176,6 +176,7 @@ typedef struct VkLayerInstanceDispatchTable_
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
PFN_vkCreateDebugReportCallbackLUNARG CreateDebugReportCallbackLUNARG;
PFN_vkDestroyDebugReportCallbackLUNARG DestroyDebugReportCallbackLUNARG;
+ PFN_vkDebugReportMessageLUNARG DebugReportMessageLUNARG;
#ifdef VK_USE_PLATFORM_MIR_KHR
PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
PFN_vkGetPhysicalDeviceMirPresentationSupportKHR GetPhysicalDeviceMirPresentationSupportKHR;
diff --git a/include/vulkan/vk_lunarg_debug_report.h b/include/vulkan/vk_lunarg_debug_report.h
index 316476e9..c8d47cdc 100644
--- a/include/vulkan/vk_lunarg_debug_report.h
+++ b/include/vulkan/vk_lunarg_debug_report.h
@@ -138,6 +138,7 @@ typedef struct VkDebugReportCallbackCreateInfoLUNARG {
typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackLUNARG)(VkInstance instance, VkDebugReportCallbackCreateInfoLUNARG *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackLUNARG* pCallback);
typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackLUNARG)(VkInstance instance, VkDebugReportCallbackLUNARG callback, const VkAllocationCallbacks *pAllocator);
+typedef void (VKAPI_PTR *PFN_vkDebugReportMessageLUNARG)(VkInstance instance, VkDebugReportFlagsLUNARG msgFlags, VkDebugReportObjectTypeLUNARG objType, uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, const char *pMsg);
#ifdef VK_PROTOTYPES
@@ -152,6 +153,16 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackLUNARG(
VkInstance instance,
VkDebugReportCallbackLUNARG callback,
const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageLUNARG(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg);
#endif // VK_PROTOTYPES
#ifdef __cplusplus
diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h
index 325b3f05..dd899317 100644
--- a/layers/vk_layer_logging.h
+++ b/layers/vk_layer_logging.h
@@ -230,6 +230,10 @@ static inline PFN_vkVoidFunction debug_report_get_instance_proc_addr(
return (PFN_vkVoidFunction) vkDestroyDebugReportCallbackLUNARG;
}
+ if (!strcmp(funcName, "vkDebugReportMessageLUNARG")) {
+ return (PFN_vkVoidFunction) vkDebugReportMessageLUNARG;
+ }
+
return NULL;
}
diff --git a/loader/debug_report.c b/loader/debug_report.c
index 5ef00ebf..35c3bd7a 100644
--- a/loader/debug_report.c
+++ b/loader/debug_report.c
@@ -92,6 +92,39 @@ static VKAPI_ATTR VkResult VKAPI_CALL debug_report_CreateDebugReportCallback(
return result;
}
+// Utility function to handle reporting
+static inline VkBool32 debug_report_log_msg(
+ VkInstance instance,
+ VkFlags msgFlags,
+ VkDebugReportObjectTypeLUNARG objectType,
+ uint64_t srcObject,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ struct loader_instance *inst = loader_get_instance(instance);
+ VkBool32 bail = false;
+ VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
+ while (pTrav) {
+ if (pTrav->msgFlags & msgFlags) {
+ if (pTrav->pfnMsgCallback(msgFlags,
+ objectType, srcObject,
+ location,
+ msgCode,
+ pLayerPrefix,
+ pMsg,
+ (void *) pTrav->pUserData)) {
+ bail = true;
+ }
+ }
+ pTrav = pTrav->pNext;
+ }
+
+ return bail;
+}
+
+
static VKAPI_ATTR void VKAPI_CALL debug_report_DestroyDebugReportCallback(
VkInstance instance,
VkDebugReportCallbackLUNARG callback,
@@ -119,6 +152,21 @@ static VKAPI_ATTR void VKAPI_CALL debug_report_DestroyDebugReportCallback(
loader_platform_thread_unlock_mutex(&loader_lock);
}
+static VKAPI_ATTR void VKAPI_CALL debug_report_DebugReportMessage(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ struct loader_instance *inst = loader_get_instance(instance);
+
+ inst->disp->DebugReportMessageLUNARG(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+
+}
/*
* This is the instance chain terminator function
@@ -216,6 +264,37 @@ VKAPI_ATTR void loader_DestroyDebugReportCallback(VkInstance instance,
}
}
+
+/*
+ * This is the instance chain terminator function
+ * for DebugReportMessage
+ */
+VKAPI_ATTR void VKAPI_CALL loader_DebugReportMessage(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg)
+{
+ const struct loader_icd *icd;
+ struct loader_instance *inst = loader_get_instance(instance);
+
+ for (icd = inst->icds; icd; icd = icd->next) {
+ if (icd->DebugReportMessageLUNARG != NULL) {
+ icd->DebugReportMessageLUNARG(icd->instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+ }
+ }
+
+ /*
+ * Now that all ICDs have seen the message, call the necessary callbacks.
+ * Ignoring "bail" return value as there is nothing to bail from at this point.
+ */
+ debug_report_log_msg(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
+}
+
bool debug_report_instance_gpa(
struct loader_instance *ptr_instance,
const char* name,
@@ -233,5 +312,9 @@ bool debug_report_instance_gpa(
*addr = ptr_instance->debug_report_enabled ? (void *) debug_report_DestroyDebugReportCallback : NULL;
return true;
}
+ if (!strcmp("vkDebugReportMessageLUNARG", name)) {
+ *addr = ptr_instance->debug_report_enabled ? (void *) debug_report_DebugReportMessage : NULL;
+ return true;
+ }
return false;
}
diff --git a/loader/debug_report.h b/loader/debug_report.h
index 481cbd46..17808318 100644
--- a/loader/debug_report.h
+++ b/loader/debug_report.h
@@ -112,3 +112,13 @@ VKAPI_ATTR void VKAPI_CALL loader_DestroyDebugReportCallback(
VkInstance instance,
VkDebugReportCallbackLUNARG callback,
const VkAllocationCallbacks *pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL loader_DebugReportMessage(
+ VkInstance instance,
+ VkDebugReportFlagsLUNARG flags,
+ VkDebugReportObjectTypeLUNARG objType,
+ uint64_t object,
+ size_t location,
+ int32_t msgCode,
+ const char* pLayerPrefix,
+ const char* pMsg);
diff --git a/loader/loader.c b/loader/loader.c
index 6e37f061..5ad128ee 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -116,6 +116,7 @@ const VkLayerInstanceDispatchTable instance_disp = {
.GetPhysicalDeviceSurfacePresentModesKHR = loader_GetPhysicalDeviceSurfacePresentModesKHR,
.CreateDebugReportCallbackLUNARG = loader_CreateDebugReportCallback,
.DestroyDebugReportCallbackLUNARG = loader_DestroyDebugReportCallback,
+ .DebugReportMessageLUNARG = loader_DebugReportMessage,
#ifdef VK_USE_PLATFORM_MIR_KHR
.CreateMirSurfaceKHR = loader_CreateMirSurfaceKHR,
.GetPhysicalDeviceMirPresentationSupportKHR = loader_GetPhysicalDeviceMirPresentationSupportKHR,
diff --git a/loader/loader.h b/loader/loader.h
index 0c0c94a8..9a940bb9 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -190,6 +190,7 @@ struct loader_icd {
PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
PFN_vkCreateDebugReportCallbackLUNARG CreateDebugReportCallbackLUNARG;
PFN_vkDestroyDebugReportCallbackLUNARG DestroyDebugReportCallbackLUNARG;
+ PFN_vkDebugReportMessageLUNARG DebugReportMessageLUNARG;
PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
diff --git a/loader/table_ops.h b/loader/table_ops.h
index 7cbb51c9..50354960 100644
--- a/loader/table_ops.h
+++ b/loader/table_ops.h
@@ -471,6 +471,7 @@ static inline void loader_init_instance_extension_dispatch_table(
table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR) gpa(inst, "vkDestroySurfaceKHR");
table->CreateDebugReportCallbackLUNARG = (PFN_vkCreateDebugReportCallbackLUNARG) gpa(inst, "vkCreateDebugReportCallbackLUNARG");
table->DestroyDebugReportCallbackLUNARG = (PFN_vkDestroyDebugReportCallbackLUNARG) gpa(inst, "vkDestroyDebugReportCallbackLUNARG");
+ table->DebugReportMessageLUNARG = (PFN_vkDebugReportMessageLUNARG) gpa(inst, "vkDebugReportMessageLUNARG");
table->GetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR) gpa(inst, "vkGetPhysicalDeviceSurfaceSupportKHR");
table->GetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR) gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
table->GetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR) gpa(inst, "vkGetPhysicalDeviceSurfaceFormatsKHR");
@@ -575,6 +576,8 @@ static inline void *loader_lookup_instance_dispatch_table(
return (void *) table->CreateDebugReportCallbackLUNARG;
if (!strcmp(name, "DestroyDebugReportCallbackLUNARG"))
return (void *) table->DestroyDebugReportCallbackLUNARG;
+ if (!strcmp(name, "DebugReportMessageLUNARG"))
+ return (void *) table->DebugReportMessageLUNARG;
return NULL;
}
diff --git a/vulkan.py b/vulkan.py
index b41e5064..b7250540 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -1134,6 +1134,16 @@ lunarg_debug_report = Extension(
[Param("VkInstance", "instance"),
Param("VkDebugReportCallbackLUNARG", "callback"),
Param("const VkAllocationCallbacks*", "pAllocator")]),
+
+ Proto("void", "DebugReportMessageLUNARG",
+ [Param("VkInstance", "instance"),
+ Param("VkDebugReportFlagsLUNARG", "flags"),
+ Param("VkDebugReportObjectTypeLUNARG", "objType"),
+ Param("uint64_t", "object"),
+ Param("size_t", "location"),
+ Param("int32_t", "msgCode"),
+ Param("const char *", "pLayerPrefix"),
+ Param("const char *", "pMsg")]),
],
)
lunarg_debug_marker = Extension(