layers: Use extension helper in chassis CreateDevice
Change-Id: Id391807e4f4264fe66f9aef57afa4e7ed971cbb1
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index 66c1ebe..9ee1e44 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -233,6 +233,12 @@
: desc_update_template(update_template), create_info(*pCreateInfo) {}
};
+class LAYER_PHYS_DEV_PROPERTIES {
+public:
+ VkPhysicalDeviceProperties properties;
+ std::vector<VkQueueFamilyProperties> queue_family_properties;
+};
+
// Layer chassis validation object base class definition
class ValidationObject {
public:
@@ -250,6 +256,7 @@
VkInstance instance = VK_NULL_HANDLE;
VkPhysicalDevice physical_device = VK_NULL_HANDLE;
VkDevice device = VK_NULL_HANDLE;
+ LAYER_PHYS_DEV_PROPERTIES phys_dev_properties = {};
std::vector<ValidationObject*> object_dispatch;
LayerObjectTypeId container_type;
@@ -269,7 +276,6 @@
// Reverse map display handles
std::unordered_map<VkDisplayKHR, uint64_t> display_id_reverse_mapping;
std::unordered_map<uint64_t, std::unique_ptr<TEMPLATE_STATE>> desc_template_map;
- std::unordered_set<std::string> device_extension_set;
struct SubpassesUsageStates {
std::unordered_set<uint32_t> subpasses_using_color_attachment;
std::unordered_set<uint32_t> subpasses_using_depthstencil_attachment;
@@ -428,7 +434,7 @@
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) {
auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- if (!ApiParentExtensionEnabled(funcName, layer_data->device_extension_set)) {
+ if (!ApiParentExtensionEnabled(funcName, layer_data->device_extensions.device_extension_set)) {
return nullptr;
}
const auto &item = name_to_funcptr_map.find(funcName);
@@ -617,11 +623,18 @@
}
auto device_interceptor = GetLayerDataPtr(get_dispatch_key(*pDevice), layer_data_map);
+
+ // Get physical device limits for device
+ instance_interceptor->instance_dispatch_table.GetPhysicalDeviceProperties(
+ gpu, &(device_interceptor->phys_dev_properties.properties));
+
+ // Setup the validation tables based on the application API version from the instance and the capabilities of the device driver
+ uint32_t effective_api_version = std::min(device_interceptor->api_version, instance_interceptor->api_version);
+ device_interceptor->api_version = device_interceptor->device_extensions.InitFromDeviceCreateInfo(
+ &instance_interceptor->instance_extensions, effective_api_version, pCreateInfo);
+
layer_init_device_dispatch_table(*pDevice, &device_interceptor->device_dispatch_table, fpGetDeviceProcAddr);
- // Save pCreateInfo device extension list for GetDeviceProcAddr()
- for (uint32_t extn = 0; extn < pCreateInfo->enabledExtensionCount; extn++) {
- device_interceptor->device_extension_set.insert(pCreateInfo->ppEnabledExtensionNames[extn]);
- }
+
device_interceptor->device = *pDevice;
device_interceptor->physical_device = gpu;
device_interceptor->instance = instance_interceptor->instance;