diff options
| author | Jeremy Hayes <jeremy@lunarg.com> | 2015-06-26 12:48:09 -0600 |
|---|---|---|
| committer | Jeremy Hayes <jeremy@lunarg.com> | 2015-06-26 12:48:09 -0600 |
| commit | 01d229232a9fb2b6dd12586b8cf0d63b4bbd3078 (patch) | |
| tree | ce7f90228acd714cc90c98178896d25386dbfd6a /layers | |
| parent | 3ca22500cd0e92af6f7e7052f257f2e14a777334 (diff) | |
| download | usermoji-01d229232a9fb2b6dd12586b8cf0d63b4bbd3078.tar.xz | |
layers: Use new param checker layer.
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/param_checker.cpp | 10131 |
1 files changed, 8949 insertions, 1182 deletions
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index e845c4cf..16451022 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -30,2116 +30,9883 @@ #include <string> #include <sstream> #include <unordered_map> +#include <vector> #include "loader_platform.h" #include "vkLayer.h" -#include "vk_debug_marker_layer.h" #include "layers_config.h" #include "vk_enum_validate_helper.h" #include "vk_struct_validate_helper.h" //The following is #included again to catch certain OS-specific functions being used: #include "loader_platform.h" -#include "layers_msg.h" -#include "layers_debug_marker_table.h" #include "layers_table.h" +#include "layer_data.h" +#include "layer_logging.h" -static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(initOnce); -struct devExts { - bool debug_marker_enabled; - bool wsi_lunarg_enabled; +typedef struct _layer_data { + debug_report_data *report_data; + VkDbgMsgCallback logging_callback; +} layer_data; + +static std::unordered_map<void*, layer_data*> layer_data_map; +static device_table_map pc_device_table_map; +static instance_table_map pc_instance_table_map; + +#define PC_LAYER_EXT_ARRAY_SIZE 2 +static const VkExtensionProperties pcExts[PC_LAYER_EXT_ARRAY_SIZE] = { + { + VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, + "ParamChecker", + 0x10, + "Sample layer: ParamChecker", + }, + { + VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, + "Validation", + 0x10, + "Sample layer: ParamChecker", + } }; -static std::unordered_map<void *, struct devExts> deviceExtMap; +// "my instance data" +debug_report_data *mid(VkInstance object) +{ + dispatch_key key = get_dispatch_key(object); + layer_data *data = get_my_data_ptr(get_dispatch_key(object), layer_data_map); +#if DISPATCH_MAP_DEBUG + fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data); +#endif + assert(data->report_data != NULL); -#include "vk_dispatch_table_helper.h" + return data->report_data; +} -static void initParamChecker(void) +// "my device data" +debug_report_data *mdd(VkObject object) { + dispatch_key key = get_dispatch_key(object); + layer_data *data = get_my_data_ptr(key, layer_data_map); +#if DISPATCH_MAP_DEBUG + fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data); +#endif + assert(data->report_data != NULL); + return data->report_data; +} - const char *strOpt; - // initialize ParamChecker options - getLayerOptionEnum("ParamCheckerReportLevel", (uint32_t *) &g_reportFlags); - g_actionIsDefault = getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &g_debugAction); +static void InitParamChecker(layer_data *data) +{ + uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0); - if (g_debugAction & VK_DBG_LAYER_ACTION_LOG_MSG) + uint32_t debug_action = 0; + getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action); + if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) { - strOpt = getLayerOption("ParamCheckerLogFilename"); - if (strOpt) + FILE *log_output = NULL; + const char* option_str = getLayerOption("ParamCheckerLogFilename"); + if(option_str) + { + log_output = fopen(option_str, "w"); + } + if(log_output == NULL) { - g_logFile = fopen(strOpt, "w"); + log_output = stdout; } - if (g_logFile == NULL) - g_logFile = stdout; + + layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback); } } -void PreCreateInstance(const VkApplicationInfo* pAppInfo, const VkAllocCallbacks* pAllocCb) +VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback( + VkInstance instance, + VkFlags msgFlags, + const PFN_vkDbgMsgCallback pfnMsgCallback, + void* pUserData, + VkDbgMsgCallback* pMsgCallback) { - if(pAppInfo == nullptr) + VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); + VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback); + + if (result == VK_SUCCESS) { - char const str[] = "vkCreateInstance parameter, VkApplicationInfo* pAppInfo, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - return; + layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); + result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback); } - if(pAppInfo->sType != VK_STRUCTURE_TYPE_APPLICATION_INFO) + return result; +} + +VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback( + VkInstance instance, + VkDbgMsgCallback msgCallback) +{ + VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); + VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback); + + layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); + layer_destroy_msg_callback(data->report_data, msgCallback); + + return result; +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionCount(uint32_t* pCount) +{ + *pCount = PC_LAYER_EXT_ARRAY_SIZE; + return VK_SUCCESS; +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties( + uint32_t extensionIndex, + VkExtensionProperties* pProperties) +{ + /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */ + if (extensionIndex >= PC_LAYER_EXT_ARRAY_SIZE) + return VK_ERROR_INVALID_VALUE; + memcpy(pProperties, &pcExts[extensionIndex], sizeof(VkExtensionProperties)); + + return VK_SUCCESS; +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionCount( + VkPhysicalDevice gpu, + uint32_t* pCount) +{ + *pCount = PC_LAYER_EXT_ARRAY_SIZE; + return VK_SUCCESS; +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties( + VkPhysicalDevice gpu, + uint32_t extensionIndex, + VkExtensionProperties* pProperties) +{ + /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */ + if (extensionIndex >= PC_LAYER_EXT_ARRAY_SIZE) + return VK_ERROR_INVALID_VALUE; + memcpy(pProperties, &pcExts[extensionIndex], sizeof(VkExtensionProperties)); + + return VK_SUCCESS; +} + +// Version: 0.111.0 + +static +std::string EnumeratorString(VkResult const& enumerator) +{ + switch(enumerator) { - char const str[] = "vkCreateInstance parameter, VK_STRUCTURE_TYPE_APPLICATION_INFO "\ - "pAppInfo->sType, is not VK_STRUCTURE_TYPE_APPLICATION_INFO (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - return; + case VK_ERROR_MEMORY_NOT_BOUND: + { + return "VK_ERROR_MEMORY_NOT_BOUND"; + break; + } + case VK_ERROR_BUILDING_COMMAND_BUFFER: + { + return "VK_ERROR_BUILDING_COMMAND_BUFFER"; + break; + } + case VK_ERROR_INCOMPATIBLE_DRIVER: + { + return "VK_ERROR_INCOMPATIBLE_DRIVER"; + break; + } + case VK_ERROR_MEMORY_UNMAP_FAILED: + { + return "VK_ERROR_MEMORY_UNMAP_FAILED"; + break; + } + case VK_ERROR_MEMORY_MAP_FAILED: + { + return "VK_ERROR_MEMORY_MAP_FAILED"; + break; + } + case VK_ERROR_BAD_PIPELINE_DATA: + { + return "VK_ERROR_BAD_PIPELINE_DATA"; + break; + } + case VK_ERROR_INVALID_OBJECT_TYPE: + { + return "VK_ERROR_INVALID_OBJECT_TYPE"; + break; + } + case VK_ERROR_INVALID_QUEUE_TYPE: + { + return "VK_ERROR_INVALID_QUEUE_TYPE"; + break; + } + case VK_ERROR_BAD_SHADER_CODE: + { + return "VK_ERROR_BAD_SHADER_CODE"; + break; + } + case VK_ERROR_INVALID_IMAGE: + { + return "VK_ERROR_INVALID_IMAGE"; + break; + } + case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION: + { + return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION"; + break; + } + case VK_ERROR_INITIALIZATION_FAILED: + { + return "VK_ERROR_INITIALIZATION_FAILED"; + break; + } + case VK_NOT_READY: + { + return "VK_NOT_READY"; + break; + } + case VK_ERROR_INVALID_POINTER: + { + return "VK_ERROR_INVALID_POINTER"; + break; + } + case VK_ERROR_INVALID_VALUE: + { + return "VK_ERROR_INVALID_VALUE"; + break; + } + case VK_ERROR_UNAVAILABLE: + { + return "VK_ERROR_UNAVAILABLE"; + break; + } + case VK_ERROR_OUT_OF_HOST_MEMORY: + { + return "VK_ERROR_OUT_OF_HOST_MEMORY"; + break; + } + case VK_ERROR_UNKNOWN: + { + return "VK_ERROR_UNKNOWN"; + break; + } + case VK_ERROR_NOT_MAPPABLE: + { + return "VK_ERROR_NOT_MAPPABLE"; + break; + } + case VK_ERROR_OUT_OF_DEVICE_MEMORY: + { + return "VK_ERROR_OUT_OF_DEVICE_MEMORY"; + break; + } + case VK_EVENT_SET: + { + return "VK_EVENT_SET"; + break; + } + case VK_TIMEOUT: + { + return "VK_TIMEOUT"; + break; + } + case VK_ERROR_INVALID_FLAGS: + { + return "VK_ERROR_INVALID_FLAGS"; + break; + } + case VK_EVENT_RESET: + { + return "VK_EVENT_RESET"; + break; + } + case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA: + { + return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA"; + break; + } + case VK_UNSUPPORTED: + { + return "VK_UNSUPPORTED"; + break; + } + case VK_ERROR_INVALID_HANDLE: + { + return "VK_ERROR_INVALID_HANDLE"; + break; + } + case VK_ERROR_INCOMPATIBLE_DEVICE: + { + return "VK_ERROR_INCOMPATIBLE_DEVICE"; + break; + } + case VK_SUCCESS: + { + return "VK_SUCCESS"; + break; + } + case VK_ERROR_INCOMPATIBLE_QUEUE: + { + return "VK_ERROR_INCOMPATIBLE_QUEUE"; + break; + } + case VK_ERROR_INVALID_EXTENSION: + { + return "VK_ERROR_INVALID_EXTENSION"; + break; + } + case VK_ERROR_DEVICE_ALREADY_CREATED: + { + return "VK_ERROR_DEVICE_ALREADY_CREATED"; + break; + } + case VK_ERROR_DEVICE_LOST: + { + return "VK_ERROR_DEVICE_LOST"; + break; + } + case VK_ERROR_INVALID_ORDINAL: + { + return "VK_ERROR_INVALID_ORDINAL"; + break; + } + case VK_ERROR_INVALID_MEMORY_SIZE: + { + return "VK_ERROR_INVALID_MEMORY_SIZE"; + break; + } + case VK_ERROR_INCOMPLETE_COMMAND_BUFFER: + { + return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER"; + break; + } + case VK_ERROR_INVALID_ALIGNMENT: + { + return "VK_ERROR_INVALID_ALIGNMENT"; + break; + } + case VK_ERROR_INVALID_FORMAT: + { + return "VK_ERROR_INVALID_FORMAT"; + break; + } + default: + { + return "unrecognized enumerator"; + break; + } + } +} + +static +bool ValidateEnumerator(VkQueueFlagBits const& enumerator) +{ + VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT | + VK_QUEUE_DMA_BIT | + VK_QUEUE_COMPUTE_BIT | + VK_QUEUE_SPARSE_MEMMGR_BIT | + VK_QUEUE_GRAPHICS_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkQueueFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_QUEUE_EXTENDED_BIT) + { + strings.push_back("VK_QUEUE_EXTENDED_BIT"); + } + if(enumerator & VK_QUEUE_DMA_BIT) + { + strings.push_back("VK_QUEUE_DMA_BIT"); + } + if(enumerator & VK_QUEUE_COMPUTE_BIT) + { + strings.push_back("VK_QUEUE_COMPUTE_BIT"); + } + if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT) + { + strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT"); + } + if(enumerator & VK_QUEUE_GRAPHICS_BIT) + { + strings.push_back("VK_QUEUE_GRAPHICS_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } } - // TODO: What else can validated in pAppInfo? - // TODO: VK_API_VERSION validation. + return enumeratorString; +} - // It's okay if pAllocCb is a nullptr. - if(pAllocCb != nullptr) +static +bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator) +{ + VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_PREFER_HOST_LOCAL | + VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT | + VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT | + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT | + VK_MEMORY_PROPERTY_DEVICE_ONLY); + if(enumerator & (~allFlags)) { - if(!vk_validate_vkalloccallbacks(pAllocCb)) + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_MEMORY_PROPERTY_PREFER_HOST_LOCAL) + { + strings.push_back("VK_MEMORY_PROPERTY_PREFER_HOST_LOCAL"); + } + if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT) + { + strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT"); + } + if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT) + { + strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT"); + } + if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) + { + strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"); + } + if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT) + { + strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT"); + } + if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY) + { + strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) { - char const str[] = "vkCreateInstance parameter, VkAllocCallbacks* pAllocCb, "\ - "contains an invalid value (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - return; + enumeratorString += '|'; } } + + return enumeratorString; } -void PostCreateInstance(VkResult result, const VkInstanceCreateInfo *pCreateInfo, VkInstance* pInstance) +static +bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator) { - if(result != VK_SUCCESS) + VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT | + VK_MEMORY_OUTPUT_TRANSFER_BIT | + VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT | + VK_MEMORY_OUTPUT_SHADER_WRITE_BIT | + VK_MEMORY_OUTPUT_HOST_WRITE_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT) + { + strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT"); + } + if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT) + { + strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT"); + } + if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT) + { + strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT"); + } + if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT) + { + strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT"); + } + if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT) + { + strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator) +{ + VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT | + VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT | + VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT | + VK_MEMORY_INPUT_SHADER_READ_BIT | + VK_MEMORY_INPUT_UNIFORM_READ_BIT | + VK_MEMORY_INPUT_INDEX_FETCH_BIT | + VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT | + VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT | + VK_MEMORY_INPUT_HOST_READ_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT) + { + strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT) + { + strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT) + { + strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT) + { + strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT) + { + strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT) + { + strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT) + { + strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT) + { + strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT"); + } + if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT) + { + strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator) +{ + VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | + VK_BUFFER_USAGE_INDEX_BUFFER_BIT | + VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | + VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | + VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT | + VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | + VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT | + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | + VK_BUFFER_USAGE_GENERAL); + if(enumerator & (~allFlags)) { - // TODO: Spit out VkResult value. - char const str[] = "vkCreateInstance failed (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT) + { + strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT) + { + strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) + { + strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"); + } + if(enumerator & VK_BUFFER_USAGE_GENERAL) + { + strings.push_back("VK_BUFFER_USAGE_GENERAL"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator) +{ + VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT) + { + strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator) +{ + VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL | + VK_SHADER_STAGE_FRAGMENT_BIT | + VK_SHADER_STAGE_GEOMETRY_BIT | + VK_SHADER_STAGE_COMPUTE_BIT | + VK_SHADER_STAGE_TESS_EVALUATION_BIT | + VK_SHADER_STAGE_TESS_CONTROL_BIT | + VK_SHADER_STAGE_VERTEX_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkShaderStageFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_SHADER_STAGE_ALL) + { + strings.push_back("VK_SHADER_STAGE_ALL"); + } + if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT) + { + strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT"); + } + if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT) + { + strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT"); + } + if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT) + { + strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT"); + } + if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT) + { + strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT"); + } + if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT) + { + strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT"); + } + if(enumerator & VK_SHADER_STAGE_VERTEX_BIT) + { + strings.push_back("VK_SHADER_STAGE_VERTEX_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator) +{ + VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_DEPTH_STENCIL_BIT | + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | + VK_IMAGE_USAGE_STORAGE_BIT | + VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT | + VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | + VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT | + VK_IMAGE_USAGE_GENERAL); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkImageUsageFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT) + { + strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + { + strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT) + { + strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT) + { + strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT) + { + strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) + { + strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT) + { + strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT"); + } + if(enumerator & VK_IMAGE_USAGE_GENERAL) + { + strings.push_back("VK_IMAGE_USAGE_GENERAL"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator) +{ + VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | + VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | + VK_IMAGE_CREATE_SPARSE_BIT | + VK_IMAGE_CREATE_INVARIANT_DATA_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkImageCreateFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) + { + strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"); + } + if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) + { + strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"); + } + if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT) + { + strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT"); + } + if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT) + { + strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkDepthStencilViewCreateFlagBits const& enumerator) +{ + VkDepthStencilViewCreateFlagBits allFlags = (VkDepthStencilViewCreateFlagBits)(VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT | + VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkDepthStencilViewCreateFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT) + { + strings.push_back("VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT"); + } + if(enumerator & VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT) + { + strings.push_back("VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator) +{ + VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT | + VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT) + { + strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"); + } + if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT) + { + strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkChannelFlagBits const& enumerator) +{ + VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT | + VK_CHANNEL_B_BIT | + VK_CHANNEL_G_BIT | + VK_CHANNEL_R_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkChannelFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_CHANNEL_A_BIT) + { + strings.push_back("VK_CHANNEL_A_BIT"); + } + if(enumerator & VK_CHANNEL_B_BIT) + { + strings.push_back("VK_CHANNEL_B_BIT"); + } + if(enumerator & VK_CHANNEL_G_BIT) + { + strings.push_back("VK_CHANNEL_G_BIT"); + } + if(enumerator & VK_CHANNEL_R_BIT) + { + strings.push_back("VK_CHANNEL_R_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator) +{ + VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT) + { + strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator) +{ + VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT | + VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | + VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | + VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | + VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | + VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT | + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | + VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"); + } + if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) + { + strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator) +{ + VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkQueryControlFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT) + { + strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator) +{ + VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT | + VK_QUERY_RESULT_WITH_AVAILABILITY_BIT | + VK_QUERY_RESULT_WAIT_BIT | + VK_QUERY_RESULT_64_BIT | + VK_QUERY_RESULT_DEFAULT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkQueryResultFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT) + { + strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT"); + } + if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT) + { + strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"); + } + if(enumerator & VK_QUERY_RESULT_WAIT_BIT) + { + strings.push_back("VK_QUERY_RESULT_WAIT_BIT"); + } + if(enumerator & VK_QUERY_RESULT_64_BIT) + { + strings.push_back("VK_QUERY_RESULT_64_BIT"); + } + if(enumerator & VK_QUERY_RESULT_DEFAULT) + { + strings.push_back("VK_QUERY_RESULT_DEFAULT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator) +{ + VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT | + VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT | + VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT | + VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT) + { + strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT"); + } + if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT) + { + strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT"); + } + if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT) + { + strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT"); + } + if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT) + { + strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +static +bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator) +{ + VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT | + VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT | + VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT | + VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT | + VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT | + VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT | + VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT | + VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT | + VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT | + VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT | + VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT); + if(enumerator & (~allFlags)) + { + return false; + } + + return true; +} + +static +std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator) +{ + if(!ValidateEnumerator(enumerator)) + { + return "unrecognized enumerator"; + } + + std::vector<std::string> strings; + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT"); + } + if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT) + { + strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT"); + } + + std::string enumeratorString; + for(auto const& string : strings) + { + enumeratorString += string; + + if(string != strings.back()) + { + enumeratorString += '|'; + } + } + + return enumeratorString; +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance( + const VkInstanceCreateInfo* pCreateInfo, + VkInstance* pInstance) +{ + VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance); + VkResult result = pTable->CreateInstance(pCreateInfo, pInstance); + + if (result == VK_SUCCESS) { + layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map); + data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount, + pCreateInfo->pEnabledExtensions); + + InitParamChecker(data); + } + + return result; +} + +VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance( + VkInstance instance) +{ + // Grab the key before the instance is destroyed. + dispatch_key key = get_dispatch_key(instance); + VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); + VkResult result = pTable->DestroyInstance(instance); + + // Clean up logging callback, if any + layer_data *data = get_my_data_ptr(key, layer_data_map); + if(data->logging_callback) + { + layer_destroy_msg_callback(data->report_data, data->logging_callback); + } + + layer_debug_report_destroy_instance(mid(instance)); + layer_data_map.erase(pTable); + + pc_instance_table_map.erase(key); + assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around"); + + return result; +} + +void PreEnumeratePhysicalDevices( + VkInstance instance, + VkPhysicalDevice* pPhysicalDevices) +{ + if(instance == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkInstance instance, is null pointer"); + return; + } + + if(pPhysicalDevices == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer"); + return; + } + if((*pPhysicalDevices) == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer"); return; } +} - enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); +void PostEnumeratePhysicalDevices( + VkInstance instance, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices, + VkResult result) +{ + if(instance == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkInstance instance, is null pointer"); + return; + } + + if(pPhysicalDeviceCount == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, uint32_t* pPhysicalDeviceCount, is null pointer"); + return; + } - if(pInstance == nullptr) + if(pPhysicalDevices == nullptr) + { + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer"); + return; + } + if((*pPhysicalDevices) == nullptr) { - char const str[] = "vkCreateInstance parameter, VkInstance* pInstance, is nullptr "\ - "(postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer"); return; } - VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(*pInstance); - debug_report_init_instance_extension_dispatch_table( - pTable, - pTable->GetInstanceProcAddr, - *pInstance); + if(result != VK_SUCCESS) + { + std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance) +VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices( + VkInstance instance, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices) { - loader_platform_thread_once(&initOnce, initParamChecker); + PreEnumeratePhysicalDevices(instance, pPhysicalDevices); + VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); + + PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result); - PreCreateInstance(pCreateInfo->pAppInfo, pCreateInfo->pAllocCb); - VkResult result = instance_dispatch_table(*pInstance)->CreateInstance(pCreateInfo, pInstance); - PostCreateInstance(result, pCreateInfo, pInstance); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(VkInstance instance) +void PreGetPhysicalDeviceFeatures( + VkPhysicalDevice physicalDevice) { - dispatch_key key = get_dispatch_key(instance); - VkResult res = instance_dispatch_table(instance)->DestroyInstance(instance); - destroy_instance_dispatch_table(key); - return res; + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } } -void PreCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo) +void PostGetPhysicalDeviceFeatures( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures* pFeatures, + VkResult result) { - if(gpu == nullptr) + if(physicalDevice == nullptr) { - char const str[] = "vkCreateDevice parameter, VkPhysicalDevice gpu, is nullptr "\ - "(precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDevice physicalDevice, is null pointer"); return; } - if(pCreateInfo == nullptr) + if(pFeatures == nullptr) { - char const str[] = "vkCreateDevice parameter, VkDeviceCreateInfo* pCreateInfo, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDeviceFeatures* pFeatures, is null pointer"); return; } - if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) + if(result != VK_SUCCESS) { - char const str[] = "vkCreateDevice parameter, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO "\ - "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } +} - if(pCreateInfo->queueRecordCount == 0) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures* pFeatures) +{ + PreGetPhysicalDeviceFeatures(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures); + + PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result); + + return result; +} + +void PreGetPhysicalDeviceFormatInfo( + VkPhysicalDevice physicalDevice) +{ + if(physicalDevice == nullptr) { - char const str[] = "vkCreateDevice parameter, uint32_t pCreateInfo->queueRecordCount, is "\ - "zero (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFormatInfo parameter, VkPhysicalDevice physicalDevice, is null pointer"); return; } +} - if(pCreateInfo->pRequestedQueues == nullptr) +void PostGetPhysicalDeviceFormatInfo( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties* pFormatInfo, + VkResult result) +{ + if(physicalDevice == nullptr) { - char const str[] = "vkCreateDevice parameter, VkDeviceQueueCreateInfo* pCreateInfo->pRequestedQueues, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFormatInfo parameter, VkPhysicalDevice physicalDevice, is null pointer"); return; } - for(uint32_t i = 0; i < pCreateInfo->queueRecordCount; ++i) + if(format < VK_FORMAT_BEGIN_RANGE || + format > VK_FORMAT_END_RANGE) { - if(!vk_validate_vkdevicequeuecreateinfo(&(pCreateInfo->pRequestedQueues[i]))) - { - std::stringstream ss; - ss << "vkCreateDevice parameter, VkDeviceQueueCreateInfo pCreateInfo->pRequestedQueues[" << i << - "], is invalid (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFormatInfo parameter, VkFormat format, is unrecognized enumerator"); + return; } + if(pFormatInfo == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceFormatInfo parameter, VkFormatProperties* pFormatInfo, is null pointer"); + return; + } + if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures)) + { + std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->linearTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures)) + { + std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->optimalTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } } -static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties* pFormatInfo) { - uint32_t i, ext_idx; - VkLayerDispatchTable *pDisp = device_dispatch_table(device); - deviceExtMap[pDisp].debug_marker_enabled = false; - deviceExtMap[pDisp].wsi_lunarg_enabled = false; - for (i = 0; i < pCreateInfo->extensionCount; i++) { - if (strcmp(pCreateInfo->pEnabledExtensions[i].name, DEBUG_MARKER_EXTENSION_NAME) == 0) { - /* Found a matching extension name, mark it enabled and init dispatch table*/ - initDebugMarkerTable(device); - deviceExtMap[pDisp].debug_marker_enabled = true; + PreGetPhysicalDeviceFormatInfo(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo); + PostGetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo, result); - } - if (strcmp(pCreateInfo->pEnabledExtensions[i].name, VK_WSI_LUNARG_EXTENSION_NAME) == 0) - deviceExtMap[pDisp].wsi_lunarg_enabled = true; + return result; +} + +void PreGetPhysicalDeviceLimits( + VkPhysicalDevice physicalDevice) +{ + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceLimits parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; } } -void PostCreateDevice(VkResult result, const VkDeviceCreateInfo *pCreateInfo, VkDevice* pDevice) +void PostGetPhysicalDeviceLimits( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceLimits* pLimits, + VkResult result) { - if(result != VK_SUCCESS) + if(physicalDevice == nullptr) { - // TODO: Spit out VkResult value. - char const str[] = "vkCreateDevice failed (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceLimits parameter, VkPhysicalDevice physicalDevice, is null pointer"); return; } - if(pDevice == nullptr) + if(pLimits == nullptr) { - char const str[] = "vkCreateDevice parameter, VkDevice* pDevice, is nullptr (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceLimits parameter, VkPhysicalDeviceLimits* pLimits, is null pointer"); return; } - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) *pDevice; - enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); - createDeviceRegisterExtensions(pCreateInfo, *pDevice); + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceLimits* pLimits) +{ + PreGetPhysicalDeviceLimits(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits); + + PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result); + + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice) +VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice( + VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + VkDevice* pDevice) { - PreCreateDevice(gpu, pCreateInfo); - VkResult result = instance_dispatch_table(gpu)->CreateDevice(gpu, pCreateInfo, pDevice); - PostCreateDevice(result, pCreateInfo, pDevice); + VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, physicalDevice); + VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice); + if(result == VK_SUCCESS) + { + layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); + layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); + device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice); + } + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device) +VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice( + VkDevice device) { - VkLayerDispatchTable *pDisp = device_dispatch_table(device); + layer_debug_report_destroy_device(device); + dispatch_key key = get_dispatch_key(device); - VkResult result = pDisp->DestroyDevice(device); - deviceExtMap.erase(pDisp); - destroy_device_dispatch_table(key); - tableDebugMarkerMap.erase(pDisp); +#if DISPATCH_MAP_DEBUG + fprintf(stderr, "Device: %p, key: %p\n", device, key); +#endif + + VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device); + pc_device_table_map.erase(key); + assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around"); + return result; } -#define PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE 2 -static const VkExtensionProperties pcExts[PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE] = { - { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - "ParamChecker", - 0x10, - "Sample layer: ParamChecker", - }, +void PreGetPhysicalDeviceProperties( + VkPhysicalDevice physicalDevice) +{ + if(physicalDevice == nullptr) { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - "Validation", - 0x10, - "Sample layer: ParamChecker", + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; } -}; +} -VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionCount( - uint32_t* pCount) +void PostGetPhysicalDeviceProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties, + VkResult result) { - *pCount = PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE; - return VK_SUCCESS; + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } + + if(pProperties == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceProperties* pProperties, is null pointer"); + return; + } + if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE || + pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is unrecognized enumerator"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties( - uint32_t extensionIndex, - VkExtensionProperties* pProperties) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties) { - /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */ + PreGetPhysicalDeviceProperties(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties); - if (extensionIndex >= PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE) - return VK_ERROR_INVALID_VALUE; - memcpy(pProperties, &pcExts[extensionIndex], sizeof(VkExtensionProperties)); + PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result); - return VK_SUCCESS; + return result; } -#define PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE 4 -static const VkExtensionProperties pcDevExts[PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE] = { +void PreGetPhysicalDevicePerformance( + VkPhysicalDevice physicalDevice) +{ + if(physicalDevice == nullptr) { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - "ParamChecker", - 0x10, - "Sample layer: ParamChecker", - }, + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } +} + +void PostGetPhysicalDevicePerformance( + VkPhysicalDevice physicalDevice, + VkPhysicalDevicePerformance* pPerformance, + VkResult result) +{ + if(physicalDevice == nullptr) { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - "Validation", - 0x10, - "Sample layer: ParamChecker", - }, + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } + + if(pPerformance == nullptr) { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - DEBUG_MARKER_EXTENSION_NAME, - 0x10, - "Sample layer: ParamChecker", - }, + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevicePerformance* pPerformance, is null pointer"); + return; + } + + if(result != VK_SUCCESS) { - VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, - VK_WSI_LUNARG_EXTENSION_NAME, - 0x10, - "Sample layer: ParamChecker", + std::string reason = "vkGetPhysicalDevicePerformance parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } -}; +} -VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionCount( - VkPhysicalDevice gpu, - uint32_t* pCount) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance( + VkPhysicalDevice physicalDevice, + VkPhysicalDevicePerformance* pPerformance) { - *pCount = PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE; - return VK_SUCCESS; + PreGetPhysicalDevicePerformance(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDevicePerformance(physicalDevice, pPerformance); + + PostGetPhysicalDevicePerformance(physicalDevice, pPerformance, result); + + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties( - VkPhysicalDevice gpu, - uint32_t extensionIndex, - VkExtensionProperties* pProperties) +void PreGetPhysicalDeviceQueueCount( + VkPhysicalDevice physicalDevice) { - /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */ + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueCount parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } +} - if (extensionIndex >= PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE) - return VK_ERROR_INVALID_VALUE; - memcpy(pProperties, &pcDevExts[extensionIndex], sizeof(VkExtensionProperties)); +void PostGetPhysicalDeviceQueueCount( + VkPhysicalDevice physicalDevice, + uint32_t* pCount, + VkResult result) +{ + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueCount parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } - return VK_SUCCESS; + if(pCount == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueCount parameter, uint32_t* pCount, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceQueueCount parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount( + VkPhysicalDevice physicalDevice, + uint32_t* pCount) { + PreGetPhysicalDeviceQueueCount(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueCount(physicalDevice, pCount); + + PostGetPhysicalDeviceQueueCount(physicalDevice, pCount, result); - VkResult result = device_dispatch_table(device)->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) +void PreGetPhysicalDeviceQueueProperties( + VkPhysicalDevice physicalDevice) { - VkResult result = device_dispatch_table(queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence); - return result; + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue) +void PostGetPhysicalDeviceQueueProperties( + VkPhysicalDevice physicalDevice, + uint32_t count, + VkPhysicalDeviceQueueProperties* pQueueProperties, + VkResult result) { + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } - VkResult result = device_dispatch_table(queue)->QueueWaitIdle(queue); - return result; + + if(pQueueProperties == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDeviceQueueProperties* pQueueProperties, is null pointer"); + return; + } + if(!ValidateEnumerator((VkQueueFlagBits)pQueueProperties->queueFlags)) + { + std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkQueueFlags pQueueProperties->queueFlags, is " + EnumeratorString((VkQueueFlagBits)pQueueProperties->queueFlags); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device) +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties( + VkPhysicalDevice physicalDevice, + uint32_t count, + VkPhysicalDeviceQueueProperties* pQueueProperties) { + PreGetPhysicalDeviceQueueProperties(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties); + + PostGetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties, result); - VkResult result = device_dispatch_table(device)->DeviceWaitIdle(device); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem) +void PreGetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice) { - char str[1024]; - if (!pAllocInfo) { - sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) { - sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } +} + +void PostGetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties* pMemoryProperies, + VkResult result) +{ + if(physicalDevice == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDevice physicalDevice, is null pointer"); + return; + } + + if(pMemoryProperies == nullptr) + { + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDeviceMemoryProperties* pMemoryProperies, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->AllocMemory(device, pAllocInfo, pMem); +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties* pMemoryProperies) +{ + PreGetPhysicalDeviceMemoryProperties(physicalDevice); + VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies); + + PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem) +void PreGetDeviceQueue( + VkDevice device, + VkQueue* pQueue) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkDevice device, is null pointer"); + return; + } + + if(pQueue == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer"); + return; + } + if((*pQueue) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer"); + return; + } +} + +void PostGetDeviceQueue( + VkDevice device, + uint32_t queueNodeIndex, + uint32_t queueIndex, + VkQueue* pQueue, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkDevice device, is null pointer"); + return; + } + + + + if(pQueue == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer"); + return; + } + if((*pQueue) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue( + VkDevice device, + uint32_t queueNodeIndex, + uint32_t queueIndex, + VkQueue* pQueue) +{ + PreGetDeviceQueue(device, pQueue); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue); + + PostGetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue, result); - VkResult result = device_dispatch_table(device)->FreeMemory(device, mem); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData) +void PreQueueSubmit( + VkQueue queue, + const VkCmdBuffer* pCmdBuffers) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSubmit parameter, VkQueue queue, is null pointer"); + return; + } + + if(pCmdBuffers == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer"); + return; + } + if((*pCmdBuffers) == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer"); + return; + } +} + +void PostQueueSubmit( + VkQueue queue, + uint32_t cmdBufferCount, + VkFence fence, + VkResult result) { + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSubmit parameter, VkQueue queue, is null pointer"); + return; + } + + + if(fence == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSubmit parameter, VkFence fence, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit( + VkQueue queue, + uint32_t cmdBufferCount, + const VkCmdBuffer* pCmdBuffers, + VkFence fence) +{ + PreQueueSubmit(queue, pCmdBuffers); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence); + + PostQueueSubmit(queue, cmdBufferCount, fence, result); - VkResult result = device_dispatch_table(device)->MapMemory(device, mem, offset, size, flags, ppData); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem) +void PreQueueWaitIdle( + VkQueue queue) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueWaitIdle parameter, VkQueue queue, is null pointer"); + return; + } +} + +void PostQueueWaitIdle( + VkQueue queue, + VkResult result) { + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueWaitIdle parameter, VkQueue queue, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle( + VkQueue queue) +{ + PreQueueWaitIdle(queue); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue); + + PostQueueWaitIdle(queue, result); - VkResult result = device_dispatch_table(device)->UnmapMemory(device, mem); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges( - VkDevice device, - uint32_t memRangeCount, - const VkMappedMemoryRange* pMemRanges) +void PreDeviceWaitIdle( + VkDevice device) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDeviceWaitIdle parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostDeviceWaitIdle( + VkDevice device, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDeviceWaitIdle parameter, VkDevice device, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle( + VkDevice device) +{ + PreDeviceWaitIdle(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device); + + PostDeviceWaitIdle(device, result); - VkResult result = device_dispatch_table(device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges( - VkDevice device, - uint32_t memRangeCount, - const VkMappedMemoryRange* pMemRanges) +void PreAllocMemory( + VkDevice device, + const VkMemoryAllocInfo* pAllocInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(pAllocInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, const VkMemoryAllocInfo* pAllocInfo, is null pointer"); + return; + } + if(pAllocInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pAllocInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pAllocInfo->memProps)) + { + std::string reason = "vkAllocMemory parameter, VkMemoryPropertyFlags pAllocInfo->memProps, is " + EnumeratorString((VkMemoryPropertyFlagBits)pAllocInfo->memProps); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostAllocMemory( + VkDevice device, + VkDeviceMemory* pMem, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(pMem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer"); + return; + } + if((*pMem) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory( + VkDevice device, + const VkMemoryAllocInfo* pAllocInfo, + VkDeviceMemory* pMem) { + PreAllocMemory(device, pAllocInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem); + + PostAllocMemory(device, pMem, result); - VkResult result = device_dispatch_table(device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object) +void PreFreeMemory( + VkDevice device) { - VkResult result = device_dispatch_table(device)->DestroyObject(device, objType, object); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFreeMemory parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostFreeMemory( + VkDevice device, + VkDeviceMemory mem, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFreeMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFreeMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory( + VkDevice device, + VkDeviceMemory mem) +{ + PreFreeMemory(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem); + + PostFreeMemory(device, mem, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements(VkDevice device, VkObjectType objType, VkObject object, VkMemoryRequirements* pData) +void PreMapMemory( + VkDevice device) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkMapMemory parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostMapMemory( + VkDevice device, + VkDeviceMemory mem, + VkDeviceSize offset, + VkDeviceSize size, + VkMemoryMapFlags flags, + void** ppData, + VkResult result) { - VkResult result = device_dispatch_table(device)->GetObjectMemoryRequirements(device, objType, object, pData); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkMapMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkMapMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + + + + if(ppData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkMapMemory parameter, void** ppData, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkMapMemory( + VkDevice device, + VkDeviceMemory mem, + VkDeviceSize offset, + VkDeviceSize size, + VkMemoryMapFlags flags, + void** ppData) +{ + PreMapMemory(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData); + + PostMapMemory(device, mem, offset, size, flags, ppData, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset) +void PreUnmapMemory( + VkDevice device) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUnmapMemory parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostUnmapMemory( + VkDevice device, + VkDeviceMemory mem, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUnmapMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUnmapMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory( + VkDevice device, + VkDeviceMemory mem) { + PreUnmapMemory(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem); + + PostUnmapMemory(device, mem, result); - VkResult result = device_dispatch_table(device)->BindObjectMemory(device, objType, object, mem, offset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) +void PreFlushMappedMemoryRanges( + VkDevice device, + const VkMappedMemoryRange* pMemRanges) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFlushMappedMemoryRanges parameter, VkDevice device, is null pointer"); + return; + } + + if(pMemRanges == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFlushMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer"); + return; + } + if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator"); + return; + } + if(pMemRanges->mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFlushMappedMemoryRanges parameter, VkDeviceMemory pMemRanges->mem, is null pointer"); + return; + } +} + +void PostFlushMappedMemoryRanges( + VkDevice device, + uint32_t memRangeCount, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkFlushMappedMemoryRanges parameter, VkDevice device, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges( + VkDevice device, + uint32_t memRangeCount, + const VkMappedMemoryRange* pMemRanges) +{ + PreFlushMappedMemoryRanges(device, pMemRanges); + VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges); + + PostFlushMappedMemoryRanges(device, memRangeCount, result); - VkResult result = device_dispatch_table(queue)->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) +void PreInvalidateMappedMemoryRanges( + VkDevice device, + const VkMappedMemoryRange* pMemRanges) { - char str[1024]; - if (!pBindInfo) { - sprintf(str, "Struct ptr parameter pBindInfo to function QueueBindSparseImageMemory is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkInvalidateMappedMemoryRanges parameter, VkDevice device, is null pointer"); + return; + } + + if(pMemRanges == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkInvalidateMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer"); + return; + } + if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator"); + return; } - else if (!vk_validate_vkimagememorybindinfo(pBindInfo)) { - sprintf(str, "Parameter pBindInfo to function BindImageMemoryRange contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pMemRanges->mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkInvalidateMappedMemoryRanges parameter, VkDeviceMemory pMemRanges->mem, is null pointer"); + return; } - VkResult result = device_dispatch_table(queue)->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); +} + +void PostInvalidateMappedMemoryRanges( + VkDevice device, + uint32_t memRangeCount, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkInvalidateMappedMemoryRanges parameter, VkDevice device, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges( + VkDevice device, + uint32_t memRangeCount, + const VkMappedMemoryRange* pMemRanges) +{ + PreInvalidateMappedMemoryRanges(device, pMemRanges); + VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges); + + PostInvalidateMappedMemoryRanges(device, memRangeCount, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence) +void PreDestroyObject( + VkDevice device) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDestroyObject parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); +} + +void PostDestroyObject( + VkDevice device, + VkObjectType objType, + VkObject object, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDestroyObject parameter, VkDevice device, is null pointer"); + return; + } + + if(objType < VK_OBJECT_TYPE_BEGIN_RANGE || + objType > VK_OBJECT_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDestroyObject parameter, VkObjectType objType, is unrecognized enumerator"); + return; + } + + if(object == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkDestroyObject parameter, VkObject object, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkDestroyObject parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateFence(device, pCreateInfo, pFence); +} + +VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject( + VkDevice device, + VkObjectType objType, + VkObject object) +{ + PreDestroyObject(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyObject(device, objType, object); + + PostDestroyObject(device, objType, object, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence) +void PreBindObjectMemory( + VkDevice device) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBindObjectMemory parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostBindObjectMemory( + VkDevice device, + VkObjectType objType, + VkObject object, + VkDeviceMemory mem, + VkDeviceSize memOffset, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBindObjectMemory parameter, VkDevice device, is null pointer"); + return; + } + + if(objType < VK_OBJECT_TYPE_BEGIN_RANGE || + objType > VK_OBJECT_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBindObjectMemory parameter, VkObjectType objType, is unrecognized enumerator"); + return; + } + + if(object == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBindObjectMemory parameter, VkObject object, is null pointer"); + return; + } + + if(mem == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBindObjectMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkBindObjectMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory( + VkDevice device, + VkObjectType objType, + VkObject object, + VkDeviceMemory mem, + VkDeviceSize memOffset) +{ + PreBindObjectMemory(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->BindObjectMemory(device, objType, object, mem, memOffset); + + PostBindObjectMemory(device, objType, object, mem, memOffset, result); - VkResult result = device_dispatch_table(device)->GetFenceStatus(device, fence); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout) +void PreGetObjectMemoryRequirements( + VkDevice device) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetObjectMemoryRequirements parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostGetObjectMemoryRequirements( + VkDevice device, + VkObjectType objType, + VkObject object, + VkMemoryRequirements* pMemoryRequirements, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetObjectMemoryRequirements parameter, VkDevice device, is null pointer"); + return; + } + + if(objType < VK_OBJECT_TYPE_BEGIN_RANGE || + objType > VK_OBJECT_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetObjectMemoryRequirements parameter, VkObjectType objType, is unrecognized enumerator"); + return; + } + + if(object == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetObjectMemoryRequirements parameter, VkObject object, is null pointer"); + return; + } + + if(pMemoryRequirements == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetObjectMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer"); + return; + } + if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsAllowed)) + { + std::string reason = "vkGetObjectMemoryRequirements parameter, VkMemoryPropertyFlags pMemoryRequirements->memPropsAllowed, is " + EnumeratorString((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsAllowed); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsRequired)) + { + std::string reason = "vkGetObjectMemoryRequirements parameter, VkMemoryPropertyFlags pMemoryRequirements->memPropsRequired, is " + EnumeratorString((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsRequired); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetObjectMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements( + VkDevice device, + VkObjectType objType, + VkObject object, + VkMemoryRequirements* pMemoryRequirements) +{ + PreGetObjectMemoryRequirements(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetObjectMemoryRequirements(device, objType, object, pMemoryRequirements); + + PostGetObjectMemoryRequirements(device, objType, object, pMemoryRequirements, result); - VkResult result = device_dispatch_table(device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) +void PreQueueBindSparseBufferMemory( + VkQueue queue) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseBufferMemory parameter, VkQueue queue, is null pointer"); + return; + } +} + +void PostQueueBindSparseBufferMemory( + VkQueue queue, + VkBuffer buffer, + VkDeviceSize rangeOffset, + VkDeviceSize rangeSize, + VkDeviceMemory mem, + VkDeviceSize memOffset, + VkResult result) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseBufferMemory parameter, VkQueue queue, is null pointer"); + return; + } + + if(buffer == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseBufferMemory parameter, VkBuffer buffer, is null pointer"); + return; + } + + + + if(mem == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseBufferMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( + VkQueue queue, + VkBuffer buffer, + VkDeviceSize rangeOffset, + VkDeviceSize rangeSize, + VkDeviceMemory mem, + VkDeviceSize memOffset) { + PreQueueBindSparseBufferMemory(queue); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); + + PostQueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset, result); - VkResult result = device_dispatch_table(device)->ResetFences(device, fenceCount, pFences); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore) +void PreQueueBindSparseImageMemory( + VkQueue queue, + const VkImageMemoryBindInfo* pBindInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, VkQueue queue, is null pointer"); + return; + } + + if(pBindInfo == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, const VkImageMemoryBindInfo* pBindInfo, is null pointer"); + return; } - else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is unrecognized enumerator"); + return; + } +} + +void PostQueueBindSparseImageMemory( + VkQueue queue, + VkImage image, + VkDeviceMemory mem, + VkDeviceSize memOffset, + VkResult result) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, VkQueue queue, is null pointer"); + return; + } + + if(image == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, VkImage image, is null pointer"); + return; + } + + if(mem == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueBindSparseImageMemory parameter, VkDeviceMemory mem, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateSemaphore(device, pCreateInfo, pSemaphore); +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory( + VkQueue queue, + VkImage image, + const VkImageMemoryBindInfo* pBindInfo, + VkDeviceMemory mem, + VkDeviceSize memOffset) +{ + PreQueueBindSparseImageMemory(queue, pBindInfo); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); + + PostQueueBindSparseImageMemory(queue, image, mem, memOffset, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) +void PreCreateFence( + VkDevice device, + const VkFenceCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, const VkFenceCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkFenceCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateFence parameter, VkFenceCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkFenceCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostCreateFence( + VkDevice device, + VkFence* pFence, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, VkDevice device, is null pointer"); + return; + } + + if(pFence == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, VkFence* pFence, is null pointer"); + return; + } + if((*pFence) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFence parameter, VkFence* pFence, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateFence( + VkDevice device, + const VkFenceCreateInfo* pCreateInfo, + VkFence* pFence) { + PreCreateFence(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence); + + PostCreateFence(device, pFence, result); - VkResult result = device_dispatch_table(queue)->QueueSignalSemaphore(queue, semaphore); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) +void PreResetFences( + VkDevice device, + const VkFence* pFences) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetFences parameter, VkDevice device, is null pointer"); + return; + } + + if(pFences == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetFences parameter, const VkFence* pFences, is null pointer"); + return; + } + if((*pFences) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetFences parameter, const VkFence* pFences, is null pointer"); + return; + } +} + +void PostResetFences( + VkDevice device, + uint32_t fenceCount, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetFences parameter, VkDevice device, is null pointer"); + return; + } + + + if(result != VK_SUCCESS) + { + std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkResetFences( + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences) { + PreResetFences(device, pFences); + VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences); + + PostResetFences(device, fenceCount, result); - VkResult result = device_dispatch_table(queue)->QueueWaitSemaphore(queue, semaphore); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent) +void PreGetFenceStatus( + VkDevice device) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetFenceStatus parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); +} + +void PostGetFenceStatus( + VkDevice device, + VkFence fence, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetFenceStatus parameter, VkDevice device, is null pointer"); + return; + } + + if(fence == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetFenceStatus parameter, VkFence fence, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateEvent(device, pCreateInfo, pEvent); +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus( + VkDevice device, + VkFence fence) +{ + PreGetFenceStatus(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence); + + PostGetFenceStatus(device, fence, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event) +void PreWaitForFences( + VkDevice device, + const VkFence* pFences) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkWaitForFences parameter, VkDevice device, is null pointer"); + return; + } + + if(pFences == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkWaitForFences parameter, const VkFence* pFences, is null pointer"); + return; + } + if((*pFences) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkWaitForFences parameter, const VkFence* pFences, is null pointer"); + return; + } +} + +void PostWaitForFences( + VkDevice device, + uint32_t fenceCount, + bool32_t waitAll, + uint64_t timeout, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkWaitForFences parameter, VkDevice device, is null pointer"); + return; + } + + + + + if(result != VK_SUCCESS) + { + std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences( + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences, + bool32_t waitAll, + uint64_t timeout) +{ + PreWaitForFences(device, pFences); + VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout); + + PostWaitForFences(device, fenceCount, waitAll, timeout, result); - VkResult result = device_dispatch_table(device)->GetEventStatus(device, event); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event) +void PreCreateSemaphore( + VkDevice device, + const VkSemaphoreCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, const VkSemaphoreCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } +} + +void PostCreateSemaphore( + VkDevice device, + VkSemaphore* pSemaphore, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, VkDevice device, is null pointer"); + return; + } + + if(pSemaphore == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer"); + return; + } + if((*pSemaphore) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore( + VkDevice device, + const VkSemaphoreCreateInfo* pCreateInfo, + VkSemaphore* pSemaphore) +{ + PreCreateSemaphore(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore); + + PostCreateSemaphore(device, pSemaphore, result); - VkResult result = device_dispatch_table(device)->SetEvent(device, event); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event) +void PreQueueSignalSemaphore( + VkQueue queue) { + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSignalSemaphore parameter, VkQueue queue, is null pointer"); + return; + } +} + +void PostQueueSignalSemaphore( + VkQueue queue, + VkSemaphore semaphore, + VkResult result) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSignalSemaphore parameter, VkQueue queue, is null pointer"); + return; + } + + if(semaphore == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueSignalSemaphore parameter, VkSemaphore semaphore, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore( + VkQueue queue, + VkSemaphore semaphore) +{ + PreQueueSignalSemaphore(queue); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore); + + PostQueueSignalSemaphore(queue, semaphore, result); - VkResult result = device_dispatch_table(device)->ResetEvent(device, event); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool) +void PreQueueWaitSemaphore( + VkQueue queue) +{ + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueWaitSemaphore parameter, VkQueue queue, is null pointer"); + return; + } +} + +void PostQueueWaitSemaphore( + VkQueue queue, + VkSemaphore semaphore, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(queue == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueWaitSemaphore parameter, VkQueue queue, is null pointer"); + return; } - else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(semaphore == nullptr) + { + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkQueueWaitSemaphore parameter, VkSemaphore semaphore, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateQueryPool(device, pCreateInfo, pQueryPool); + + if(result != VK_SUCCESS) + { + std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore( + VkQueue queue, + VkSemaphore semaphore) +{ + PreQueueWaitSemaphore(queue); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore); + + PostQueueWaitSemaphore(queue, semaphore, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) +void PreCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, const VkEventCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } +} + +void PostCreateEvent( + VkDevice device, + VkEvent* pEvent, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, VkDevice device, is null pointer"); + return; + } + + if(pEvent == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, VkEvent* pEvent, is null pointer"); + return; + } + if((*pEvent) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateEvent parameter, VkEvent* pEvent, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo, + VkEvent* pEvent) +{ + PreCreateEvent(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent); + + PostCreateEvent(device, pEvent, result); - VkResult result = device_dispatch_table(device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties *pFormatInfo) +void PreGetEventStatus( + VkDevice device) { - char str[1024]; - if (!validate_VkFormat(format)) { - sprintf(str, "Parameter format to function GetPhysicalDeviceFormatInfo has invalid value of %i.", (int)format); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetEventStatus parameter, VkDevice device, is null pointer"); + return; } - VkResult result = instance_dispatch_table(physicalDevice)->GetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo); +} + +void PostGetEventStatus( + VkDevice device, + VkEvent event, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetEventStatus parameter, VkDevice device, is null pointer"); + return; + } + + if(event == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetEventStatus parameter, VkEvent event, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus( + VkDevice device, + VkEvent event) +{ + PreGetEventStatus(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event); + + PostGetEventStatus(device, event, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer) +void PreSetEvent( + VkDevice device) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkSetEvent parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); +} + +void PostSetEvent( + VkDevice device, + VkEvent event, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkSetEvent parameter, VkDevice device, is null pointer"); + return; + } + + if(event == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkSetEvent parameter, VkEvent event, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateBuffer(device, pCreateInfo, pBuffer); + + if(result != VK_SUCCESS) + { + std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkSetEvent( + VkDevice device, + VkEvent event) +{ + PreSetEvent(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event); + + PostSetEvent(device, event, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView) +void PreResetEvent( + VkDevice device) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetEvent parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostResetEvent( + VkDevice device, + VkEvent event, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetEvent parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(event == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetEvent parameter, VkEvent event, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateBufferView(device, pCreateInfo, pView); + + if(result != VK_SUCCESS) + { + std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkResetEvent( + VkDevice device, + VkEvent event) +{ + PreResetEvent(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event); + + PostResetEvent(device, event, result); + return result; } -void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo) +void PreCreateQueryPool( + VkDevice device, + const VkQueryPoolCreateInfo* pCreateInfo) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkDevice device, is null pointer"); + return; + } + if(pCreateInfo == nullptr) { - char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, const VkQueryPoolCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE || + pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics)) + { + std::string reason = "vkCreateQueryPool parameter, VkQueryPipelineStatisticFlags pCreateInfo->pipelineStatistics, is " + EnumeratorString((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostCreateQueryPool( + VkDevice device, + VkQueryPool* pQueryPool, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkDevice device, is null pointer"); return; } - if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + if(pQueryPool == nullptr) { - char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\ - "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer"); + return; + } + if((*pQueryPool) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer"); return; } - if (!validate_VkImageType(pCreateInfo->imageType)) + if(result != VK_SUCCESS) { - char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\ - "unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool( + VkDevice device, + const VkQueryPoolCreateInfo* pCreateInfo, + VkQueryPool* pQueryPool) +{ + PreCreateQueryPool(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool); + + PostCreateQueryPool(device, pQueryPool, result); + + return result; +} + +void PreGetQueryPoolResults( + VkDevice device) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetQueryPoolResults parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostGetQueryPoolResults( + VkDevice device, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount, + size_t* pDataSize, + void* pData, + VkQueryResultFlags flags, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetQueryPoolResults parameter, VkDevice device, is null pointer"); + return; + } + + if(queryPool == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetQueryPoolResults parameter, VkQueryPool queryPool, is null pointer"); + return; + } + + - if (!validate_VkFormat(pCreateInfo->format)) + if(pDataSize == nullptr) { - char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\ - "unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetQueryPoolResults parameter, size_t* pDataSize, is null pointer"); + return; + } + + if(pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetQueryPoolResults parameter, void* pData, is null pointer"); + return; + } + + if(!ValidateEnumerator((VkQueryResultFlagBits)flags)) + { + std::string reason = "vkGetQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } - /* - VkFormatProperties properties; - size_t size = sizeof(properties); - VkResult result = device_dispatch_table(device)->GetFormatInfo(device, pCreateInfo->format, - VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties); if(result != VK_SUCCESS) { - char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\ - "validated (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults( + VkDevice device, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount, + size_t* pDataSize, + void* pData, + VkQueryResultFlags flags) +{ + PreGetQueryPoolResults(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags); + + PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result); + + return result; +} + +void PreCreateBuffer( + VkDevice device, + const VkBufferCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, const VkBufferCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkBufferUsageFlagBits)pCreateInfo->usage)) + { + std::string reason = "vkCreateBuffer parameter, VkBufferUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkBufferUsageFlagBits)pCreateInfo->usage); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkBufferCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateBuffer parameter, VkBufferCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkBufferCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } +} - if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0)) +void PostCreateBuffer( + VkDevice device, + VkBuffer* pBuffer, + VkResult result) +{ + if(device == nullptr) { - char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\ - "unsupported format (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, VkDevice device, is null pointer"); return; } - */ - // TODO: Can we check device-specific limits? - if (!vk_validate_vkextent3d(&pCreateInfo->extent)) + if(pBuffer == nullptr) { - char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\ - "(precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer"); + return; + } + if((*pBuffer) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer"); return; } - if (!validate_VkImageTiling(pCreateInfo->tiling)) + if(result != VK_SUCCESS) { - char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\ - "unrecoginized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } } -void PostCreateImage(VkResult result, VkImage* pImage) +VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer( + VkDevice device, + const VkBufferCreateInfo* pCreateInfo, + VkBuffer* pBuffer) { + PreCreateBuffer(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer); + + PostCreateBuffer(device, pBuffer, result); + + return result; +} + +void PreCreateBufferView( + VkDevice device, + const VkBufferViewCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, const VkBufferViewCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->buffer == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkBuffer pCreateInfo->buffer, is null pointer"); + return; + } + if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE || + pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator"); + return; + } +} + +void PostCreateBufferView( + VkDevice device, + VkBufferView* pView, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkDevice device, is null pointer"); + return; + } + + if(pView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkBufferView* pView, is null pointer"); + return; + } + if((*pView) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateBufferView parameter, VkBufferView* pView, is null pointer"); + return; + } + if(result != VK_SUCCESS) { - // TODO: Spit out VkResult value. - char const str[] = "vkCreateImage failed (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView( + VkDevice device, + const VkBufferViewCreateInfo* pCreateInfo, + VkBufferView* pView) +{ + PreCreateBufferView(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView); + + PostCreateBufferView(device, pView, result); + + return result; +} + +void PreCreateImage( + VkDevice device, + const VkImageCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, const VkImageCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE || + pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkFormat pCreateInfo->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE || + pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkImageUsageFlagBits)pCreateInfo->usage)) + { + std::string reason = "vkCreateImage parameter, VkImageUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkImageUsageFlagBits)pCreateInfo->usage); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkImageCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateImage parameter, VkImageCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkImageCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostCreateImage( + VkDevice device, + VkImage* pImage, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkDevice device, is null pointer"); return; } if(pImage == nullptr) { - char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkImage* pImage, is null pointer"); + return; + } + if((*pImage) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImage parameter, VkImage* pImage, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } } -VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage) +VK_LAYER_EXPORT VkResult VKAPI vkCreateImage( + VkDevice device, + const VkImageCreateInfo* pCreateInfo, + VkImage* pImage) { PreCreateImage(device, pCreateInfo); - VkResult result = device_dispatch_table(device)->CreateImage(device, pCreateInfo, pImage); - PostCreateImage(result, pImage); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage); + + PostCreateImage(device, pImage, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) +void PreGetImageSubresourceLayout( + VkDevice device, + const VkImageSubresource* pSubresource) { - char str[1024]; - if (!pSubresource) { - sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceLayout is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } else if (!vk_validate_vkimagesubresource(pSubresource)) { - sprintf(str, "Parameter pSubresource to function GetImageSubresourceLayout contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, VkDevice device, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); - return result; + if(pSubresource == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, const VkImageSubresource* pSubresource, is null pointer"); + return; + } + if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is unrecognized enumerator"); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView) +void PostGetImageSubresourceLayout( + VkDevice device, + VkImage image, + VkSubresourceLayout* pLayout, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, VkDevice device, is null pointer"); + return; + } + + if(image == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, VkImage image, is null pointer"); + return; + } + + if(pLayout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkGetImageSubresourceLayout parameter, VkSubresourceLayout* pLayout, is null pointer"); + return; } - else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(result != VK_SUCCESS) + { + std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateImageView(device, pCreateInfo, pView); +} + +VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout( + VkDevice device, + VkImage image, + const VkImageSubresource* pSubresource, + VkSubresourceLayout* pLayout) +{ + PreGetImageSubresourceLayout(device, pSubresource); + VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); + + PostGetImageSubresourceLayout(device, image, pLayout, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView) +void PreCreateImageView( + VkDevice device, + const VkImageViewCreateInfo* pCreateInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, const VkImageViewCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; } - VkResult result = device_dispatch_table(device)->CreateColorAttachmentView(device, pCreateInfo, pView); + if(pCreateInfo->image == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkImage pCreateInfo->image, is null pointer"); + return; + } + if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE || + pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE || + pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is unrecognized enumerator"); + return; + } + if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE || + pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is unrecognized enumerator"); + return; + } + if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE || + pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is unrecognized enumerator"); + return; + } + if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE || + pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is unrecognized enumerator"); + return; + } + if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is unrecognized enumerator"); + return; + } +} + +void PostCreateImageView( + VkDevice device, + VkImageView* pView, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkDevice device, is null pointer"); + return; + } + + if(pView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkImageView* pView, is null pointer"); + return; + } + if((*pView) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateImageView parameter, VkImageView* pView, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView( + VkDevice device, + const VkImageViewCreateInfo* pCreateInfo, + VkImageView* pView) +{ + PreCreateImageView(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView); + + PostCreateImageView(device, pView, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView) +void PreCreateColorAttachmentView( + VkDevice device, + const VkColorAttachmentViewCreateInfo* pCreateInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, const VkColorAttachmentViewCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->image == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkImage pCreateInfo->image, is null pointer"); + return; + } + if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->msaaResolveImage == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkImage pCreateInfo->msaaResolveImage, is null pointer"); + return; + } + if(pCreateInfo->msaaResolveSubResource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pCreateInfo->msaaResolveSubResource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkImageAspect pCreateInfo->msaaResolveSubResource.aspect, is unrecognized enumerator"); + return; + } +} + +void PostCreateColorAttachmentView( + VkDevice device, + VkColorAttachmentView* pView, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkDevice device, is null pointer"); + return; + } + + if(pView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkColorAttachmentView* pView, is null pointer"); + return; + } + if((*pView) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateColorAttachmentView parameter, VkColorAttachmentView* pView, is null pointer"); + return; } - else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateColorAttachmentView parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateDepthStencilView(device, pCreateInfo, pView); +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView( + VkDevice device, + const VkColorAttachmentViewCreateInfo* pCreateInfo, + VkColorAttachmentView* pView) +{ + PreCreateColorAttachmentView(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateColorAttachmentView(device, pCreateInfo, pView); + + PostCreateColorAttachmentView(device, pView, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader) +void PreCreateDepthStencilView( + VkDevice device, + const VkDepthStencilViewCreateInfo* pCreateInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, const VkDepthStencilViewCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->image == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkImage pCreateInfo->image, is null pointer"); + return; + } + if(!ValidateEnumerator((VkDepthStencilViewCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateDepthStencilView parameter, VkDepthStencilViewCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkDepthStencilViewCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostCreateDepthStencilView( + VkDevice device, + VkDepthStencilView* pView, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(pView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkDepthStencilView* pView, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateShader(device, pCreateInfo, pShader); + if((*pView) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDepthStencilView parameter, VkDepthStencilView* pView, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDepthStencilView parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView( + VkDevice device, + const VkDepthStencilViewCreateInfo* pCreateInfo, + VkDepthStencilView* pView) +{ + PreCreateDepthStencilView(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDepthStencilView(device, pCreateInfo, pView); + + PostCreateDepthStencilView(device, pView, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline) +void PreCreateShader( + VkDevice device, + const VkShaderCreateInfo* pCreateInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, const VkShaderCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->module == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkShaderModule pCreateInfo->module, is null pointer"); + return; } - else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pCreateInfo->name == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, const char* pCreateInfo->name, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateGraphicsPipeline(device, pCreateInfo, pPipeline); + if(pCreateInfo->pCode == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, const void* pCreateInfo->pCode, is null pointer"); + return; + } +} + +void PostCreateShader( + VkDevice device, + VkShader* pShader, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkDevice device, is null pointer"); + return; + } + + if(pShader == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkShader* pShader, is null pointer"); + return; + } + if((*pShader) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateShader parameter, VkShader* pShader, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateShader( + VkDevice device, + const VkShaderCreateInfo* pCreateInfo, + VkShader* pShader) +{ + PreCreateShader(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader); + + PostCreateShader(device, pShader, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline) +void PreCreateGraphicsPipeline( + VkDevice device, + const VkGraphicsPipelineCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer"); + return; + } + if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pNext, is null pointer"); + return; + } + if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE || + pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages->shader == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkShader pCreateInfo->pStages->shader, is null pointer"); + return; + } + if(pCreateInfo->pStages->pLinkConstBufferInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkLinkConstBuffer* pCreateInfo->pStages->pLinkConstBufferInfo, is null pointer"); + return; + } + if(pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVertexInputState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVertexInputState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE || + pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pIaState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer"); + return; + } + if(pCreateInfo->pIaState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pIaState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pIaState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pIaState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pIaState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE || + pCreateInfo->pIaState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pTessState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer"); + return; + } + if(pCreateInfo->pTessState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pTessState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pTessState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pTessState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVpState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer"); + return; + } + if(pCreateInfo->pVpState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pVpState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVpState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVpState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVpState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE || + pCreateInfo->pVpState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVpState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE || + pCreateInfo->pVpState->depthMode > VK_DEPTH_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer"); + return; + } + if(pCreateInfo->pRsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pRsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pRsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pRsState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE || + pCreateInfo->pRsState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE || + pCreateInfo->pRsState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->fillMode < VK_FILL_MODE_BEGIN_RANGE || + pCreateInfo->pRsState->fillMode > VK_FILL_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->cullMode < VK_CULL_MODE_BEGIN_RANGE || + pCreateInfo->pRsState->cullMode > VK_CULL_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->frontFace < VK_FRONT_FACE_BEGIN_RANGE || + pCreateInfo->pRsState->frontFace > VK_FRONT_FACE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pMsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer"); + return; + } + if(pCreateInfo->pMsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pMsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pMsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pMsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pDsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer"); + return; + } + if(pCreateInfo->pDsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pDsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pDsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pDsState->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pDsState->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer"); + return; + } + if(pCreateInfo->pCbState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pCbState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pCbState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pCbState->logicOp < VK_LOGIC_OP_BEGIN_RANGE || + pCreateInfo->pCbState->logicOp > VK_LOGIC_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer"); + return; + } + if(pCreateInfo->pCbState->pAttachments->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->destBlendColor > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask)) + { + std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(pCreateInfo->layout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer"); + return; + } +} + +void PostCreateGraphicsPipeline( + VkDevice device, + VkPipeline* pPipeline, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pPipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + if((*pPipeline) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; } - else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline); +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline( + VkDevice device, + const VkGraphicsPipelineCreateInfo* pCreateInfo, + VkPipeline* pPipeline) +{ + PreCreateGraphicsPipeline(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipeline(device, pCreateInfo, pPipeline); + + PostCreateGraphicsPipeline(device, pPipeline, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline) +void PreCreateGraphicsPipelineDerivative( + VkDevice device, + const VkGraphicsPipelineCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer"); + return; + } + if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pNext, is null pointer"); + return; + } + if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE || + pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pStages->shader == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkShader pCreateInfo->pStages->shader, is null pointer"); + return; + } + if(pCreateInfo->pStages->pLinkConstBufferInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkLinkConstBuffer* pCreateInfo->pStages->pLinkConstBufferInfo, is null pointer"); + return; + } + if(pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer"); + return; + } + if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVertexInputState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pVertexInputState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE || + pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer"); + return; + } + if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pIaState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer"); + return; + } + if(pCreateInfo->pIaState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pIaState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pIaState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pIaState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pIaState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE || + pCreateInfo->pIaState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pTessState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer"); + return; + } + if(pCreateInfo->pTessState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pTessState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pTessState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pTessState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVpState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer"); + return; + } + if(pCreateInfo->pVpState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pVpState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVpState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pVpState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pVpState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE || + pCreateInfo->pVpState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pVpState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE || + pCreateInfo->pVpState->depthMode > VK_DEPTH_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer"); + return; + } + if(pCreateInfo->pRsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pRsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pRsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pRsState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE || + pCreateInfo->pRsState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE || + pCreateInfo->pRsState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->fillMode < VK_FILL_MODE_BEGIN_RANGE || + pCreateInfo->pRsState->fillMode > VK_FILL_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->cullMode < VK_CULL_MODE_BEGIN_RANGE || + pCreateInfo->pRsState->cullMode > VK_CULL_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pRsState->frontFace < VK_FRONT_FACE_BEGIN_RANGE || + pCreateInfo->pRsState->frontFace > VK_FRONT_FACE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pMsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer"); + return; + } + if(pCreateInfo->pMsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pMsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pMsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pMsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pDsState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer"); + return; + } + if(pCreateInfo->pDsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pDsState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pDsState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pDsState->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pDsState->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDsState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->pDsState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer"); + return; + } + if(pCreateInfo->pCbState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->pCbState->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pCbState->pNext, is null pointer"); + return; + } + if(pCreateInfo->pCbState->logicOp < VK_LOGIC_OP_BEGIN_RANGE || + pCreateInfo->pCbState->logicOp > VK_LOGIC_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer"); + return; + } + if(pCreateInfo->pCbState->pAttachments->format < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->format > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->destBlendColor > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pCbState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE || + pCreateInfo->pCbState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask)) + { + std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(pCreateInfo->layout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkPipelineLayout pCreateInfo->layout, is null pointer"); + return; + } +} + +void PostCreateGraphicsPipelineDerivative( + VkDevice device, + VkPipeline basePipeline, + VkPipeline* pPipeline, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkDevice device, is null pointer"); + return; + } + + if(basePipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkPipeline basePipeline, is null pointer"); + return; + } + + if(pPipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer"); + return; } - else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if((*pPipeline) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateComputePipeline(device, pCreateInfo, pPipeline); + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative( + VkDevice device, + const VkGraphicsPipelineCreateInfo* pCreateInfo, + VkPipeline basePipeline, + VkPipeline* pPipeline) +{ + PreCreateGraphicsPipelineDerivative(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline); + + PostCreateGraphicsPipelineDerivative(device, basePipeline, pPipeline, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData) +void PreCreateComputePipeline( + VkDevice device, + const VkComputePipelineCreateInfo* pCreateInfo) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->cs.pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer"); + return; + } + if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE || + pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator"); + return; + } + if(pCreateInfo->cs.shader == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer"); + return; + } + if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer"); + return; + } + if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer"); + return; + } + if(pCreateInfo->cs.pSpecializationInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer"); + return; + } + if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer"); + return; + } + if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer"); + return; + } + if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags)) + { + std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(pCreateInfo->layout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer"); + return; + } +} + +void PostCreateComputePipeline( + VkDevice device, + VkPipeline* pPipeline, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pPipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + if((*pPipeline) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline( + VkDevice device, + const VkComputePipelineCreateInfo* pCreateInfo, + VkPipeline* pPipeline) +{ + PreCreateComputePipeline(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipeline(device, pCreateInfo, pPipeline); + + PostCreateComputePipeline(device, pPipeline, result); - VkResult result = device_dispatch_table(device)->StorePipeline(device, pipeline, pDataSize, pData); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline) +void PreStorePipeline( + VkDevice device) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkStorePipeline parameter, VkDevice device, is null pointer"); + return; + } +} + +void PostStorePipeline( + VkDevice device, + VkPipeline pipeline, + size_t* pDataSize, + void* pData, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkStorePipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkStorePipeline parameter, VkPipeline pipeline, is null pointer"); + return; + } + + if(pDataSize == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkStorePipeline parameter, size_t* pDataSize, is null pointer"); + return; + } + + if(pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkStorePipeline parameter, void* pData, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkStorePipeline parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline( + VkDevice device, + VkPipeline pipeline, + size_t* pDataSize, + void* pData) +{ + PreStorePipeline(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->StorePipeline(device, pipeline, pDataSize, pData); + + PostStorePipeline(device, pipeline, pDataSize, pData, result); - VkResult result = device_dispatch_table(device)->LoadPipeline(device, dataSize, pData, pPipeline); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline) +void PreLoadPipeline( + VkDevice device, + const void* pData) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipeline parameter, VkDevice device, is null pointer"); + return; + } + + if(pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipeline parameter, const void* pData, is null pointer"); + return; + } +} + +void PostLoadPipeline( + VkDevice device, + size_t dataSize, + VkPipeline* pPipeline, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipeline parameter, VkDevice device, is null pointer"); + return; + } + + + if(pPipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + if((*pPipeline) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipeline parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkLoadPipeline parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline( + VkDevice device, + size_t dataSize, + const void* pData, + VkPipeline* pPipeline) { + PreLoadPipeline(device, pData); + VkResult result = get_dispatch_table(pc_device_table_map, device)->LoadPipeline(device, dataSize, pData, pPipeline); + + PostLoadPipeline(device, dataSize, pPipeline, result); - VkResult result = device_dispatch_table(device)->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler) +void PreLoadPipelineDerivative( + VkDevice device, + const void* pData) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, VkDevice device, is null pointer"); + return; + } + + if(pData == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, const void* pData, is null pointer"); + return; + } +} + +void PostLoadPipelineDerivative( + VkDevice device, + size_t dataSize, + VkPipeline basePipeline, + VkPipeline* pPipeline, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, VkDevice device, is null pointer"); + return; + } + + + if(basePipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, VkPipeline basePipeline, is null pointer"); + return; } - else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(pPipeline == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateSampler(device, pCreateInfo, pSampler); + if((*pPipeline) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkLoadPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkLoadPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative( + VkDevice device, + size_t dataSize, + const void* pData, + VkPipeline basePipeline, + VkPipeline* pPipeline) +{ + PreLoadPipelineDerivative(device, pData); + VkResult result = get_dispatch_table(pc_device_table_map, device)->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline); + + PostLoadPipelineDerivative(device, dataSize, basePipeline, pPipeline, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout) +void PreCreatePipelineLayout( + VkDevice device, + const VkPipelineLayoutCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pSetLayouts == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer"); + return; + } + if((*pCreateInfo->pSetLayouts) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer"); + return; + } +} + +void PostCreatePipelineLayout( + VkDevice device, + VkPipelineLayout* pPipelineLayout, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(pPipelineLayout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer"); + return; + } + if((*pPipelineLayout) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout); + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout( + VkDevice device, + const VkPipelineLayoutCreateInfo* pCreateInfo, + VkPipelineLayout* pPipelineLayout) +{ + PreCreatePipelineLayout(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout); + + PostCreatePipelineLayout(device, pPipelineLayout, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout) +void PreCreateSampler( + VkDevice device, + const VkSamplerCreateInfo* pCreateInfo) { - VkResult result = device_dispatch_table(device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE || + pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator"); + return; + } + if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE || + pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator"); + return; + } + if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE || + pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator"); + return; + } + if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE || + pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator"); + return; + } + if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE || + pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator"); + return; + } + if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE || + pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator"); + return; + } + if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE || + pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE || + pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator"); + return; + } +} + +void PostCreateSampler( + VkDevice device, + VkSampler* pSampler, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkDevice device, is null pointer"); + return; + } + + if(pSampler == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkSampler* pSampler, is null pointer"); + return; + } + if((*pSampler) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateSampler parameter, VkSampler* pSampler, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler( + VkDevice device, + const VkSamplerCreateInfo* pCreateInfo, + VkSampler* pSampler) +{ + PreCreateSampler(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler); + + PostCreateSampler(device, pSampler, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool) +void PreCreateDescriptorSetLayout( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo) { - char str[1024]; - if (!validate_VkDescriptorPoolUsage(poolUsage)) { - sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer"); + return; } - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pBinding == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer"); + return; } - else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE || + pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator"); + return; } - VkResult result = device_dispatch_table(device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool); + if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags)) + { + std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } + if(pCreateInfo->pBinding->pImmutableSamplers == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer"); + return; + } + if((*pCreateInfo->pBinding->pImmutableSamplers) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer"); + return; + } +} + +void PostCreateDescriptorSetLayout( + VkDevice device, + VkDescriptorSetLayout* pSetLayout, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer"); + return; + } + + if(pSetLayout == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer"); + return; + } + if((*pSetLayout) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayout* pSetLayout) +{ + PreCreateDescriptorSetLayout(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout); + + PostCreateDescriptorSetLayout(device, pSetLayout, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) +void PreCreateDescriptorPool( + VkDevice device, + const VkDescriptorPoolCreateInfo* pCreateInfo) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pTypeCount == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer"); + return; + } + if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE || + pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator"); + return; + } +} + +void PostCreateDescriptorPool( + VkDevice device, + VkDescriptorPoolUsage poolUsage, + uint32_t maxSets, + VkDescriptorPool* pDescriptorPool, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDevice device, is null pointer"); + return; + } + + if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE || + poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator"); + return; + } + + + if(pDescriptorPool == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer"); + return; + } + if((*pDescriptorPool) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool( + VkDevice device, + VkDescriptorPoolUsage poolUsage, + uint32_t maxSets, + const VkDescriptorPoolCreateInfo* pCreateInfo, + VkDescriptorPool* pDescriptorPool) +{ + PreCreateDescriptorPool(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool); + + PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result); - VkResult result = device_dispatch_table(device)->ResetDescriptorPool(device, descriptorPool); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount) +void PreResetDescriptorPool( + VkDevice device) { - char str[1024]; - if (!validate_VkDescriptorSetUsage(setUsage)) { - sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetDescriptorPool parameter, VkDevice device, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount); +} + +void PostResetDescriptorPool( + VkDevice device, + VkDescriptorPool descriptorPool, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetDescriptorPool parameter, VkDevice device, is null pointer"); + return; + } + + if(descriptorPool == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetDescriptorPool parameter, VkDescriptorPool descriptorPool, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool( + VkDevice device, + VkDescriptorPool descriptorPool) +{ + PreResetDescriptorPool(device); + VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool); + + PostResetDescriptorPool(device, descriptorPool, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) +void PreAllocDescriptorSets( + VkDevice device, + const VkDescriptorSetLayout* pSetLayouts) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDevice device, is null pointer"); + return; + } - return device_dispatch_table(device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies); + if(pSetLayouts == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer"); + return; + } + if((*pSetLayouts) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer"); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState) +void PostAllocDescriptorSets( + VkDevice device, + VkDescriptorPool descriptorPool, + VkDescriptorSetUsage setUsage, + uint32_t count, + VkDescriptorSet* pDescriptorSets, + uint32_t* pCount, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(descriptorPool == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDescriptorPool descriptorPool, is null pointer"); + return; + } + + if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE || + setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator"); + return; + } + + + if(pDescriptorSets == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateDynamicViewportState(device, pCreateInfo, pState); + if((*pDescriptorSets) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer"); + return; + } + + if(pCount == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets( + VkDevice device, + VkDescriptorPool descriptorPool, + VkDescriptorSetUsage setUsage, + uint32_t count, + const VkDescriptorSetLayout* pSetLayouts, + VkDescriptorSet* pDescriptorSets, + uint32_t* pCount) +{ + PreAllocDescriptorSets(device, pSetLayouts); + VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount); + + PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState) +void PreUpdateDescriptorSets( + VkDevice device, + const VkWriteDescriptorSet* pDescriptorWrites, + const VkCopyDescriptorSet* pDescriptorCopies) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer"); + return; + } + + if(pDescriptorWrites == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer"); + return; + } + if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator"); + return; + } + if(pDescriptorWrites->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, const void* pDescriptorWrites->pNext, is null pointer"); + return; + } + if(pDescriptorWrites->destSet == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorWrites->destSet, is null pointer"); + return; + } + if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE || + pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator"); + return; + } + if(pDescriptorWrites->pDescriptors == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer"); + return; + } + if(pDescriptorWrites->pDescriptors->bufferView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkBufferView pDescriptorWrites->pDescriptors->bufferView, is null pointer"); + return; + } + if(pDescriptorWrites->pDescriptors->sampler == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkSampler pDescriptorWrites->pDescriptors->sampler, is null pointer"); + return; + } + if(pDescriptorWrites->pDescriptors->imageView == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkImageView pDescriptorWrites->pDescriptors->imageView, is null pointer"); + return; + } + if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator"); + return; + } + + if(pDescriptorCopies == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer"); + return; + } + if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator"); + return; + } + if(pDescriptorCopies->pNext == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, const void* pDescriptorCopies->pNext, is null pointer"); + return; + } + if(pDescriptorCopies->srcSet == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->srcSet, is null pointer"); + return; + } + if(pDescriptorCopies->destSet == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->destSet, is null pointer"); + return; + } +} + +void PostUpdateDescriptorSets( + VkDevice device, + uint32_t writeCount, + uint32_t copyCount, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + + + if(result != VK_SUCCESS) + { + std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(device)->CreateDynamicRasterState(device, pCreateInfo, pState); +} + +VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets( + VkDevice device, + uint32_t writeCount, + const VkWriteDescriptorSet* pDescriptorWrites, + uint32_t copyCount, + const VkCopyDescriptorSet* pDescriptorCopies) +{ + PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies); + VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies); + + PostUpdateDescriptorSets(device, writeCount, copyCount, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState) +void PreCreateDynamicViewportState( + VkDevice device, + const VkDynamicVpStateCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, const VkDynamicVpStateCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pViewports == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer"); + return; + } + if(pCreateInfo->pScissors == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, const VkRect* pCreateInfo->pScissors, is null pointer"); + return; + } +} + +void PostCreateDynamicViewportState( + VkDevice device, + VkDynamicVpState* pState, + VkResult result) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer"); + return; } - else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(pState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer"); + return; + } + if((*pState) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer"); + return; } - VkResult result = device_dispatch_table(device)->CreateDynamicColorBlendState(device, pCreateInfo, pState); + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState( + VkDevice device, + const VkDynamicVpStateCreateInfo* pCreateInfo, + VkDynamicVpState* pState) +{ + PreCreateDynamicViewportState(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState); + + PostCreateDynamicViewportState(device, pState, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState) +void PreCreateDynamicRasterState( + VkDevice device, + const VkDynamicRsStateCreateInfo* pCreateInfo) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, const VkDynamicRsStateCreateInfo* pCreateInfo, is null pointer"); + return; } - else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; } - VkResult result = device_dispatch_table(device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState); +} + +void PostCreateDynamicRasterState( + VkDevice device, + VkDynamicRsState* pState, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer"); + return; + } + + if(pState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer"); + return; + } + if((*pState) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState( + VkDevice device, + const VkDynamicRsStateCreateInfo* pCreateInfo, + VkDynamicRsState* pState) +{ + PreCreateDynamicRasterState(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState); + + PostCreateDynamicRasterState(device, pState, result); + return result; } -void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo) +void PreCreateDynamicColorBlendState( + VkDevice device, + const VkDynamicCbStateCreateInfo* pCreateInfo) { if(device == nullptr) { - char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer"); return; } if(pCreateInfo == nullptr) { - char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, const VkDynamicCbStateCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); return; } +} - if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO) +void PostCreateDynamicColorBlendState( + VkDevice device, + VkDynamicCbState* pState, + VkResult result) +{ + if(device == nullptr) { - char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\ - "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer"); + return; + } + + if(pState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer"); + return; + } + if((*pState) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState( + VkDevice device, + const VkDynamicCbStateCreateInfo* pCreateInfo, + VkDynamicCbState* pState) +{ + PreCreateDynamicColorBlendState(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState); + + PostCreateDynamicColorBlendState(device, pState, result); + + return result; +} + +void PreCreateDynamicDepthStencilState( + VkDevice device, + const VkDynamicDsStateCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, const VkDynamicDsStateCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); return; } } -void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer) +void PostCreateDynamicDepthStencilState( + VkDevice device, + VkDynamicDsState* pState, + VkResult result) { + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer"); + return; + } + + if(pState == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer"); + return; + } + if((*pState) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer"); + return; + } + if(result != VK_SUCCESS) { - // TODO: Spit out VkResult value. - char const str[] = "vkCreateCommandBuffer failed (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState( + VkDevice device, + const VkDynamicDsStateCreateInfo* pCreateInfo, + VkDynamicDsState* pState) +{ + PreCreateDynamicDepthStencilState(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState); + + PostCreateDynamicDepthStencilState(device, pState, result); + + return result; +} + +void PreCreateCommandBuffer( + VkDevice device, + const VkCmdBufferCreateInfo* pCreateInfo, + VkCmdBuffer* pCmdBuffer) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + + if(pCmdBuffer == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer"); + return; + } + if((*pCmdBuffer) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer"); + return; + } +} + +void PostCreateCommandBuffer( + VkDevice device, + VkCmdBuffer* pCmdBuffer, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkDevice device, is null pointer"); return; } if(pCmdBuffer == nullptr) { - char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer"); + return; + } + if((*pCmdBuffer) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); return; } } -VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, - const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer) +VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer( + VkDevice device, + const VkCmdBufferCreateInfo* pCreateInfo, + VkCmdBuffer* pCmdBuffer) { - PreCreateCommandBuffer(device, pCreateInfo); - VkResult result = device_dispatch_table(device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer); - PostCreateCommandBuffer(result, pCmdBuffer); + PreCreateCommandBuffer(device, pCreateInfo, pCmdBuffer); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer); + + PostCreateCommandBuffer(device, pCmdBuffer, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) +void PreBeginCommandBuffer( + VkCmdBuffer cmdBuffer, + const VkCmdBufferBeginInfo* pBeginInfo) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pBeginInfo == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer"); + return; + } + if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator"); + return; + } + if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags)) + { + std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +void PostBeginCommandBuffer( + VkCmdBuffer cmdBuffer, + VkResult result) { - char str[1024]; - if (!pBeginInfo) { - sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) { - sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(result != VK_SUCCESS) + { + std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - VkResult result = device_dispatch_table(cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo); +} + +VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer( + VkCmdBuffer cmdBuffer, + const VkCmdBufferBeginInfo* pBeginInfo) +{ + PreBeginCommandBuffer(cmdBuffer, pBeginInfo); + VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo); + + PostBeginCommandBuffer(cmdBuffer, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer) +void PreEndCommandBuffer( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostEndCommandBuffer( + VkCmdBuffer cmdBuffer, + VkResult result) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer( + VkCmdBuffer cmdBuffer) { + PreEndCommandBuffer(cmdBuffer); + VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer); + + PostEndCommandBuffer(cmdBuffer, result); - VkResult result = device_dispatch_table(cmdBuffer)->EndCommandBuffer(cmdBuffer); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer) +void PreResetCommandBuffer( + VkCmdBuffer cmdBuffer) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostResetCommandBuffer( + VkCmdBuffer cmdBuffer, + VkResult result) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer( + VkCmdBuffer cmdBuffer) +{ + PreResetCommandBuffer(cmdBuffer); + VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer); + + PostResetCommandBuffer(cmdBuffer, result); - VkResult result = device_dispatch_table(cmdBuffer)->ResetCommandBuffer(cmdBuffer); return result; } -VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) +void PreCmdBindPipeline( + VkCmdBuffer cmdBuffer) { - char str[1024]; - if (!validate_VkPipelineBindPoint(pipelineBindPoint)) { - sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline); } -VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state) +void PostCmdBindPipeline( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { - char str[1024]; - if (!validate_VkStateBindPoint(stateBindPoint)) { - sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || + pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator"); + return; + } + + if(pipeline == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindPipeline parameter, VkPipeline pipeline, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state); } -VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) +VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { - char str[1024]; - if (!validate_VkPipelineBindPoint(pipelineBindPoint)) { - sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + PreCmdBindPipeline(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline); + + PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline); +} + +void PreCmdBindDynamicStateObject( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdBindDynamicStateObject( + VkCmdBuffer cmdBuffer, + VkStateBindPoint stateBindPoint, + VkDynamicStateObject dynamicState) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(stateBindPoint < VK_STATE_BIND_POINT_BEGIN_RANGE || + stateBindPoint > VK_STATE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDynamicStateObject parameter, VkStateBindPoint stateBindPoint, is unrecognized enumerator"); + return; + } + + if(dynamicState == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDynamicStateObject parameter, VkDynamicStateObject dynamicState, is null pointer"); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject( + VkCmdBuffer cmdBuffer, + VkStateBindPoint stateBindPoint, + VkDynamicStateObject dynamicState) +{ + PreCmdBindDynamicStateObject(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState); + + PostCmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState); +} + +void PreCmdBindDescriptorSets( + VkCmdBuffer cmdBuffer, + const VkDescriptorSet* pDescriptorSets, + const uint32_t* pDynamicOffsets) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pDescriptorSets == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer"); + return; + } + if((*pDescriptorSets) == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer"); + return; + } + + if(pDynamicOffsets == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, const uint32_t* pDynamicOffsets, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); +} + +void PostCmdBindDescriptorSets( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + uint32_t dynamicOffsetCount) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || + pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator"); + return; + } + + if(layout == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindDescriptorSets parameter, VkPipelineLayout layout, is null pointer"); + return; + } + + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const VkDescriptorSet* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets) +{ + PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); + + PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount); +} + +void PreCmdBindIndexBuffer( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdBindIndexBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkIndexType indexType) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(buffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindIndexBuffer parameter, VkBuffer buffer, is null pointer"); + return; + } + + + if(indexType < VK_INDEX_TYPE_BEGIN_RANGE || + indexType > VK_INDEX_TYPE_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator"); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkIndexType indexType) +{ + PreCmdBindIndexBuffer(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType); + + PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType); +} + +void PreCmdBindVertexBuffers( + VkCmdBuffer cmdBuffer, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pBuffers == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer"); + return; + } + if((*pBuffers) == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer"); + return; + } + + if(pOffsets == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer"); + return; + } +} + +void PostCmdBindVertexBuffers( + VkCmdBuffer cmdBuffer, + uint32_t startBinding, + uint32_t bindingCount) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + } VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers( - VkCmdBuffer cmdBuffer, - uint32_t startBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets) + VkCmdBuffer cmdBuffer, + uint32_t startBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets) { - device_dispatch_table(cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets); + PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets); + + PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount); } -VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) +void PreCmdDraw( + VkCmdBuffer cmdBuffer) { - char str[1024]; - if (!validate_VkIndexType(indexType)) { - sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType); } -VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount) +void PostCmdDraw( + VkCmdBuffer cmdBuffer, + uint32_t firstVertex, + uint32_t vertexCount, + uint32_t firstInstance, + uint32_t instanceCount) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + + - device_dispatch_table(cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount); } -VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount) +VK_LAYER_EXPORT void VKAPI vkCmdDraw( + VkCmdBuffer cmdBuffer, + uint32_t firstVertex, + uint32_t vertexCount, + uint32_t firstInstance, + uint32_t instanceCount) { + PreCmdDraw(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount); + + PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount); +} - device_dispatch_table(cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount); +void PreCmdDrawIndexed( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } } -VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) +void PostCmdDrawIndexed( + VkCmdBuffer cmdBuffer, + uint32_t firstIndex, + uint32_t indexCount, + int32_t vertexOffset, + uint32_t firstInstance, + uint32_t instanceCount) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + + + - device_dispatch_table(cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride); } -VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) +VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed( + VkCmdBuffer cmdBuffer, + uint32_t firstIndex, + uint32_t indexCount, + int32_t vertexOffset, + uint32_t firstInstance, + uint32_t instanceCount) { + PreCmdDrawIndexed(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount); - device_dispatch_table(cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride); + PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount); } -VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) +void PreCmdDrawIndirect( + VkCmdBuffer cmdBuffer) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdDrawIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t count, + uint32_t stride) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(buffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndirect parameter, VkBuffer buffer, is null pointer"); + return; + } + + - device_dispatch_table(cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z); } -VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) +VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t count, + uint32_t stride) { + PreCmdDrawIndirect(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride); - device_dispatch_table(cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset); + PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride); } -VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) +void PreCmdDrawIndexedIndirect( + VkCmdBuffer cmdBuffer) { - char str[1024]; - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkbuffercopy(&pRegions[i])) { - sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions); } -VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) +void PostCmdDrawIndexedIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t count, + uint32_t stride) { - char str[1024]; - if (!validate_VkImageLayout(srcImageLayout)) { - sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - if (!validate_VkImageLayout(destImageLayout)) { - sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(buffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDrawIndexedIndirect parameter, VkBuffer buffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkimagecopy(&pRegions[i])) { - sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t count, + uint32_t stride) +{ + PreCmdDrawIndexedIndirect(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride); + + PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride); +} + +void PreCmdDispatch( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); } -VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) +void PostCmdDispatch( + VkCmdBuffer cmdBuffer, + uint32_t x, + uint32_t y, + uint32_t z) { - char str[1024]; - if (!validate_VkImageLayout(srcImageLayout)) { - sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - if (!validate_VkImageLayout(destImageLayout)) { - sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdDispatch( + VkCmdBuffer cmdBuffer, + uint32_t x, + uint32_t y, + uint32_t z) +{ + PreCmdDispatch(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z); + + PostCmdDispatch(cmdBuffer, x, y, z); +} + +void PreCmdDispatchIndirect( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkimageblit(&pRegions[i])) { - sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } +} + +void PostCmdDispatchIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - //TODO: Add additional check for limitation from header rev 96. - // VK_TEX_FILTER_NEAREST if the format that srcImage was created with is an integer-based format. - device_dispatch_table(cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter); + if(buffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdDispatchIndirect parameter, VkBuffer buffer, is null pointer"); + return; + } + +} + +VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect( + VkCmdBuffer cmdBuffer, + VkBuffer buffer, + VkDeviceSize offset) +{ + PreCmdDispatchIndirect(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset); + + PostCmdDispatchIndirect(cmdBuffer, buffer, offset); } -VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) +void PreCmdCopyBuffer( + VkCmdBuffer cmdBuffer, + const VkBufferCopy* pRegions) { - char str[1024]; - if (!validate_VkImageLayout(destImageLayout)) { - sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkbufferimagecopy(&pRegions[i])) { - sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions); } -VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) +void PostCmdCopyBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer srcBuffer, + VkBuffer destBuffer, + uint32_t regionCount) { - char str[1024]; - if (!validate_VkImageLayout(srcImageLayout)) { - sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkbufferimagecopy(&pRegions[i])) { - sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + if(srcBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBuffer parameter, VkBuffer srcBuffer, is null pointer"); + return; + } + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBuffer parameter, VkBuffer destBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions); + } -VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) +VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer srcBuffer, + VkBuffer destBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions) { + PreCmdCopyBuffer(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions); - device_dispatch_table(cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData); + PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount); } -VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) +void PreCmdCopyImage( + VkCmdBuffer cmdBuffer, + const VkImageCopy* pRegions) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } - device_dispatch_table(cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data); + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer"); + return; + } + if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator"); + return; + } + if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator"); + return; + } } -VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +void PostCmdCopyImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount) { - char str[1024]; - if (!validate_VkImageLayout(imageLayout)) { - sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < rangeCount; i++) { - if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) { - sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + if(srcImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImage srcImage, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges); + + if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator"); + return; + } + + if(destImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImage destImage, is null pointer"); + return; + } + + if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + destImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator"); + return; + } + } -VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +VK_LAYER_EXPORT void VKAPI vkCmdCopyImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions) { - char str[1024]; - if (!validate_VkImageLayout(imageLayout)) { - sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + PreCmdCopyImage(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); + + PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount); +} + +void PreCmdBlitImage( + VkCmdBuffer cmdBuffer, + const VkImageBlit* pRegions) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < rangeCount; i++) { - if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) { - sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer"); + return; + } + if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator"); + return; + } + if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator"); + return; } - device_dispatch_table(cmdBuffer)->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges); } -VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) +void PostCmdBlitImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount, + VkTexFilter filter) { - char str[1024]; - if (!validate_VkImageLayout(srcImageLayout)) { - sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - if (!validate_VkImageLayout(destImageLayout)) { - sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(srcImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImage srcImage, is null pointer"); + return; } - uint32_t i; - for (i = 0; i < regionCount; i++) { - if (!vk_validate_vkimageresolve(&pRegions[i])) { - sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - } + + if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator"); + return; } - device_dispatch_table(cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); + + if(destImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImage destImage, is null pointer"); + return; + } + + if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + destImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator"); + return; + } + + + if(filter < VK_TEX_FILTER_BEGIN_RANGE || + filter > VK_TEX_FILTER_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator"); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdBlitImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount, + const VkImageBlit* pRegions, + VkTexFilter filter) +{ + PreCmdBlitImage(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter); + + PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter); } -VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent) +void PreCmdCopyBufferToImage( + VkCmdBuffer cmdBuffer, + const VkBufferImageCopy* pRegions) { - char str[1024]; - if (!validate_VkPipeEvent(pipeEvent)) { - sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer"); + return; + } + if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator"); + return; } - device_dispatch_table(cmdBuffer)->CmdSetEvent(cmdBuffer, event, pipeEvent); } -VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent) +void PostCmdCopyBufferToImage( + VkCmdBuffer cmdBuffer, + VkBuffer srcBuffer, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount) { - char str[1024]; - if (!validate_VkPipeEvent(pipeEvent)) { - sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdResetEvent(cmdBuffer, event, pipeEvent); + + if(srcBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkBuffer srcBuffer, is null pointer"); + return; + } + + if(destImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkImage destImage, is null pointer"); + return; + } + + if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + destImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator"); + return; + } + } -VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers) +VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage( + VkCmdBuffer cmdBuffer, + VkBuffer srcBuffer, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions) { - device_dispatch_table(cmdBuffer)->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers); + PreCmdCopyBufferToImage(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions); + + PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount); } -VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers) +void PreCmdCopyImageToBuffer( + VkCmdBuffer cmdBuffer, + const VkBufferImageCopy* pRegions) { - device_dispatch_table(cmdBuffer)->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer"); + return; + } + if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator"); + return; + } } -VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags) +void PostCmdCopyImageToBuffer( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer destBuffer, + uint32_t regionCount) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(srcImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkImage srcImage, is null pointer"); + return; + } + + if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator"); + return; + } + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyImageToBuffer parameter, VkBuffer destBuffer, is null pointer"); + return; + } - device_dispatch_table(cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags); } -VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) +VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer destBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions) { + PreCmdCopyImageToBuffer(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions); - device_dispatch_table(cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot); + PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount); } -VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) +void PreCmdUpdateBuffer( + VkCmdBuffer cmdBuffer, + const uint32_t* pData) { + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } - device_dispatch_table(cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount); + if(pData == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer"); + return; + } } -VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) +void PostCmdUpdateBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize dataSize) { - char str[1024]; - if (!validate_VkTimestampType(timestampType)) { - sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset); + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdUpdateBuffer parameter, VkBuffer destBuffer, is null pointer"); + return; + } + + } -VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults( - VkCmdBuffer cmdBuffer, - VkQueryPool queryPool, - uint32_t startQuery, - uint32_t queryCount, - VkBuffer destBuffer, - VkDeviceSize destOffset, - VkDeviceSize destStride, - VkQueryResultFlags flags) +VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize dataSize, + const uint32_t* pData) { - device_dispatch_table(cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags); + PreCmdUpdateBuffer(cmdBuffer, pData); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData); + + PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize); } -VK_LAYER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData) +void PreCmdFillBuffer( + VkCmdBuffer cmdBuffer) { - char str[1024]; - if (!validate_VkPipelineBindPoint(pipelineBindPoint)) { - sprintf(str, "Parameter pipelineBindPoint to function CmdInitAtomicCounters has invalid value of %i.", (int)pipelineBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData); } -VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset) +void PostCmdFillBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize fillSize, + uint32_t data) { - char str[1024]; - if (!validate_VkPipelineBindPoint(pipelineBindPoint)) { - sprintf(str, "Parameter pipelineBindPoint to function CmdLoadAtomicCounters has invalid value of %i.", (int)pipelineBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdFillBuffer parameter, VkBuffer destBuffer, is null pointer"); + return; } - device_dispatch_table(cmdBuffer)->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset); + + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer( + VkCmdBuffer cmdBuffer, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize fillSize, + uint32_t data) +{ + PreCmdFillBuffer(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data); + + PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data); } -VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset) +void PreCmdClearColorImage( + VkCmdBuffer cmdBuffer, + const VkClearColor* pColor, + const VkImageSubresourceRange* pRanges) { - char str[1024]; - if (!validate_VkPipelineBindPoint(pipelineBindPoint)) { - sprintf(str, "Parameter pipelineBindPoint to function CmdSaveAtomicCounters has invalid value of %i.", (int)pipelineBindPoint); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pColor == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, const VkClearColor* pColor, is null pointer"); + return; + } + + if(pRanges == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer"); + return; + } + if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator"); + return; } - device_dispatch_table(cmdBuffer)->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset); } -VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer) +void PostCmdClearColorImage( + VkCmdBuffer cmdBuffer, + VkImage image, + VkImageLayout imageLayout, + uint32_t rangeCount) { - char str[1024]; - if (!pCreateInfo) { - sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFramebuffer is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(image == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, VkImage image, is null pointer"); + return; } - else if (!vk_validate_vkframebuffercreateinfo(pCreateInfo)) { - sprintf(str, "Parameter pCreateInfo to function CreateFramebuffer contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + + if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + imageLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator"); + return; } - VkResult result = device_dispatch_table(device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer); - return result; + } +VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage( + VkCmdBuffer cmdBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColor* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) +{ + PreCmdClearColorImage(cmdBuffer, pColor, pRanges); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges); -void PreCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo) + PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount); +} + +void PreCmdClearDepthStencil( + VkCmdBuffer cmdBuffer, + const VkImageSubresourceRange* pRanges) { - if(pCreateInfo == nullptr) + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkRenderPassCreateInfo* pCreateInfo, is "\ - "nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) + if(pRanges == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, const VkImageSubresourceRange* pRanges, is null pointer"); + return; + } + if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO "\ - "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (precondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator"); return; } +} - if(!vk_validate_vkrect(&pCreateInfo->renderArea)) +void PostCmdClearDepthStencil( + VkCmdBuffer cmdBuffer, + VkImage image, + VkImageLayout imageLayout, + float depth, + uint32_t stencil, + uint32_t rangeCount) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkRect pCreateInfo->renderArea, is invalid "\ - "(precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if(!vk_validate_vkextent2d(&pCreateInfo->extent)) + if(image == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkExtent2D pCreateInfo->extent, is invalid "\ - "(precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, VkImage image, is null pointer"); return; } - if(pCreateInfo->pColorFormats == nullptr) + if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + imageLayout > VK_IMAGE_LAYOUT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkFormat* pCreateInfo->pColorFormats, "\ - "is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdClearDepthStencil parameter, VkImageLayout imageLayout, is unrecognized enumerator"); return; } - for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i) + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencil( + VkCmdBuffer cmdBuffer, + VkImage image, + VkImageLayout imageLayout, + float depth, + uint32_t stencil, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) +{ + PreCmdClearDepthStencil(cmdBuffer, pRanges); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges); + + PostCmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount); +} + +void PreCmdResolveImage( + VkCmdBuffer cmdBuffer, + const VkImageResolve* pRegions) +{ + if(cmdBuffer == nullptr) { - if(!validate_VkFormat(pCreateInfo->pColorFormats[i])) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i << - "], is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } - /* - VkFormatProperties properties; - size_t size = sizeof(properties); - VkResult result = device_dispatch_table(device)->GetFormatInfo(device, pCreateInfo->pColorFormats[i], - VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties); - if(result != VK_SUCCESS) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i << - "], cannot be validated (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + if(pRegions == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer"); + return; + } + if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator"); + return; + } + if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || + pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator"); + return; + } +} - if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0)) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i << - "], contains unsupported format (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } - */ +void PostCmdResolveImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + if(srcImage == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImage srcImage, is null pointer"); + return; } - if(pCreateInfo->pColorLayouts == nullptr) + if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkImageLayout* pCreateInfo->pColorLayouts, "\ - "is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator"); return; } - for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i) + if(destImage == nullptr) { - if(!validate_VkImageLayout(pCreateInfo->pColorLayouts[i])) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pColorLayouts[" << i << - "], is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImage destImage, is null pointer"); + return; } - if(pCreateInfo->pColorLoadOps == nullptr) + if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + destImageLayout > VK_IMAGE_LAYOUT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, "\ - "is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator"); return; } - for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i) +} + +VK_LAYER_EXPORT void VKAPI vkCmdResolveImage( + VkCmdBuffer cmdBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage destImage, + VkImageLayout destImageLayout, + uint32_t regionCount, + const VkImageResolve* pRegions) +{ + PreCmdResolveImage(cmdBuffer, pRegions); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); + + PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount); +} + +void PreCmdSetEvent( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) { - if(!validate_VkAttachmentLoadOp(pCreateInfo->pColorLoadOps[i])) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pColorLoadOps[" << i << - "], is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } +} - if(pCreateInfo->pColorStoreOps == nullptr) +void PostCmdSetEvent( + VkCmdBuffer cmdBuffer, + VkEvent event, + VkPipeEvent pipeEvent) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, "\ - "is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i) + if(event == nullptr) { - if(!validate_VkAttachmentStoreOp(pCreateInfo->pColorStoreOps[i])) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pColorStoreOps[" << i << - "], is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSetEvent parameter, VkEvent event, is null pointer"); + return; } - if(pCreateInfo->pColorLoadClearValues == nullptr) + if(pipeEvent < VK_PIPE_EVENT_BEGIN_RANGE || + pipeEvent > VK_PIPE_EVENT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkClearColor* pCreateInfo->"\ - "pColorLoadClearValues, is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSetEvent parameter, VkPipeEvent pipeEvent, is unrecognized enumerator"); return; } +} - if(pCreateInfo->pColorStoreOps == nullptr) +VK_LAYER_EXPORT void VKAPI vkCmdSetEvent( + VkCmdBuffer cmdBuffer, + VkEvent event, + VkPipeEvent pipeEvent) +{ + PreCmdSetEvent(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, pipeEvent); + + PostCmdSetEvent(cmdBuffer, event, pipeEvent); +} + +void PreCmdResetEvent( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP* pCreateInfo->pColorStoreOps, "\ - "is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } +} - if(pCreateInfo->pColorLoadClearValues == nullptr) +void PostCmdResetEvent( + VkCmdBuffer cmdBuffer, + VkEvent event, + VkPipeEvent pipeEvent) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VK_CLEAR_COLOR* pCreateInfo->"\ - "pColorLoadClearValues, is nullptr (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i) + if(event == nullptr) { - if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i]))) - { - std::stringstream ss; - ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i << - "], is invalid (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str()); - continue; - } + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetEvent parameter, VkEvent event, is null pointer"); + return; } - if(!validate_VkFormat(pCreateInfo->depthStencilFormat)) + if(pipeEvent < VK_PIPE_EVENT_BEGIN_RANGE || + pipeEvent > VK_PIPE_EVENT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\ - "depthStencilFormat, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetEvent parameter, VkPipeEvent pipeEvent, is unrecognized enumerator"); return; } +} - /* - VkFormatProperties properties; - size_t size = sizeof(properties); - VkResult result = device_dispatch_table(device)->GetFormatInfo(device, pCreateInfo->depthStencilFormat, - VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties); - if(result != VK_SUCCESS) +VK_LAYER_EXPORT void VKAPI vkCmdResetEvent( + VkCmdBuffer cmdBuffer, + VkEvent event, + VkPipeEvent pipeEvent) +{ + PreCmdResetEvent(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, pipeEvent); + + PostCmdResetEvent(cmdBuffer, event, pipeEvent); +} + +void PreCmdWaitEvents( + VkCmdBuffer cmdBuffer, + const VkEvent* pEvents, + const void** ppMemBarriers) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\ - "depthStencilFormat, cannot be validated (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0)) + if(pEvents == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\ - "depthStencilFormat, contains unsupported format (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer"); return; } - */ + if((*pEvents) == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer"); + return; + } + + if(ppMemBarriers == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer"); + return; + } +} - if(!validate_VkImageLayout(pCreateInfo->depthStencilLayout)) +void PostCmdWaitEvents( + VkCmdBuffer cmdBuffer, + VkWaitEvent waitEvent, + uint32_t eventCount, + uint32_t memBarrierCount) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->"\ - "depthStencilLayout, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if(!validate_VkAttachmentLoadOp(pCreateInfo->depthLoadOp)) + if(waitEvent < VK_WAIT_EVENT_BEGIN_RANGE || + waitEvent > VK_WAIT_EVENT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\ - "depthLoadOp, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWaitEvents parameter, VkWaitEvent waitEvent, is unrecognized enumerator"); return; } - if(!validate_VkAttachmentStoreOp(pCreateInfo->depthStoreOp)) + +} + +VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents( + VkCmdBuffer cmdBuffer, + VkWaitEvent waitEvent, + uint32_t eventCount, + const VkEvent* pEvents, + uint32_t memBarrierCount, + const void** ppMemBarriers) +{ + PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers); + + PostCmdWaitEvents(cmdBuffer, waitEvent, eventCount, memBarrierCount); +} + +void PreCmdPipelineBarrier( + VkCmdBuffer cmdBuffer, + const VkPipeEvent* pPipeEvents, + const void** ppMemBarriers) +{ + if(cmdBuffer == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\ - "depthStoreOp, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if(!validate_VkAttachmentLoadOp(pCreateInfo->stencilLoadOp)) + if(pPipeEvents == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\ - "stencilLoadOp, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, const VkPipeEvent* pPipeEvents, is null pointer"); + return; + } + if((*pPipeEvents) < VK_PIPE_EVENT_BEGIN_RANGE || + (*pPipeEvents) > VK_PIPE_EVENT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, const VkPipeEvent* pPipeEvents, is unrecognized enumerator"); return; } - if(!validate_VkAttachmentStoreOp(pCreateInfo->stencilStoreOp)) + if(ppMemBarriers == nullptr) { - char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\ - "stencilStoreOp, is unrecognized (precondition)."; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer"); return; } } -void PostCreateRenderPass(VkResult result, VkRenderPass* pRenderPass) +void PostCmdPipelineBarrier( + VkCmdBuffer cmdBuffer, + VkWaitEvent waitEvent, + uint32_t pipeEventCount, + uint32_t memBarrierCount) { - if(result != VK_SUCCESS) + if(cmdBuffer == nullptr) { - // TODO: Spit out VkResult value. - char const str[] = "vkCreateRenderPass failed (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - if(pRenderPass == nullptr) + if(waitEvent < VK_WAIT_EVENT_BEGIN_RANGE || + waitEvent > VK_WAIT_EVENT_END_RANGE) { - char const str[] = "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is nullptr (postcondition)."; - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdPipelineBarrier parameter, VkWaitEvent waitEvent, is unrecognized enumerator"); return; } + + } -VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass) +VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier( + VkCmdBuffer cmdBuffer, + VkWaitEvent waitEvent, + uint32_t pipeEventCount, + const VkPipeEvent* pPipeEvents, + uint32_t memBarrierCount, + const void** ppMemBarriers) { - PreCreateRenderPass(device, pCreateInfo); - VkResult result = device_dispatch_table(device)->CreateRenderPass(device, pCreateInfo, pRenderPass); - PostCreateRenderPass(result, pRenderPass); - return result; + PreCmdPipelineBarrier(cmdBuffer, pPipeEvents, ppMemBarriers); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers); + + PostCmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, memBarrierCount); } -VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin) +void PreCmdBeginQuery( + VkCmdBuffer cmdBuffer) { - char str[1024]; - if (!pRenderPassBegin) { - sprintf(str, "Struct ptr parameter pRenderPassBegin to function CmdBeginRenderPass is NULL."); - layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - else if (!vk_validate_vkrenderpassbegin(pRenderPassBegin)) { - sprintf(str, "Parameter pRenderPassBegin to function CmdBeginRenderPass contains an invalid value."); - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); +} + +void PostCmdBeginQuery( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t slot, + VkQueryControlFlags flags) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(queryPool == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginQuery parameter, VkQueryPool queryPool, is null pointer"); + return; + } + + + if(!ValidateEnumerator((VkQueryControlFlagBits)flags)) + { + std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; } - device_dispatch_table(cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin); } -VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass) +VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t slot, + VkQueryControlFlags flags) { + PreCmdBeginQuery(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags); - device_dispatch_table(cmdBuffer)->CmdEndRenderPass(cmdBuffer, renderPass); + PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags); } -VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback( - VkInstance instance, - VkFlags msgFlags, - const PFN_vkDbgMsgCallback pfnMsgCallback, - void* pUserData, - VkDbgMsgCallback* pMsgCallback) +void PreCmdEndQuery( + VkCmdBuffer cmdBuffer) { - VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(instance); - return layer_create_msg_callback(instance, pTable, msgFlags, pfnMsgCallback, pUserData, pMsgCallback); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback( - VkInstance instance, - VkDbgMsgCallback msgCallback) +void PostCmdEndQuery( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t slot) { - VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(instance); - return layer_destroy_msg_callback(instance, pTable, msgCallback); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(queryPool == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndQuery parameter, VkQueryPool queryPool, is null pointer"); + return; + } + } -VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker) +VK_LAYER_EXPORT void VKAPI vkCmdEndQuery( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t slot) { - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) cmdBuffer; - if (!deviceExtMap[pDisp].debug_marker_enabled) { - char const str[] = "Attempt to use CmdDbgMarkerBegin but extension disabled!"; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + PreCmdEndQuery(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot); + + PostCmdEndQuery(cmdBuffer, queryPool, slot); +} + +void PreCmdResetQueryPool( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer"); return; } - debug_marker_dispatch_table(cmdBuffer)->CmdDbgMarkerBegin(cmdBuffer, pMarker); } -VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer) +void PostCmdResetQueryPool( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount) { - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) cmdBuffer; - if (!deviceExtMap[pDisp].debug_marker_enabled) { - char const str[] = "Attempt to use CmdDbgMarkerEnd but extension disabled!"; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(queryPool == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdResetQueryPool parameter, VkQueryPool queryPool, is null pointer"); return; } - debug_marker_dispatch_table(cmdBuffer)->CmdDbgMarkerEnd(cmdBuffer); + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount) +{ + PreCmdResetQueryPool(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount); + + PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount); } -VkResult VKAPI vkDbgSetObjectTag(VkDevice device, VkObjectType objType, VkObject object, size_t tagSize, const void* pTag) +void PreCmdWriteTimestamp( + VkCmdBuffer cmdBuffer) { - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; - if (!deviceExtMap[pDisp].debug_marker_enabled) { - char const str[] = "Attempt to use DbgSetObjectTag but extension disabled!"; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - return VK_ERROR_UNAVAILABLE; + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; } - debug_marker_dispatch_table(device)->DbgSetObjectTag(device, objType, object, tagSize, pTag); } -VkResult VKAPI vkDbgSetObjectName(VkDevice device, VkObjectType objType, VkObject object, size_t nameSize, const char* pName) +void PostCmdWriteTimestamp( + VkCmdBuffer cmdBuffer, + VkTimestampType timestampType, + VkBuffer destBuffer, + VkDeviceSize destOffset) { - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; - if (!deviceExtMap[pDisp].debug_marker_enabled) { - char const str[] = "Attempt to use DbgSetObjectName but extension disabled!"; - layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); - return VK_ERROR_UNAVAILABLE; + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE || + timestampType > VK_TIMESTAMP_TYPE_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator"); + return; + } + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdWriteTimestamp parameter, VkBuffer destBuffer, is null pointer"); + return; } - debug_marker_dispatch_table(device)->DbgSetObjectName(device, objType, object, nameSize, pName); + } -VK_LAYER_EXPORT VkResult VKAPI vkCreateSwapChainWSI(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain) +VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp( + VkCmdBuffer cmdBuffer, + VkTimestampType timestampType, + VkBuffer destBuffer, + VkDeviceSize destOffset) { - VkResult result = device_dispatch_table(device)->CreateSwapChainWSI(device, pCreateInfo, pSwapChain); - return result; + PreCmdWriteTimestamp(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset); + + PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset); } -VK_LAYER_EXPORT VkResult VKAPI vkDestroySwapChainWSI(VkSwapChainWSI swapChain) +void PreCmdCopyQueryPoolResults( + VkCmdBuffer cmdBuffer) { - VkResult result = device_dispatch_table(swapChain)->DestroySwapChainWSI(swapChain); - return result; + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } } -VK_LAYER_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData) +void PostCmdCopyQueryPoolResults( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize destStride, + VkQueryResultFlags flags) { - VkResult result = device_dispatch_table(swapChain)->GetSwapChainInfoWSI(swapChain, infoType, pDataSize, pData); + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(queryPool == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyQueryPoolResults parameter, VkQueryPool queryPool, is null pointer"); + return; + } + + + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdCopyQueryPoolResults parameter, VkBuffer destBuffer, is null pointer"); + return; + } + + + + if(!ValidateEnumerator((VkQueryResultFlagBits)flags)) + { + std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags); + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults( + VkCmdBuffer cmdBuffer, + VkQueryPool queryPool, + uint32_t startQuery, + uint32_t queryCount, + VkBuffer destBuffer, + VkDeviceSize destOffset, + VkDeviceSize destStride, + VkQueryResultFlags flags) +{ + PreCmdCopyQueryPoolResults(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags); + + PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags); +} + +void PreCmdInitAtomicCounters( + VkCmdBuffer cmdBuffer, + const uint32_t* pData) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdInitAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pData == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdInitAtomicCounters parameter, const uint32_t* pData, is null pointer"); + return; + } +} + +void PostCmdInitAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdInitAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || + pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdInitAtomicCounters parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator"); + return; + } + + +} + +VK_LAYER_EXPORT void VKAPI vkCmdInitAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount, + const uint32_t* pData) +{ + PreCmdInitAtomicCounters(cmdBuffer, pData); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData); + + PostCmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount); +} + +void PreCmdLoadAtomicCounters( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdLoadAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdLoadAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount, + VkBuffer srcBuffer, + VkDeviceSize srcOffset) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdLoadAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || + pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdLoadAtomicCounters parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator"); + return; + } + + + + if(srcBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdLoadAtomicCounters parameter, VkBuffer srcBuffer, is null pointer"); + return; + } + +} + +VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount, + VkBuffer srcBuffer, + VkDeviceSize srcOffset) +{ + PreCmdLoadAtomicCounters(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset); + + PostCmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset); +} + +void PreCmdSaveAtomicCounters( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSaveAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdSaveAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount, + VkBuffer destBuffer, + VkDeviceSize destOffset) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSaveAtomicCounters parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || + pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSaveAtomicCounters parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator"); + return; + } + + + + if(destBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdSaveAtomicCounters parameter, VkBuffer destBuffer, is null pointer"); + return; + } + +} + +VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters( + VkCmdBuffer cmdBuffer, + VkPipelineBindPoint pipelineBindPoint, + uint32_t startCounter, + uint32_t counterCount, + VkBuffer destBuffer, + VkDeviceSize destOffset) +{ + PreCmdSaveAtomicCounters(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset); + + PostCmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset); +} + +void PreCreateFramebuffer( + VkDevice device, + const VkFramebufferCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorAttachments == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, const VkColorAttachmentBindInfo* pCreateInfo->pColorAttachments, is null pointer"); + return; + } + if(pCreateInfo->pColorAttachments->view == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkColorAttachmentView pCreateInfo->pColorAttachments->view, is null pointer"); + return; + } + if(pCreateInfo->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + pCreateInfo->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pColorAttachments->layout, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pDepthStencilAttachment == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, const VkDepthStencilBindInfo* pCreateInfo->pDepthStencilAttachment, is null pointer"); + return; + } + if(pCreateInfo->pDepthStencilAttachment->view == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkDepthStencilView pCreateInfo->pDepthStencilAttachment->view, is null pointer"); + return; + } + if(pCreateInfo->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + pCreateInfo->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pDepthStencilAttachment->layout, is unrecognized enumerator"); + return; + } +} + +void PostCreateFramebuffer( + VkDevice device, + VkFramebuffer* pFramebuffer, + VkResult result) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkDevice device, is null pointer"); + return; + } + + if(pFramebuffer == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer"); + return; + } + if((*pFramebuffer) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer( + VkDevice device, + const VkFramebufferCreateInfo* pCreateInfo, + VkFramebuffer* pFramebuffer) +{ + PreCreateFramebuffer(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer); + + PostCreateFramebuffer(device, pFramebuffer, result); + return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueuePresentWSI(VkQueue queue, const VkPresentInfoWSI* pPresentInfo) +void PreCreateRenderPass( + VkDevice device, + const VkRenderPassCreateInfo* pCreateInfo) +{ + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkDevice device, is null pointer"); + return; + } + + if(pCreateInfo == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer"); + return; + } + if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE || + pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorFormats == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is null pointer"); + return; + } + if((*pCreateInfo->pColorFormats) < VK_FORMAT_BEGIN_RANGE || + (*pCreateInfo->pColorFormats) > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorLayouts == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is null pointer"); + return; + } + if((*pCreateInfo->pColorLayouts) < VK_IMAGE_LAYOUT_BEGIN_RANGE || + (*pCreateInfo->pColorLayouts) > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorLoadOps == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is null pointer"); + return; + } + if((*pCreateInfo->pColorLoadOps) < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || + (*pCreateInfo->pColorLoadOps) > VK_ATTACHMENT_LOAD_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorStoreOps == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is null pointer"); + return; + } + if((*pCreateInfo->pColorStoreOps) < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || + (*pCreateInfo->pColorStoreOps) > VK_ATTACHMENT_STORE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is unrecognized enumerator"); + return; + } + if(pCreateInfo->pColorLoadClearValues == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, const VkClearColor* pCreateInfo->pColorLoadClearValues, is null pointer"); + return; + } + if(pCreateInfo->depthStencilFormat < VK_FORMAT_BEGIN_RANGE || + pCreateInfo->depthStencilFormat > VK_FORMAT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkFormat pCreateInfo->depthStencilFormat, is unrecognized enumerator"); + return; + } + if(pCreateInfo->depthStencilLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + pCreateInfo->depthStencilLayout > VK_IMAGE_LAYOUT_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->depthStencilLayout, is unrecognized enumerator"); + return; + } + if(pCreateInfo->depthLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || + pCreateInfo->depthLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->depthLoadOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->depthStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || + pCreateInfo->depthStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->depthStoreOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || + pCreateInfo->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->stencilLoadOp, is unrecognized enumerator"); + return; + } + if(pCreateInfo->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || + pCreateInfo->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->stencilStoreOp, is unrecognized enumerator"); + return; + } +} + +void PostCreateRenderPass( + VkDevice device, + VkRenderPass* pRenderPass, + VkResult result) { - VkResult result = device_dispatch_table(queue)->QueuePresentWSI(queue, pPresentInfo); + if(device == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkDevice device, is null pointer"); + return; + } + + if(pRenderPass == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer"); + return; + } + if((*pRenderPass) == nullptr) + { + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer"); + return; + } + + if(result != VK_SUCCESS) + { + std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result); + log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); + return; + } +} + +VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass( + VkDevice device, + const VkRenderPassCreateInfo* pCreateInfo, + VkRenderPass* pRenderPass) +{ + PreCreateRenderPass(device, pCreateInfo); + VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass); + + PostCreateRenderPass(device, pRenderPass, result); + return result; } -static inline void* layer_intercept_proc(const char *name) +void PreCmdBeginRenderPass( + VkCmdBuffer cmdBuffer, + const VkRenderPassBegin* pRenderPassBegin) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(pRenderPassBegin == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer"); + return; + } + if(pRenderPassBegin->renderPass == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginRenderPass parameter, VkRenderPass pRenderPassBegin->renderPass, is null pointer"); + return; + } + if(pRenderPassBegin->framebuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginRenderPass parameter, VkFramebuffer pRenderPassBegin->framebuffer, is null pointer"); + return; + } +} + +void PostCmdBeginRenderPass( + VkCmdBuffer cmdBuffer) { - if (!name || name[0] != 'v' || name[1] != 'k') + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass( + VkCmdBuffer cmdBuffer, + const VkRenderPassBegin* pRenderPassBegin) +{ + PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin); + + PostCmdBeginRenderPass(cmdBuffer); +} + +void PreCmdEndRenderPass( + VkCmdBuffer cmdBuffer) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } +} + +void PostCmdEndRenderPass( + VkCmdBuffer cmdBuffer, + VkRenderPass renderPass) +{ + if(cmdBuffer == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer"); + return; + } + + if(renderPass == nullptr) + { + log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", + "vkCmdEndRenderPass parameter, VkRenderPass renderPass, is null pointer"); + return; + } +} + +VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass( + VkCmdBuffer cmdBuffer, + VkRenderPass renderPass) +{ + PreCmdEndRenderPass(cmdBuffer); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer, renderPass); + + PostCmdEndRenderPass(cmdBuffer, renderPass); +} + +VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName) +{ + if (device == NULL) { return NULL; + } + + /* loader uses this to force layer initialization; device object is wrapped */ + if (!strcmp(funcName, "vkGetDeviceProcAddr")) { + initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device); + return (void*) vkGetDeviceProcAddr; + } - name += 2; - if (!strcmp(name, "DestroyDevice")) + if (!strcmp(funcName, "vkDestroyDevice")) return (void*) vkDestroyDevice; - if (!strcmp(name, "GetDeviceQueue")) + if (!strcmp(funcName, "vkGetDeviceQueue")) return (void*) vkGetDeviceQueue; - if (!strcmp(name, "QueueSubmit")) + if (!strcmp(funcName, "vkQueueSubmit")) return (void*) vkQueueSubmit; - if (!strcmp(name, "QueueWaitIdle")) + if (!strcmp(funcName, "vkQueueWaitIdle")) return (void*) vkQueueWaitIdle; - if (!strcmp(name, "DeviceWaitIdle")) + if (!strcmp(funcName, "vkDeviceWaitIdle")) return (void*) vkDeviceWaitIdle; - if (!strcmp(name, "AllocMemory")) + if (!strcmp(funcName, "vkAllocMemory")) return (void*) vkAllocMemory; - if (!strcmp(name, "FreeMemory")) + if (!strcmp(funcName, "vkFreeMemory")) return (void*) vkFreeMemory; - if (!strcmp(name, "MapMemory")) + if (!strcmp(funcName, "vkMapMemory")) return (void*) vkMapMemory; - if (!strcmp(name, "UnmapMemory")) + if (!strcmp(funcName, "vkUnmapMemory")) return (void*) vkUnmapMemory; - if (!strcmp(name, "FlushMappedMemoryRanges")) + if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) return (void*) vkFlushMappedMemoryRanges; - if (!strcmp(name, "InvalidateMappedMemoryRanges")) + if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) return (void*) vkInvalidateMappedMemoryRanges; - if (!strcmp(name, "DestroyObject")) + if (!strcmp(funcName, "vkDestroyObject")) return (void*) vkDestroyObject; - if (!strcmp(name, "GetObjectMemoryRequirements")) + if (!strcmp(funcName, "vkGetObjectMemoryRequirements")) return (void*) vkGetObjectMemoryRequirements; - if (!strcmp(name, "CreateFence")) + if (!strcmp(funcName, "vkCreateFence")) return (void*) vkCreateFence; - if (!strcmp(name, "ResetFences")) + if (!strcmp(funcName, "vkResetFences")) return (void*) vkResetFences; - if (!strcmp(name, "GetFenceStatus")) + if (!strcmp(funcName, "vkGetFenceStatus")) return (void*) vkGetFenceStatus; - if (!strcmp(name, "WaitForFences")) + if (!strcmp(funcName, "vkWaitForFences")) return (void*) vkWaitForFences; - if (!strcmp(name, "CreateSemaphore")) + if (!strcmp(funcName, "vkCreateSemaphore")) return (void*) vkCreateSemaphore; - if (!strcmp(name, "QueueSignalSemaphore")) + if (!strcmp(funcName, "vkQueueSignalSemaphore")) return (void*) vkQueueSignalSemaphore; - if (!strcmp(name, "QueueWaitSemaphore")) + if (!strcmp(funcName, "vkQueueWaitSemaphore")) return (void*) vkQueueWaitSemaphore; - if (!strcmp(name, "CreateEvent")) + if (!strcmp(funcName, "vkCreateEvent")) return (void*) vkCreateEvent; - if (!strcmp(name, "GetEventStatus")) + if (!strcmp(funcName, "vkGetEventStatus")) return (void*) vkGetEventStatus; - if (!strcmp(name, "SetEvent")) + if (!strcmp(funcName, "vkSetEvent")) return (void*) vkSetEvent; - if (!strcmp(name, "ResetEvent")) + if (!strcmp(funcName, "vkResetEvent")) return (void*) vkResetEvent; - if (!strcmp(name, "CreateQueryPool")) + if (!strcmp(funcName, "vkCreateQueryPool")) return (void*) vkCreateQueryPool; - if (!strcmp(name, "GetQueryPoolResults")) + if (!strcmp(funcName, "vkGetQueryPoolResults")) return (void*) vkGetQueryPoolResults; - if (!strcmp(name, "CreateBuffer")) + if (!strcmp(funcName, "vkCreateBuffer")) return (void*) vkCreateBuffer; - if (!strcmp(name, "CreateBufferView")) + if (!strcmp(funcName, "vkCreateBufferView")) return (void*) vkCreateBufferView; - if (!strcmp(name, "CreateImage")) + if (!strcmp(funcName, "vkCreateImage")) return (void*) vkCreateImage; - if (!strcmp(name, "GetImageSubresourceLayout")) + if (!strcmp(funcName, "vkGetImageSubresourceLayout")) return (void*) vkGetImageSubresourceLayout; - if (!strcmp(name, "CreateImageView")) + if (!strcmp(funcName, "vkCreateImageView")) return (void*) vkCreateImageView; - if (!strcmp(name, "CreateColorAttachmentView")) + if (!strcmp(funcName, "vkCreateColorAttachmentView")) return (void*) vkCreateColorAttachmentView; - if (!strcmp(name, "CreateDepthStencilView")) + if (!strcmp(funcName, "vkCreateDepthStencilView")) return (void*) vkCreateDepthStencilView; - if (!strcmp(name, "CreateShader")) + if (!strcmp(funcName, "vkCreateShader")) return (void*) vkCreateShader; - if (!strcmp(name, "CreateGraphicsPipeline")) + if (!strcmp(funcName, "vkCreateGraphicsPipeline")) return (void*) vkCreateGraphicsPipeline; - if (!strcmp(name, "CreateGraphicsPipelineDerivative")) + if (!strcmp(funcName, "vkCreateGraphicsPipelineDerivative")) return (void*) vkCreateGraphicsPipelineDerivative; - if (!strcmp(name, "CreateComputePipeline")) + if (!strcmp(funcName, "vkCreateComputePipeline")) return (void*) vkCreateComputePipeline; - if (!strcmp(name, "StorePipeline")) + if (!strcmp(funcName, "vkStorePipeline")) return (void*) vkStorePipeline; - if (!strcmp(name, "LoadPipeline")) + if (!strcmp(funcName, "vkLoadPipeline")) return (void*) vkLoadPipeline; - if (!strcmp(name, "LoadPipelineDerivative")) + if (!strcmp(funcName, "vkLoadPipelineDerivative")) return (void*) vkLoadPipelineDerivative; - if (!strcmp(name, "CreatePipelineLayout")) + if (!strcmp(funcName, "vkCreatePipelineLayout")) return (void*) vkCreatePipelineLayout; - if (!strcmp(name, "CreateSampler")) + if (!strcmp(funcName, "vkCreateSampler")) return (void*) vkCreateSampler; - if (!strcmp(name, "CreateDescriptorSetLayout")) + if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) return (void*) vkCreateDescriptorSetLayout; - if (!strcmp(name, "CreateDescriptorPool")) + if (!strcmp(funcName, "vkCreateDescriptorPool")) return (void*) vkCreateDescriptorPool; - if (!strcmp(name, "ResetDescriptorPool")) + if (!strcmp(funcName, "vkResetDescriptorPool")) return (void*) vkResetDescriptorPool; - if (!strcmp(name, "AllocDescriptorSets")) + if (!strcmp(funcName, "vkAllocDescriptorSets")) return (void*) vkAllocDescriptorSets; - if (!strcmp(name, "CreateDynamicViewportState")) + if (!strcmp(funcName, "vkCreateDynamicViewportState")) return (void*) vkCreateDynamicViewportState; - if (!strcmp(name, "CreateDynamicRasterState")) + if (!strcmp(funcName, "vkCreateDynamicRasterState")) return (void*) vkCreateDynamicRasterState; - if (!strcmp(name, "CreateDynamicColorBlendState")) + if (!strcmp(funcName, "vkCreateDynamicColorBlendState")) return (void*) vkCreateDynamicColorBlendState; - if (!strcmp(name, "CreateDynamicDepthStencilState")) + if (!strcmp(funcName, "vkCreateDynamicDepthStencilState")) return (void*) vkCreateDynamicDepthStencilState; - if (!strcmp(name, "CreateCommandBuffer")) + if (!strcmp(funcName, "vkCreateCommandBuffer")) return (void*) vkCreateCommandBuffer; - if (!strcmp(name, "BeginCommandBuffer")) + if (!strcmp(funcName, "vkBeginCommandBuffer")) return (void*) vkBeginCommandBuffer; - if (!strcmp(name, "EndCommandBuffer")) + if (!strcmp(funcName, "vkEndCommandBuffer")) return (void*) vkEndCommandBuffer; - if (!strcmp(name, "ResetCommandBuffer")) + if (!strcmp(funcName, "vkResetCommandBuffer")) return (void*) vkResetCommandBuffer; - if (!strcmp(name, "GetGlobalExtensionProperties")) - return (void*) vkGetGlobalExtensionProperties; - if (!strcmp(name, "GetGlobalExtensionCount")) - return (void*) vkGetGlobalExtensionCount; - if (!strcmp(name, "CmdBindPipeline")) + if (!strcmp(funcName, "vkCmdBindPipeline")) return (void*) vkCmdBindPipeline; - if (!strcmp(name, "CmdBindDynamicStateObject")) + if (!strcmp(funcName, "vkCmdBindDynamicStateObject")) return (void*) vkCmdBindDynamicStateObject; - if (!strcmp(name, "CmdBindDescriptorSets")) + if (!strcmp(funcName, "vkCmdBindDescriptorSets")) return (void*) vkCmdBindDescriptorSets; - if (!strcmp(name, "CmdBindVertexBuffers")) + if (!strcmp(funcName, "vkCmdBindVertexBuffers")) return (void*) vkCmdBindVertexBuffers; - if (!strcmp(name, "CmdBindIndexBuffer")) + if (!strcmp(funcName, "vkCmdBindIndexBuffer")) return (void*) vkCmdBindIndexBuffer; - if (!strcmp(name, "CmdDraw")) + if (!strcmp(funcName, "vkCmdDraw")) return (void*) vkCmdDraw; - if (!strcmp(name, "CmdDrawIndexed")) + if (!strcmp(funcName, "vkCmdDrawIndexed")) return (void*) vkCmdDrawIndexed; - if (!strcmp(name, "CmdDrawIndirect")) + if (!strcmp(funcName, "vkCmdDrawIndirect")) return (void*) vkCmdDrawIndirect; - if (!strcmp(name, "CmdDrawIndexedIndirect")) + if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) return (void*) vkCmdDrawIndexedIndirect; - if (!strcmp(name, "CmdDispatch")) + if (!strcmp(funcName, "vkCmdDispatch")) return (void*) vkCmdDispatch; - if (!strcmp(name, "CmdDispatchIndirect")) + if (!strcmp(funcName, "vkCmdDispatchIndirect")) return (void*) vkCmdDispatchIndirect; - if (!strcmp(name, "CmdCopyBuffer")) + if (!strcmp(funcName, "vkCmdCopyBuffer")) return (void*) vkCmdCopyBuffer; - if (!strcmp(name, "CmdCopyImage")) + if (!strcmp(funcName, "vkCmdCopyImage")) return (void*) vkCmdCopyImage; - if (!strcmp(name, "CmdBlitImage")) + if (!strcmp(funcName, "vkCmdBlitImage")) return (void*) vkCmdBlitImage; - if (!strcmp(name, "CmdCopyBufferToImage")) + if (!strcmp(funcName, "vkCmdCopyBufferToImage")) return (void*) vkCmdCopyBufferToImage; - if (!strcmp(name, "CmdCopyImageToBuffer")) + if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) return (void*) vkCmdCopyImageToBuffer; - if (!strcmp(name, "CmdUpdateBuffer")) + if (!strcmp(funcName, "vkCmdUpdateBuffer")) return (void*) vkCmdUpdateBuffer; - if (!strcmp(name, "CmdFillBuffer")) + if (!strcmp(funcName, "vkCmdFillBuffer")) return (void*) vkCmdFillBuffer; - if (!strcmp(name, "CmdClearColorImage")) + if (!strcmp(funcName, "vkCmdClearColorImage")) return (void*) vkCmdClearColorImage; - if (!strcmp(name, "CmdClearDepthStencil")) + if (!strcmp(funcName, "vkCmdClearDepthStencil")) return (void*) vkCmdClearDepthStencil; - if (!strcmp(name, "CmdResolveImage")) + if (!strcmp(funcName, "vkCmdResolveImage")) return (void*) vkCmdResolveImage; - if (!strcmp(name, "CmdSetEvent")) + if (!strcmp(funcName, "vkCmdSetEvent")) return (void*) vkCmdSetEvent; - if (!strcmp(name, "CmdResetEvent")) + if (!strcmp(funcName, "vkCmdResetEvent")) return (void*) vkCmdResetEvent; - if (!strcmp(name, "CmdWaitEvents")) + if (!strcmp(funcName, "vkCmdWaitEvents")) return (void*) vkCmdWaitEvents; - if (!strcmp(name, "CmdPipelineBarrier")) + if (!strcmp(funcName, "vkCmdPipelineBarrier")) return (void*) vkCmdPipelineBarrier; - if (!strcmp(name, "CmdBeginQuery")) + if (!strcmp(funcName, "vkCmdBeginQuery")) return (void*) vkCmdBeginQuery; - if (!strcmp(name, "CmdEndQuery")) + if (!strcmp(funcName, "vkCmdEndQuery")) return (void*) vkCmdEndQuery; - if (!strcmp(name, "CmdResetQueryPool")) + if (!strcmp(funcName, "vkCmdResetQueryPool")) return (void*) vkCmdResetQueryPool; - if (!strcmp(name, "CmdWriteTimestamp")) + if (!strcmp(funcName, "vkCmdWriteTimestamp")) return (void*) vkCmdWriteTimestamp; - if (!strcmp(name, "CmdCopyQueryPoolResults")) + if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) return (void*) vkCmdCopyQueryPoolResults; - if (!strcmp(name, "CmdInitAtomicCounters")) + if (!strcmp(funcName, "vkCmdInitAtomicCounters")) return (void*) vkCmdInitAtomicCounters; - if (!strcmp(name, "CmdLoadAtomicCounters")) + if (!strcmp(funcName, "vkCmdLoadAtomicCounters")) return (void*) vkCmdLoadAtomicCounters; - if (!strcmp(name, "CmdSaveAtomicCounters")) + if (!strcmp(funcName, "vkCmdSaveAtomicCounters")) return (void*) vkCmdSaveAtomicCounters; - if (!strcmp(name, "CreateFramebuffer")) + if (!strcmp(funcName, "vkCreateFramebuffer")) return (void*) vkCreateFramebuffer; - if (!strcmp(name, "CreateRenderPass")) + if (!strcmp(funcName, "vkCreateRenderPass")) return (void*) vkCreateRenderPass; - if (!strcmp(name, "CmdBeginRenderPass")) + if (!strcmp(funcName, "vkCmdBeginRenderPass")) return (void*) vkCmdBeginRenderPass; - if (!strcmp(name, "CmdEndRenderPass")) + if (!strcmp(funcName, "vkCmdEndRenderPass")) return (void*) vkCmdEndRenderPass; + if (!strcmp(funcName, "vkGetGlobalExtensionCount")) + return (void*) vkGetGlobalExtensionCount; + if (!strcmp(funcName, "vkGetGlobalExtensionProperties")) + return (void*) vkGetGlobalExtensionProperties; - return NULL; -} - -static inline void* layer_intercept_instance_proc(const char *name) -{ - if (!name || name[0] != 'v' || name[1] != 'k') - return NULL; - - name += 2; - if (!strcmp(name, "CreateInstance")) - return (void*) vkCreateInstance; - if (!strcmp(name, "DestroyInstance")) - return (void*) vkDestroyInstance; - if (!strcmp(name, "CreateDevice")) - return (void*) vkCreateDevice; - if (!strcmp(name, "GetPhysicalDeviceFormatInfo")) - return (void*) vkGetPhysicalDeviceFormatInfo; - if (!strcmp(name, "GetPhysicalDeviceExtensionProperties")) - return (void*) vkGetPhysicalDeviceExtensionProperties; - if (!strcmp(name, "GetPhysicalDeviceExtensionCount")) - return (void*) vkGetPhysicalDeviceExtensionCount; - - return NULL; -} - -VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName) -{ - void* addr; - if (device == NULL) { - return NULL; - } - - loader_platform_thread_once(&initOnce, initParamChecker); - - /* loader uses this to force layer initialization; device object is wrapped */ - if (!strcmp(funcName, "vkGetDeviceProcAddr")) { - initDeviceTable((const VkBaseLayerObject *) device); - return (void*) vkGetDeviceProcAddr; - } - - addr = layer_intercept_proc(funcName); - if (addr) { - return addr; - } - - VkLayerDispatchTable *pDisp = device_dispatch_table(device); - if (deviceExtMap.size() == 0 || deviceExtMap[pDisp].wsi_lunarg_enabled) { - if (!strcmp(funcName, "vkCreateSwapChainWSI")) - return (void*) vkCreateSwapChainWSI; - if (!strcmp(funcName, "vkDestroySwapChainWSI")) - return (void*) vkDestroySwapChainWSI; - if (!strcmp(funcName, "vkGetSwapChainInfoWSI")) - return (void*) vkGetSwapChainInfoWSI; - if (!strcmp(funcName, "vkQueuePresentWSI")) - return (void*) vkQueuePresentWSI; - } - if (deviceExtMap.size() == 0 || deviceExtMap[pDisp].debug_marker_enabled) - { - if (!strcmp(funcName, "vkCmdDbgMarkerBegin")) - return (void*) vkCmdDbgMarkerBegin; - if (!strcmp(funcName, "vkCmdDbgMarkerEnd")) - return (void*) vkCmdDbgMarkerEnd; - if (!strcmp(funcName, "vkDbgSetObjectTag")) - return (void*) vkDbgSetObjectTag; - if (!strcmp(funcName, "vkDbgSetObjectName")) - return (void*) vkDbgSetObjectName; - } - { - if (pDisp->GetDeviceProcAddr == NULL) + if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL) return NULL; - return pDisp->GetDeviceProcAddr(device, funcName); + return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName); } } VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName) { - void *fptr; - void* addr; if (instance == NULL) { return NULL; } - loader_platform_thread_once(&initOnce, initParamChecker); - /* loader uses this to force layer initialization; instance object is wrapped */ if (!strcmp(funcName, "vkGetInstanceProcAddr")) { - initInstanceTable((const VkBaseLayerObject *) instance); - return (void*) vkGetInstanceProcAddr; + initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance); + return (void *) vkGetInstanceProcAddr; } - addr = layer_intercept_instance_proc(funcName); - if (addr) { - return addr; - } + if (!strcmp(funcName, "vkCreateInstance")) + return (void*) vkCreateInstance; + if (!strcmp(funcName, "vkDestroyInstance")) + return (void*) vkDestroyInstance; + if (!strcmp(funcName, "vkCreateDevice")) + return (void*) vkCreateDevice; + if (!strcmp(funcName, "vkEnumeratePhysicalDevices")) + return (void*) vkEnumeratePhysicalDevices; + if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionCount")) + return (void*) vkGetPhysicalDeviceExtensionCount; + if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties")) + return (void*) vkGetPhysicalDeviceExtensionProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceProperties")) + return (void*) vkGetPhysicalDeviceProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures")) + return (void*) vkGetPhysicalDeviceFeatures; + if (!strcmp(funcName, "vkGetPhysicalDeviceFormatInfo")) + return (void*) vkGetPhysicalDeviceFormatInfo; + if (!strcmp(funcName, "vkGetPhysicalDeviceLimits")) + return (void*) vkGetPhysicalDeviceLimits; - fptr = msg_callback_get_proc_addr(funcName); - if (fptr) + layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); + void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName); + if(fptr) return fptr; - VkLayerInstanceDispatchTable* pTable = instance_dispatch_table(instance); - if (pTable->GetInstanceProcAddr == NULL) - return NULL; - return pTable->GetInstanceProcAddr(instance, funcName); + { + if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL) + return NULL; + return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName); + } } |
