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
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp
index 7070535..7e74d1e 100644
--- a/layers/parameter_validation.cpp
+++ b/layers/parameter_validation.cpp
@@ -81,7 +81,7 @@
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 @@
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 @@
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 @@
"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 @@
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 @@
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);