Add vkt::Context::getDeviceFeatures()
authorPyry Haulos <phaulos@google.com>
Tue, 10 Nov 2015 21:18:45 +0000 (13:18 -0800)
committerPyry Haulos <phaulos@google.com>
Tue, 10 Nov 2015 21:18:45 +0000 (13:18 -0800)
Change-Id: I996c78061621aa08f54a24a4bce1e2e846a61e21

external/vulkancts/framework/vulkan/vkQueryUtil.cpp
external/vulkancts/framework/vulkan/vkQueryUtil.hpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/modules/vulkan/vktTestCase.hpp

index 5c903e6..ade0c54 100644 (file)
@@ -78,6 +78,16 @@ vector<VkQueueFamilyProperties> getPhysicalDeviceQueueFamilyProperties (const In
        return properties;
 }
 
+VkPhysicalDeviceFeatures getPhysicalDeviceFeatures (const InstanceInterface& vk, VkPhysicalDevice physicalDevice)
+{
+       VkPhysicalDeviceFeatures        features;
+
+       deMemset(&features, 0, sizeof(features));
+
+       VK_CHECK(vk.getPhysicalDeviceFeatures(physicalDevice, &features));
+       return features;
+}
+
 VkPhysicalDeviceMemoryProperties getPhysicalDeviceMemoryProperties (const InstanceInterface& vk, VkPhysicalDevice physicalDevice)
 {
        VkPhysicalDeviceMemoryProperties        properties;
index b576a9d..8cecc1f 100644 (file)
@@ -43,6 +43,7 @@ namespace vk
 
 std::vector<VkPhysicalDevice>                  enumeratePhysicalDevices                                (const InstanceInterface& vk, VkInstance instance);
 std::vector<VkQueueFamilyProperties>   getPhysicalDeviceQueueFamilyProperties  (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
+VkPhysicalDeviceFeatures                               getPhysicalDeviceFeatures                               (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
 VkPhysicalDeviceMemoryProperties               getPhysicalDeviceMemoryProperties               (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
 
 VkMemoryRequirements                                   getBufferMemoryRequirements                             (const DeviceInterface& vk, VkDevice device, VkBuffer buffer);
index b813f23..39d9bad 100644 (file)
@@ -64,37 +64,28 @@ static deUint32 findQueueFamilyIndexWithCaps (const InstanceInterface& vkInstanc
        TCU_THROW(NotSupportedError, "No matching queue found");
 }
 
-// \todo [2015-09-28 pyry] Refactor using Move<>
-
-struct DeviceCreateInfoHelper
+Move<VkDevice> createDefaultDevice (const InstanceInterface& vki, VkPhysicalDevice physicalDevice, deUint32 queueIndex, const VkPhysicalDeviceFeatures& enabledFeatures)
 {
-       VkPhysicalDeviceFeatures        enabledFeatures;
        VkDeviceQueueCreateInfo         queueInfo;
        VkDeviceCreateInfo                      deviceInfo;
 
-       DeviceCreateInfoHelper (deUint32 queueIndex)
-       {
-               deMemset(&enabledFeatures,      0, sizeof(enabledFeatures));
-               deMemset(&queueInfo,            0, sizeof(queueInfo));
-               deMemset(&deviceInfo,           0, sizeof(deviceInfo));
-
-               // \todo [2015-07-09 pyry] What's the policy for enabling features?
-               //  * Enable all supported by default, and expose that to test cases
-               //  * More limited enabled set could be used for verifying that tests behave correctly
-
-               queueInfo.sType                                         = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
-               queueInfo.pNext                                         = DE_NULL;
-               queueInfo.queueFamilyIndex                      = queueIndex;
-               queueInfo.queueCount                            = 1u;
-
-               deviceInfo.sType                                        = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
-               deviceInfo.pNext                                        = DE_NULL;
-               deviceInfo.queueRecordCount                     = 1u;
-               deviceInfo.pRequestedQueues                     = &queueInfo;
-               deviceInfo.extensionCount                       = 0u;
-               deviceInfo.ppEnabledExtensionNames      = DE_NULL;
-               deviceInfo.pEnabledFeatures                     = &enabledFeatures;
-       }
+       deMemset(&queueInfo,    0, sizeof(queueInfo));
+       deMemset(&deviceInfo,   0, sizeof(deviceInfo));
+
+       queueInfo.sType                                         = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
+       queueInfo.pNext                                         = DE_NULL;
+       queueInfo.queueFamilyIndex                      = queueIndex;
+       queueInfo.queueCount                            = 1u;
+
+       deviceInfo.sType                                        = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
+       deviceInfo.pNext                                        = DE_NULL;
+       deviceInfo.queueRecordCount                     = 1u;
+       deviceInfo.pRequestedQueues                     = &queueInfo;
+       deviceInfo.extensionCount                       = 0u;
+       deviceInfo.ppEnabledExtensionNames      = DE_NULL;
+       deviceInfo.pEnabledFeatures                     = &enabledFeatures;
+
+       return createDevice(vki, physicalDevice, &deviceInfo);
 };
 
 class DefaultDevice
@@ -107,7 +98,7 @@ public:
        const InstanceInterface&                getInstanceInterface                    (void) const    { return m_instanceInterface;                   }
 
        VkPhysicalDevice                                getPhysicalDevice                               (void) const    { return m_physicalDevice;                              }
-
+       const VkPhysicalDeviceFeatures& getDeviceFeatures                               (void) const    { return m_deviceFeatures;                              }
        VkDevice                                                getDevice                                               (void) const    { return *m_device;                                             }
        const DeviceInterface&                  getDeviceInterface                              (void) const    { return m_deviceInterface;                             }
 
@@ -121,7 +112,7 @@ private:
        const VkPhysicalDevice                  m_physicalDevice;
 
        const deUint32                                  m_universalQueueFamilyIndex;
-       const DeviceCreateInfoHelper    m_deviceCreateInfo;
+       const VkPhysicalDeviceFeatures  m_deviceFeatures;
 
        const Unique<VkDevice>                  m_device;
        const DeviceDriver                              m_deviceInterface;
@@ -132,8 +123,8 @@ DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::Co
        , m_instanceInterface                   (vkPlatform, *m_instance)
        , m_physicalDevice                              (chooseDevice(m_instanceInterface, *m_instance, cmdLine))
        , m_universalQueueFamilyIndex   (findQueueFamilyIndexWithCaps(m_instanceInterface, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT|VK_QUEUE_COMPUTE_BIT))
-       , m_deviceCreateInfo                    (m_universalQueueFamilyIndex)
-       , m_device                                              (createDevice(m_instanceInterface, m_physicalDevice, &m_deviceCreateInfo.deviceInfo))
+       , m_deviceFeatures                              (getPhysicalDeviceFeatures(m_instanceInterface, m_physicalDevice)) // \note All supported features are enabled
+       , m_device                                              (createDefaultDevice(m_instanceInterface, m_physicalDevice, m_universalQueueFamilyIndex, m_deviceFeatures))
        , m_deviceInterface                             (m_instanceInterface, *m_device)
 {
 }
@@ -176,14 +167,15 @@ Context::~Context (void)
 {
 }
 
-vk::VkInstance                                 Context::getInstance                                    (void) const { return m_device->getInstance();                                  }
-const vk::InstanceInterface&   Context::getInstanceInterface                   (void) const { return m_device->getInstanceInterface();                 }
-vk::VkPhysicalDevice                   Context::getPhysicalDevice                              (void) const { return m_device->getPhysicalDevice();                    }
-vk::VkDevice                                   Context::getDevice                                              (void) const { return m_device->getDevice();                                    }
-const vk::DeviceInterface&             Context::getDeviceInterface                             (void) const { return m_device->getDeviceInterface();                   }
-deUint32                                               Context::getUniversalQueueFamilyIndex   (void) const { return m_device->getUniversalQueueFamilyIndex(); }
-vk::VkQueue                                            Context::getUniversalQueue                              (void) const { return m_device->getUniversalQueue();                    }
-vk::Allocator&                                 Context::getDefaultAllocator                    (void) const { return *m_allocator;                                                     }
+vk::VkInstance                                         Context::getInstance                                    (void) const { return m_device->getInstance();                                  }
+const vk::InstanceInterface&           Context::getInstanceInterface                   (void) const { return m_device->getInstanceInterface();                 }
+vk::VkPhysicalDevice                           Context::getPhysicalDevice                              (void) const { return m_device->getPhysicalDevice();                    }
+const vk::VkPhysicalDeviceFeatures&    Context::getDeviceFeatures                              (void) const { return m_device->getDeviceFeatures();                    }
+vk::VkDevice                                           Context::getDevice                                              (void) const { return m_device->getDevice();                                    }
+const vk::DeviceInterface&                     Context::getDeviceInterface                             (void) const { return m_device->getDeviceInterface();                   }
+deUint32                                                       Context::getUniversalQueueFamilyIndex   (void) const { return m_device->getUniversalQueueFamilyIndex(); }
+vk::VkQueue                                                    Context::getUniversalQueue                              (void) const { return m_device->getUniversalQueue();                    }
+vk::Allocator&                                         Context::getDefaultAllocator                    (void) const { return *m_allocator;                                                             }
 
 // TestCase
 
index e9b5659..0c3e996 100644 (file)
@@ -74,6 +74,7 @@ public:
        vk::VkInstance                                                          getInstance                                             (void) const;
        const vk::InstanceInterface&                            getInstanceInterface                    (void) const;
        vk::VkPhysicalDevice                                            getPhysicalDevice                               (void) const;
+       const vk::VkPhysicalDeviceFeatures&                     getDeviceFeatures                               (void) const;
        vk::VkDevice                                                            getDevice                                               (void) const;
        const vk::DeviceInterface&                                      getDeviceInterface                              (void) const;
        deUint32                                                                        getUniversalQueueFamilyIndex    (void) const;