Browse Source

radv: Enable VK_EXT_descriptor_indexing.

This adds everything except non-uniform indexing, which needs a bit
more work and testing.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
tags/18.1-branchpoint
Bas Nieuwenhuizen 7 years ago
parent
commit
0e10790558
3 changed files with 63 additions and 0 deletions
  1. 60
    0
      src/amd/vulkan/radv_device.c
  2. 1
    0
      src/amd/vulkan/radv_extensions.py
  3. 2
    0
      src/amd/vulkan/radv_shader.c

+ 60
- 0
src/amd/vulkan/radv_device.c View File

@@ -735,6 +735,31 @@ void radv_GetPhysicalDeviceFeatures2(
features->samplerYcbcrConversion = false;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: {
VkPhysicalDeviceDescriptorIndexingFeaturesEXT *features =
(VkPhysicalDeviceDescriptorIndexingFeaturesEXT*)features;
features->shaderInputAttachmentArrayDynamicIndexing = true;
features->shaderUniformTexelBufferArrayDynamicIndexing = true;
features->shaderStorageTexelBufferArrayDynamicIndexing = true;
features->shaderUniformBufferArrayNonUniformIndexing = false;
features->shaderSampledImageArrayNonUniformIndexing = false;
features->shaderStorageBufferArrayNonUniformIndexing = false;
features->shaderStorageImageArrayNonUniformIndexing = false;
features->shaderInputAttachmentArrayNonUniformIndexing = false;
features->shaderUniformTexelBufferArrayNonUniformIndexing = false;
features->shaderStorageTexelBufferArrayNonUniformIndexing = false;
features->descriptorBindingUniformBufferUpdateAfterBind = true;
features->descriptorBindingSampledImageUpdateAfterBind = true;
features->descriptorBindingStorageImageUpdateAfterBind = true;
features->descriptorBindingStorageBufferUpdateAfterBind = true;
features->descriptorBindingUniformTexelBufferUpdateAfterBind = true;
features->descriptorBindingStorageTexelBufferUpdateAfterBind = true;
features->descriptorBindingUpdateUnusedWhilePending = true;
features->descriptorBindingPartiallyBound = true;
features->descriptorBindingVariableDescriptorCount = true;
features->runtimeDescriptorArray = true;
break;
}
default:
break;
}
@@ -1014,6 +1039,41 @@ void radv_GetPhysicalDeviceProperties2(
properties->maxVertexAttribDivisor = UINT32_MAX;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: {
VkPhysicalDeviceDescriptorIndexingPropertiesEXT *properties =
(VkPhysicalDeviceDescriptorIndexingPropertiesEXT*)ext;
properties->maxUpdateAfterBindDescriptorsInAllPools = UINT32_MAX / 64;
properties->shaderUniformBufferArrayNonUniformIndexingNative = false;
properties->shaderSampledImageArrayNonUniformIndexingNative = false;
properties->shaderStorageBufferArrayNonUniformIndexingNative = false;
properties->shaderStorageImageArrayNonUniformIndexingNative = false;
properties->shaderInputAttachmentArrayNonUniformIndexingNative = false;
properties->robustBufferAccessUpdateAfterBind = false;
properties->quadDivergentImplicitLod = false;

size_t max_descriptor_set_size = ((1ull << 31) - 16 * MAX_DYNAMIC_BUFFERS) /
(32 /* uniform buffer, 32 due to potential space wasted on alignment */ +
32 /* storage buffer, 32 due to potential space wasted on alignment */ +
32 /* sampler, largest when combined with image */ +
64 /* sampled image */ +
64 /* storage image */);
properties->maxPerStageDescriptorUpdateAfterBindSamplers = max_descriptor_set_size;
properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers = max_descriptor_set_size;
properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers = max_descriptor_set_size;
properties->maxPerStageDescriptorUpdateAfterBindSampledImages = max_descriptor_set_size;
properties->maxPerStageDescriptorUpdateAfterBindStorageImages = max_descriptor_set_size;
properties->maxPerStageDescriptorUpdateAfterBindInputAttachments = max_descriptor_set_size;
properties->maxPerStageUpdateAfterBindResources = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindSamplers = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindUniformBuffers = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = MAX_DYNAMIC_UNIFORM_BUFFERS;
properties->maxDescriptorSetUpdateAfterBindStorageBuffers = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = MAX_DYNAMIC_STORAGE_BUFFERS;
properties->maxDescriptorSetUpdateAfterBindSampledImages = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindStorageImages = max_descriptor_set_size;
properties->maxDescriptorSetUpdateAfterBindInputAttachments = max_descriptor_set_size;
break;
}
default:
break;
}

+ 1
- 0
src/amd/vulkan/radv_extensions.py View File

@@ -87,6 +87,7 @@ EXTENSIONS = [
Extension('VK_KHR_multiview', 1, True),
Extension('VK_EXT_debug_report', 9, True),
Extension('VK_EXT_depth_range_unrestricted', 1, True),
Extension('VK_EXT_descriptor_indexing', 2, True),
Extension('VK_EXT_discard_rectangles', 1, True),
Extension('VK_EXT_external_memory_dma_buf', 1, True),
Extension('VK_EXT_external_memory_host', 1, 'device->rad_info.has_userptr'),

+ 2
- 0
src/amd/vulkan/radv_shader.c View File

@@ -222,6 +222,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
.gcn_shader = true,
.trinary_minmax = true,
.shader_viewport_index_layer = true,
.descriptor_array_dynamic_indexing = true,
.runtime_descriptor_array = true,
},
};
entry_point = spirv_to_nir(spirv, module->size / 4,

Loading…
Cancel
Save