diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-05-30 12:02:17 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-05-31 14:26:36 -0600 |
| commit | 1256d00dbd8a7ce0c8b344e355631e415c683028 (patch) | |
| tree | 11f808df2b1d0a3d545ba36d6168695144073ce0 /layers/parameter_validation.cpp | |
| parent | 05d4445143866d220ccdd2d04586261d1c588481 (diff) | |
| download | usermoji-1256d00dbd8a7ce0c8b344e355631e415c683028.tar.xz | |
Layers: Add code-gen'd calls to val exts
Modified PV code gen to insert and make calls to validate
extension dependencies.
Change-Id: I90103b16d36fb868b32df796b1dae7741dfcba34
Diffstat (limited to 'layers/parameter_validation.cpp')
| -rw-r--r-- | layers/parameter_validation.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 70705359..7e74d1e5 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -81,7 +81,7 @@ struct instance_layer_data { VkDebugReportCallbackCreateInfoEXT *tmp_dbg_create_infos = nullptr; VkDebugReportCallbackEXT *tmp_callbacks = nullptr; InstanceExtensions extensions = {}; - + std::unordered_set<std::string> enabled_extensions; VkLayerInstanceDispatchTable dispatch_table = {}; }; @@ -94,6 +94,7 @@ struct layer_data { VkPhysicalDevice physical_device = VK_NULL_HANDLE; VkDevice device = VK_NULL_HANDLE; DeviceExtensions enables; + std::unordered_set<std::string> enabled_extensions; VkLayerDispatchTable dispatch_table = {}; }; @@ -109,6 +110,8 @@ static void init_parameter_validation(instance_layer_data *my_data, const VkAllo layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_parameter_validation"); } + + VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, @@ -144,6 +147,16 @@ static const VkLayerProperties global_layer = { "VK_LAYER_LUNARG_parameter_validation", VK_LAYER_API_VERSION, 1, "LunarG Validation Layer", }; +bool ValidateRequiredExtensions(std::string api_name, const std::vector<std::string> required_extensions) { + bool skip = false; + + for (auto reqd_ext = required_extensions.begin(); reqd_ext != required_extensions.end(); reqd_ext++) { + // Insert depency checks here + } + + return skip; +} + static const int MaxParamCheckerStringLength = 256; static bool validate_string(debug_report_data *report_data, const char *apiName, const ParameterName &stringName, @@ -248,6 +261,11 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreat auto my_instance_data = GetLayerDataPtr(get_dispatch_key(*pInstance), instance_layer_data_map); assert(my_instance_data != nullptr); + // Save enabled instance extension names for validation extension APIs + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + my_instance_data->enabled_extensions.emplace(pCreateInfo->ppEnabledExtensionNames[i]); + } + layer_init_instance_dispatch_table(*pInstance, &my_instance_data->dispatch_table, fpGetInstanceProcAddr); my_instance_data->instance = *pInstance; my_instance_data->report_data = @@ -607,6 +625,11 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice, con my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); layer_init_device_dispatch_table(*pDevice, &my_device_data->dispatch_table, fpGetDeviceProcAddr); + // Save enabled instance extension names for validation extension APIs + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + my_instance_data->enabled_extensions.emplace(pCreateInfo->ppEnabledExtensionNames[i]); + } + my_device_data->enables.InitFromDeviceCreateInfo(pCreateInfo); storeCreateDeviceData(*pDevice, pCreateInfo); |
