const VkInstance instance = context.getInstance();
const InstanceDriver instanceDriver (platformInterface, instance);
const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
- const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex();
- const deUint32 queueCount = 1;
- const deUint32 queueIndex = 0;
- const float queuePriority = 1.0f;
- const VkDeviceQueueCreateInfo deviceQueueCreateInfo =
+
+ // Check if VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT flag can be used.
+ {
+ VkPhysicalDeviceProtectedMemoryFeatures protectedFeatures;
+ protectedFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
+ protectedFeatures.pNext = DE_NULL;
+
+ VkPhysicalDeviceFeatures2 deviceFeatures;
+ deviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+ deviceFeatures.pNext = &protectedFeatures;
+
+ instanceDriver.getPhysicalDeviceFeatures2(physicalDevice, &deviceFeatures);
+ if (!protectedFeatures.protectedMemory)
+ {
+ TCU_THROW(NotSupportedError, "protectedMemory feature is not supported, no queue creation flags available");
+ }
+ }
+
+ const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex();
+ const deUint32 queueCount = 1;
+ const deUint32 queueIndex = 0;
+ const float queuePriority = 1.0f;
+ const VkDeviceQueueCreateInfo deviceQueueCreateInfo =
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType;
DE_NULL, // const void* pNext;
queueCount, // deUint32 queueCount;
&queuePriority, // const float* pQueuePriorities;
};
- const VkDeviceCreateInfo deviceCreateInfo =
+ VkPhysicalDeviceProtectedMemoryFeatures protectedFeatures =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, // VkStructureType sType;
+ DE_NULL, // void* pNext;
+ VK_TRUE // VkBool32 protectedMemory;
+ };
+
+ VkPhysicalDeviceFeatures emptyDeviceFeatures;
+ deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+ const VkPhysicalDeviceFeatures2 deviceFeatures =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, // VkStructureType sType;
+ &protectedFeatures, // void* pNext;
+ emptyDeviceFeatures // VkPhysicalDeviceFeatures features;
+ };
+
+ const VkDeviceCreateInfo deviceCreateInfo =
{
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
+ &deviceFeatures, // const void* pNext;
(VkDeviceCreateFlags)0u, // VkDeviceCreateFlags flags;
1, // deUint32 queueCreateInfoCount;
&deviceQueueCreateInfo, // const VkDeviceQueueCreateInfo* pQueueCreateInfos;
DE_NULL, // const char* const* ppEnabledExtensionNames;
DE_NULL, // const VkPhysicalDeviceFeatures* pEnabledFeatures;
};
- const VkDeviceQueueInfo2 deviceQueueInfo2 =
+ const VkDeviceQueueInfo2 deviceQueueInfo2 =
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2, // VkStructureType sType;
DE_NULL, // const void* pNext;