Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 31 additions & 4 deletions test_conformance/common/vulkan_wrapper/vulkan_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,30 @@ VulkanDevice::VulkanDevice(
vkCreateDevice(physicalDevice, &vkDeviceCreateInfo, NULL, &m_vkDevice);
}

VkPhysicalDeviceCoherentMemoryFeaturesAMD coherentFeatures = {};
coherentFeatures.sType =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD;

VkPhysicalDeviceFeatures2 enabledFeatures = {};
enabledFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
enabledFeatures.pNext = &coherentFeatures;

vkGetPhysicalDeviceFeatures2(physicalDevice, &enabledFeatures);

// Build device-level memory type list with only legally usable types
auto &memTypeList = physicalDevice.getMemoryTypeList();
for (size_t i = 0; i < memTypeList.size(); i++)
{
const VulkanMemoryType &mt = memTypeList[i];
VulkanMemoryTypeProperty flags = mt.getMemoryTypeProperty();
if ((flags & VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD)
&& !coherentFeatures.deviceCoherentMemory)
{
continue; // feature not enabled, skip
}
m_memoryTypeList.add(mt);
}

for (uint32_t qfIdx = 0;
qfIdx < (uint32_t)m_physicalDevice.getQueueFamilyList().size();
qfIdx++)
Expand Down Expand Up @@ -776,6 +800,11 @@ VulkanQueue &VulkanDevice::getQueue(const VulkanQueueFamily &queueFamily,

VulkanDevice::operator VkDevice() const { return m_vkDevice; }

const VulkanMemoryTypeList &VulkanDevice::getMemoryTypeList() const
{
return m_memoryTypeList;
}

////////////////////////////////
// VulkanFence implementation //
////////////////////////////////
Expand Down Expand Up @@ -1810,8 +1839,7 @@ VulkanBuffer::VulkanBuffer(

m_size = vkMemoryRequirements.memoryRequirements.size;
m_alignment = vkMemoryRequirements.memoryRequirements.alignment;
const VulkanMemoryTypeList &memoryTypeList =
m_device.getPhysicalDevice().getMemoryTypeList();
const VulkanMemoryTypeList &memoryTypeList = m_device.getMemoryTypeList();
for (size_t mtIdx = 0; mtIdx < memoryTypeList.size(); mtIdx++)
{
uint32_t memoryTypeIndex = memoryTypeList[mtIdx];
Expand Down Expand Up @@ -1920,8 +1948,7 @@ VulkanImage::VulkanImage(
m_alignment = vkMemoryRequirements.memoryRequirements.alignment;
m_dedicated = vkMemoryDedicatedRequirements.requiresDedicatedAllocation;

const VulkanMemoryTypeList &memoryTypeList =
m_device.getPhysicalDevice().getMemoryTypeList();
const VulkanMemoryTypeList &memoryTypeList = m_device.getMemoryTypeList();
for (size_t mtIdx = 0; mtIdx < memoryTypeList.size(); mtIdx++)
{
uint32_t memoryTypeIndex = memoryTypeList[mtIdx];
Expand Down
4 changes: 4 additions & 0 deletions test_conformance/common/vulkan_wrapper/vulkan_wrapper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,13 @@ class VulkanQueueFamily {
};

class VulkanDevice {
friend class VulkanMemoryTypeList;

protected:
const VulkanPhysicalDevice &m_physicalDevice;
VkDevice m_vkDevice;
VulkanQueueFamilyToQueueListMap m_queueFamilyIndexToQueueListMap;
VulkanMemoryTypeList m_memoryTypeList;

VulkanDevice(const VulkanDevice &device);

Expand All @@ -155,6 +158,7 @@ class VulkanDevice {
VulkanQueue &
getQueue(const VulkanQueueFamily &queueFamily /* = getVulkanQueueFamily()*/,
uint32_t queueIndex = 0);
const VulkanMemoryTypeList &getMemoryTypeList() const;
operator VkDevice() const;
};

Expand Down