Merge pull request #209 from aws-lumberyard-dev/Atom/jiaweig/ATOM-15303_descriptor_indexing

ATOM-15303 [RHI][Android] Descriptor indexing feature not present on Qualcomm
main
jiaweig 5 years ago committed by GitHub
commit 285ad86024
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -163,21 +163,23 @@ namespace AZ
uint32_t minorVersion = VK_VERSION_MINOR(physicalProperties.apiVersion);
// unbounded array functionality
VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexingFeatures = {};
VkPhysicalDeviceDescriptorIndexingFeaturesEXT descriptorIndexingFeatures = {};
descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
descriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing = VK_TRUE;
descriptorIndexingFeatures.descriptorBindingPartiallyBound = VK_TRUE;
descriptorIndexingFeatures.descriptorBindingVariableDescriptorCount = VK_TRUE;
descriptorIndexingFeatures.runtimeDescriptorArray = VK_TRUE;
const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& physicalDeviceDescriptorIndexingFeatures =
physicalDevice.GetPhysicalDeviceDescriptorIndexingFeatures();
descriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing;
descriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing;
descriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing;
descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing;
descriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing;
descriptorIndexingFeatures.descriptorBindingPartiallyBound = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing;
descriptorIndexingFeatures.descriptorBindingVariableDescriptorCount = physicalDeviceDescriptorIndexingFeatures.descriptorBindingVariableDescriptorCount;
descriptorIndexingFeatures.runtimeDescriptorArray = physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray;
VkPhysicalDeviceDepthClipEnableFeaturesEXT depthClipEnabled = {};
depthClipEnabled.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
@ -196,7 +198,7 @@ namespace AZ
// If we are running Vulkan >= 1.2, then we must use VkPhysicalDeviceVulkan12Features instead
// of VkPhysicalDeviceShaderFloat16Int8FeaturesKHR or VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.
if (majorVersion >= 1 && minorVersion >= 2)
{
{
vulkan12Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
vulkan12Features.drawIndirectCount = physicalDevice.GetPhysicalDeviceVulkan12Features().drawIndirectCount;
vulkan12Features.shaderFloat16 = physicalDevice.GetPhysicalDeviceVulkan12Features().shaderFloat16;
@ -205,7 +207,7 @@ namespace AZ
robustness2.pNext = &vulkan12Features;
}
else
{
{
float16Int8.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR;
float16Int8.shaderFloat16 = physicalDevice.GetPhysicalDeviceFloat16Int8Features().shaderFloat16;

@ -133,6 +133,11 @@ namespace AZ
return m_float16Int8Features;
}
const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& PhysicalDevice::GetPhysicalDeviceDescriptorIndexingFeatures() const
{
return m_descriptorIndexingFeatures;
}
const VkPhysicalDeviceVulkan12Features& PhysicalDevice::GetPhysicalDeviceVulkan12Features() const
{
return m_vulkan12Features;
@ -233,6 +238,7 @@ namespace AZ
m_features.set(static_cast<size_t>(DeviceFeature::SeparateDepthStencil),
(m_separateDepthStencilFeatures.separateDepthStencilLayouts && VK_DEVICE_EXTENSION_SUPPORTED(KHR_separate_depth_stencil_layouts)) ||
(m_vulkan12Features.separateDepthStencilLayouts));
m_features.set(static_cast<size_t>(DeviceFeature::DescriptorIndexing), VK_DEVICE_EXTENSION_SUPPORTED(EXT_descriptor_indexing));
}
void PhysicalDevice::CompileMemoryStatistics(RHI::MemoryStatisticsBuilder& builder) const
@ -266,9 +272,14 @@ namespace AZ
if (VK_INSTANCE_EXTENSION_SUPPORTED(KHR_get_physical_device_properties2))
{
// features
VkPhysicalDeviceDescriptorIndexingFeaturesEXT& descriptorIndexingFeatures = m_descriptorIndexingFeatures;
descriptorIndexingFeatures = {};
descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
VkPhysicalDeviceDepthClipEnableFeaturesEXT& dephClipEnableFeatures = m_dephClipEnableFeatures;
dephClipEnableFeatures = {};
dephClipEnableFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
descriptorIndexingFeatures.pNext = &dephClipEnableFeatures;
VkPhysicalDeviceRobustness2FeaturesEXT& robustness2Feature = m_robutness2Features;
robustness2Feature = {};
@ -292,7 +303,7 @@ namespace AZ
VkPhysicalDeviceFeatures2 deviceFeatures2 = {};
deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
deviceFeatures2.pNext = &dephClipEnableFeatures;
deviceFeatures2.pNext = &descriptorIndexingFeatures;
vkGetPhysicalDeviceFeatures2KHR(vkPhysicalDevice, &deviceFeatures2);
m_deviceFeatures = deviceFeatures2.features;
@ -302,7 +313,7 @@ namespace AZ
m_conservativeRasterProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT;
deviceProps2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
deviceProps2.pNext = &m_conservativeRasterProperties;
m_rayTracingPipelineProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR;
m_conservativeRasterProperties.pNext = &m_rayTracingPipelineProperties;

@ -34,6 +34,7 @@ namespace AZ
DrawIndirectCount,
NullDescriptor,
SeparateDepthStencil,
DescriptorIndexing,
Count // Must be last
};
@ -57,6 +58,7 @@ namespace AZ
const VkPhysicalDeviceDepthClipEnableFeaturesEXT& GetPhysicalDeviceDepthClipEnableFeatures() const;
const VkPhysicalDeviceRobustness2FeaturesEXT& GetPhysicalDeviceRobutness2Features() const;
const VkPhysicalDeviceShaderFloat16Int8FeaturesKHR& GetPhysicalDeviceFloat16Int8Features() const;
const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& GetPhysicalDeviceDescriptorIndexingFeatures() const;
const VkPhysicalDeviceVulkan12Features& GetPhysicalDeviceVulkan12Features() const;
const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR& GetPhysicalDeviceSeparateDepthStencilFeatures() const;
const VkPhysicalDeviceAccelerationStructurePropertiesKHR& GetPhysicalDeviceAccelerationStructureProperties() const;
@ -70,7 +72,6 @@ namespace AZ
private:
PhysicalDevice() = default;
void Init(VkPhysicalDevice vkPhysicalDevice);
///////////////////////////////////////////////////////////////////
@ -88,6 +89,7 @@ namespace AZ
VkPhysicalDeviceDepthClipEnableFeaturesEXT m_dephClipEnableFeatures{};
VkPhysicalDeviceRobustness2FeaturesEXT m_robutness2Features{};
VkPhysicalDeviceShaderFloat16Int8FeaturesKHR m_float16Int8Features{};
VkPhysicalDeviceDescriptorIndexingFeaturesEXT m_descriptorIndexingFeatures{};
VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR m_separateDepthStencilFeatures{};
VkPhysicalDeviceAccelerationStructurePropertiesKHR m_accelerationStructureProperties{};
VkPhysicalDeviceRayTracingPipelinePropertiesKHR m_rayTracingPipelineProperties{};

Loading…
Cancel
Save