aboutsummaryrefslogtreecommitdiff
path: root/src/vulkan/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vulkan/device.h')
-rw-r--r--src/vulkan/device.h31
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;