1#ifndef _VKTSPARSERESOURCESBASE_HPP 2#define _VKTSPARSERESOURCESBASE_HPP 3/*------------------------------------------------------------------------ 4 * Vulkan Conformance Tests 5 * ------------------------ 6 * 7 * Copyright (c) 2016 The Khronos Group Inc. 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file vktSparseResourcesBase.hpp 23 * \brief Sparse Resources Base Instance 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuTestCase.hpp" 28#include "vktTestCaseUtil.hpp" 29 30#include "vkDefs.hpp" 31#include "vkMemUtil.hpp" 32#include "vkPlatform.hpp" 33#include "vkRef.hpp" 34#include "vkTypeUtil.hpp" 35 36#include "deUniquePtr.hpp" 37#include "deStringUtil.hpp" 38 39#include <map> 40#include <vector> 41 42namespace vkt 43{ 44namespace sparse 45{ 46 47enum 48{ 49 NO_MATCH_FOUND = ~((deUint32)0) 50}; 51 52struct Queue 53{ 54 vk::VkQueue queueHandle; 55 deUint32 queueFamilyIndex; 56}; 57 58struct QueueRequirements 59{ 60 QueueRequirements(const vk::VkQueueFlags qFlags, const deUint32 qCount) 61 : queueFlags(qFlags) 62 , queueCount(qCount) 63 {} 64 65 vk::VkQueueFlags queueFlags; 66 deUint32 queueCount; 67}; 68 69typedef std::vector<QueueRequirements> QueueRequirementsVec; 70 71class SparseResourcesBaseInstance : public TestInstance 72{ 73public: 74 SparseResourcesBaseInstance (Context &context); 75 76protected: 77 78 typedef std::map<vk::VkQueueFlags, std::vector<Queue> > QueuesMap; 79 typedef std::vector<vk::VkQueueFamilyProperties> QueueFamilyPropertiesVec; 80 typedef vk::Move<vk::VkDevice> DevicePtr; 81 82 bool createDeviceSupportingQueues (const QueueRequirementsVec& queueRequirements); 83 84 const Queue& getQueue (const vk::VkQueueFlags queueFlags, 85 const deUint32 queueIndex); 86 87 deUint32 findMatchingMemoryType (const vk::VkPhysicalDeviceMemoryProperties& deviceMemoryProperties, 88 const vk::VkMemoryRequirements& objectMemoryRequirements, 89 const vk::MemoryRequirement& memoryRequirement) const; 90 DevicePtr m_logicalDevice; 91 92private: 93 94 deUint32 findMatchingQueueFamilyIndex (const QueueFamilyPropertiesVec& queueFamilyProperties, 95 const vk::VkQueueFlags queueFlags) const; 96 QueuesMap m_queues; 97}; 98 99} // sparse 100} // vkt 101 102#endif // _VKTSPARSERESOURCESBASE_HPP 103