diff options
Diffstat (limited to 'src/vulkan/device.h')
-rw-r--r-- | src/vulkan/device.h | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/vulkan/device.h b/src/vulkan/device.h index 700e6e8..8cd3ba1 100644 --- a/src/vulkan/device.h +++ b/src/vulkan/device.h @@ -30,7 +30,8 @@ namespace amber { namespace vulkan { struct VulkanPtrs { -#include "vk-wrappers.h" // NOLINT(build/include) +#include "vk-wrappers-1-0.h" // NOLINT(build/include) +#include "vk-wrappers-1-1.h" // NOLINT(build/include) }; /// Wrapper around a Vulkan Device object. @@ -41,19 +42,19 @@ class Device { uint32_t queue_family_index, VkDevice device, VkQueue queue); - ~Device(); + virtual ~Device(); Result Initialize(PFN_vkGetInstanceProcAddr getInstanceProcAddr, Delegate* delegate, const std::vector<std::string>& required_features, - const std::vector<std::string>& required_extensions, + const std::vector<std::string>& required_device_extensions, const VkPhysicalDeviceFeatures& available_features, const VkPhysicalDeviceFeatures2KHR& available_features2, const std::vector<std::string>& available_extensions); /// Returns true if |format| and the |buffer|s buffer type combination is /// supported by the physical device. - bool IsFormatSupportedByPhysicalDevice(const Format& format, Buffer* buffer); + bool IsFormatSupportedByPhysicalDevice(const Format& format, BufferType type); VkDevice GetVkDevice() const { return device_; } VkQueue GetVkQueue() const { return queue_; } @@ -67,23 +68,37 @@ class Device { bool IsDescriptorSetInBounds(uint32_t descriptor_set) const; /// Returns true if the memory at |memory_type_index| has |flags| set. - bool HasMemoryFlags(uint32_t memory_type_index, - const VkMemoryPropertyFlags flags) const; + virtual bool HasMemoryFlags(uint32_t memory_type_index, + const VkMemoryPropertyFlags flags) const; /// Returns true if the memory at |memory_type_index| is host accessible. bool IsMemoryHostAccessible(uint32_t memory_type_index) const; - /// Returns true if the memory at |memory_type_index| is host corherent. + /// Returns true if the memory at |memory_type_index| is host coherent. bool IsMemoryHostCoherent(uint32_t memory_type_index) const; /// Returns the pointers to the Vulkan API methods. - const VulkanPtrs* GetPtrs() const { return &ptrs_; } + virtual const VulkanPtrs* GetPtrs() const { return &ptrs_; } + + /// Returns true if the required subgroup size is supported for given stage + bool IsRequiredSubgroupSizeSupported( + const ShaderType type, + const uint32_t required_subgroup_size) const; + /// Returns the minimum required subgroup size or 0 if subgroup size control + /// is not supported. + uint32_t GetMinSubgroupSize() const; + /// Returns the maximum required subgroup size or 0 if subgroup size control + /// is not supported. + uint32_t GetMaxSubgroupSize() const; private: Result LoadVulkanPointers(PFN_vkGetInstanceProcAddr, Delegate* delegate); + bool SupportsApiVersion(uint32_t major, uint32_t minor, uint32_t patch); VkInstance instance_ = VK_NULL_HANDLE; VkPhysicalDevice physical_device_ = VK_NULL_HANDLE; VkPhysicalDeviceProperties physical_device_properties_; VkPhysicalDeviceMemoryProperties physical_memory_properties_; + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT + subgroup_size_control_properties_; VkDevice device_ = VK_NULL_HANDLE; VkQueue queue_ = VK_NULL_HANDLE; uint32_t queue_family_index_ = 0; |