aboutsummaryrefslogtreecommitdiff
path: root/loader
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 /loader
parentc0e34c259c07ab819529c7b1ca712127dd633949 (diff)
downloadusermoji-fd150e9eb3ba16a0df0f817cc00087827e49efd7.tar.xz
debug_report: Add DebugReportMessage function
Diffstat (limited to 'loader')
-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
5 files changed, 98 insertions, 0 deletions
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;
}