Merge vulkan-cts-1.0 to vulkan-cts-1.0-dev
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / vktTestCase.cpp
index 1e6a659..42c6532 100644 (file)
@@ -4,28 +4,17 @@
  *
  * Copyright (c) 2015 Google Inc.
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
- * The above copyright notice(s) and this permission notice shall be
- * included in all copies or substantial portions of the Materials.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * The Materials are Confidential Information as defined by the
- * Khronos Membership Agreement until designated non-confidential by
- * Khronos, at which point this condition clause shall be removed.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  *
  *//*!
  * \file
@@ -84,9 +73,9 @@ Move<VkDevice> createDefaultDevice (const InstanceInterface& vki, VkPhysicalDevi
        deviceInfo.pNext                                                = DE_NULL;
        deviceInfo.queueCreateInfoCount                 = 1u;
        deviceInfo.pQueueCreateInfos                    = &queueInfo;
-       deviceInfo.enabledExtensionNameCount    = 0u;
+       deviceInfo.enabledExtensionCount                = 0u;
        deviceInfo.ppEnabledExtensionNames              = DE_NULL;
-       deviceInfo.enabledLayerNameCount                = 0u;
+       deviceInfo.enabledLayerCount                    = 0u;
        deviceInfo.ppEnabledLayerNames                  = DE_NULL;
        deviceInfo.pEnabledFeatures                             = &enabledFeatures;
 
@@ -96,33 +85,35 @@ Move<VkDevice> createDefaultDevice (const InstanceInterface& vki, VkPhysicalDevi
 class DefaultDevice
 {
 public:
-                                                                       DefaultDevice                                   (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine);
-                                                                       ~DefaultDevice                                  (void);
+                                                                               DefaultDevice                                   (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine);
+                                                                               ~DefaultDevice                                  (void);
 
-       VkInstance                                              getInstance                                             (void) const    { return *m_instance;                                   }
-       const InstanceInterface&                getInstanceInterface                    (void) const    { return m_instanceInterface;                   }
+       VkInstance                                                      getInstance                                             (void) const    { return *m_instance;                                   }
+       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;                             }
-       const VkPhysicalDeviceProperties& getDeviceProperties                   (void) const    { return m_deviceProperties;                    }
+       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;                             }
+       const VkPhysicalDeviceProperties&       getDeviceProperties                             (void) const    { return m_deviceProperties;                    }
 
-       deUint32                                                getUniversalQueueFamilyIndex    (void) const    { return m_universalQueueFamilyIndex;   }
-       VkQueue                                                 getUniversalQueue                               (void) const;
+       deUint32                                                        getUniversalQueueFamilyIndex    (void) const    { return m_universalQueueFamilyIndex;   }
+       VkQueue                                                         getUniversalQueue                               (void) const;
 
 private:
-       const Unique<VkInstance>                m_instance;
-       const InstanceDriver                    m_instanceInterface;
+       static VkPhysicalDeviceFeatures         filterDefaultDeviceFeatures             (const VkPhysicalDeviceFeatures& deviceFeatures);
+
+       const Unique<VkInstance>                        m_instance;
+       const InstanceDriver                            m_instanceInterface;
 
-       const VkPhysicalDevice                  m_physicalDevice;
+       const VkPhysicalDevice                          m_physicalDevice;
 
-       const deUint32                                  m_universalQueueFamilyIndex;
-       const VkPhysicalDeviceFeatures  m_deviceFeatures;
+       const deUint32                                          m_universalQueueFamilyIndex;
+       const VkPhysicalDeviceFeatures          m_deviceFeatures;
        const VkPhysicalDeviceProperties        m_deviceProperties;
 
-       const Unique<VkDevice>                  m_device;
-       const DeviceDriver                              m_deviceInterface;
+       const Unique<VkDevice>                          m_device;
+       const DeviceDriver                                      m_deviceInterface;
 };
 
 DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine)
@@ -130,7 +121,7 @@ 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_deviceFeatures                              (getPhysicalDeviceFeatures(m_instanceInterface, m_physicalDevice)) // \note All supported features are enabled
+       , m_deviceFeatures                              (filterDefaultDeviceFeatures(getPhysicalDeviceFeatures(m_instanceInterface, m_physicalDevice)))
        , m_deviceProperties                    (getPhysicalDeviceProperties(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)
@@ -148,6 +139,16 @@ VkQueue DefaultDevice::getUniversalQueue (void) const
        return queue;
 }
 
+VkPhysicalDeviceFeatures DefaultDevice::filterDefaultDeviceFeatures (const VkPhysicalDeviceFeatures& deviceFeatures)
+{
+       VkPhysicalDeviceFeatures enabledDeviceFeatures = deviceFeatures;
+
+       // Disable robustness by default, as it has an impact on performance on some HW.
+       enabledDeviceFeatures.robustBufferAccess = false;
+
+       return enabledDeviceFeatures;
+}
+
 // Allocator utilities
 
 vk::Allocator* createAllocator (DefaultDevice* device)