import vulkan
, strutils
, bitops
, ../utils/lets
proc checkValidationLayers*() =
var layerCount: uint32 = 0
discard vkEnumerateInstanceLayerProperties(layerCount.addr, nil)
var layers = newSeq[VkLayerProperties](layerCount)
discard vkEnumerateInstanceLayerProperties(layerCount.addr, layers[0].addr)
for validate in validationLayers:
var found = false
for layer in layers:
if cstring(layer.layerName.addr) == validate:
found = true
break
if not found: echo layer.layerName," layer is not supported"
proc debugUtilsMessengerCallback*( messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT
, messageTypes: VkDebugUtilsMessageTypeFlagsEXT
, pCallbackData: VkDebugUtilsMessengerCallbackDataEXT
, userData: pointer
): VkBool32{.cdecl.} =
if bitand( messageSeverity.int
, VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT.int
) != 0:
discard
#echo "VERBOSE: ", "[", pCallbackData.messageIdNumber, "][", pCallbackData.pMessageIdName, "] : ", pCallbackData.pMessage
elif bitand( messageSeverity.int
, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT.int
) != 0: discard
#[ if contains($pCallbackData.pMessage, "/usr") or
contains($pCallbackData.pMessage, "libVkLayer") or
contains($pCallbackData.pMessage, "VUID-NONE") or
pCallbackData.messageIdNumber == 0 #[ [Loader Message] ]# or
contains($pCallbackData.pMessage, "Inserted device layer"): discard
else: echo "INFO: "
, "[",pCallbackData.messageIdNumber
, "]["
, pCallbackData.pMessageIdName
, "] : "
, pCallbackData.pMessage ]#
elif bitand( messageSeverity.int
, VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT.int
) != 0:
if contains($pCallbackData.pMessage, "small-dedicated-allocation") or
contains($pCallbackData.pMessage, "CHASSIS") or
contains($pCallbackData.pMessage, "command-buffer-reset") or
contains($pCallbackData.pMessage, "small-allocation") or
# Attempting to enable extension VK_EXT_debug_utils,
#but this extension is intended to support use by applications when debugging and it is strongly recommended that it be otherwise avoided.
pCallbackData.messageIdNumber == 284711830:
discard# echo "small allocation warning"
else: discard#echo "WARNING: ", "[",pCallbackData.messageIdNumber, "][", pCallbackData.pMessageIdName, "] : ", pCallbackData.pMessage
elif bitand( messageSeverity.int
, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT.int
) != 0:
echo "ERROR: ", "[",pCallbackData.messageIdNumber, "][", pCallbackData.pMessageIdName, "] : ", pCallbackData.pMessage