Module: Mesa Branch: master Commit: e7e8464d94f0ab90d6695ac2d74e29fed87d9939 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e7e8464d94f0ab90d6695ac2d74e29fed87d9939
Author: Iago Toral Quiroga <[email protected]> Date: Thu Apr 15 11:59:34 2021 +0200 v3dv: fix descriptor set limits There were various issues here: - MAX_DYNAMIC_UNIFORM_BUFFERS was larger than MAX_UNIFORM_BUFFERS. - In some cases we were exposing more than the minimums required. While that is not incorrect, it is not following what we have been doing in general. - The Vulkan spec states that some of the MaxDescriptorSet limits need to be multipled by 6 to include all shader stages, even if the implementation doesn't support all shader stages. Fixes: cbd299b051 ('v3dv/device: do not compute per-pipeline limits multiplying per-stage') Reviewed-by: Alejandro PiƱeiro <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10252> --- src/broadcom/vulkan/v3dv_device.c | 16 +++++++++++----- src/broadcom/vulkan/v3dv_limits.h | 14 +++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 0ef77a331e7..496f93e28be 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -999,6 +999,8 @@ v3dv_GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, STATIC_ASSERT(MAX_SAMPLED_IMAGES + MAX_STORAGE_IMAGES + MAX_INPUT_ATTACHMENTS <= V3D_MAX_TEXTURE_SAMPLERS); + STATIC_ASSERT(MAX_UNIFORM_BUFFERS >= MAX_DYNAMIC_UNIFORM_BUFFERS); + STATIC_ASSERT(MAX_STORAGE_BUFFERS >= MAX_DYNAMIC_STORAGE_BUFFERS); const uint32_t page_size = 4096; const uint32_t mem_size = compute_heap_size(); @@ -1042,13 +1044,17 @@ v3dv_GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, .maxPerStageDescriptorInputAttachments = MAX_INPUT_ATTACHMENTS, .maxPerStageResources = 128, - .maxDescriptorSetSamplers = V3D_MAX_TEXTURE_SAMPLERS, - .maxDescriptorSetUniformBuffers = MAX_UNIFORM_BUFFERS, + /* Some of these limits are multiplied by 6 because they need to + * include all possible shader stages (even if not supported). See + * 'Required Limits' table in the Vulkan spec. + */ + .maxDescriptorSetSamplers = 6 * V3D_MAX_TEXTURE_SAMPLERS, + .maxDescriptorSetUniformBuffers = 6 * MAX_UNIFORM_BUFFERS, .maxDescriptorSetUniformBuffersDynamic = MAX_DYNAMIC_UNIFORM_BUFFERS, - .maxDescriptorSetStorageBuffers = MAX_STORAGE_BUFFERS, + .maxDescriptorSetStorageBuffers = 6 * MAX_STORAGE_BUFFERS, .maxDescriptorSetStorageBuffersDynamic = MAX_DYNAMIC_STORAGE_BUFFERS, - .maxDescriptorSetSampledImages = MAX_SAMPLED_IMAGES, - .maxDescriptorSetStorageImages = MAX_STORAGE_IMAGES, + .maxDescriptorSetSampledImages = 6 * MAX_SAMPLED_IMAGES, + .maxDescriptorSetStorageImages = 6 * MAX_STORAGE_IMAGES, .maxDescriptorSetInputAttachments = MAX_INPUT_ATTACHMENTS, /* Vertex limits */ diff --git a/src/broadcom/vulkan/v3dv_limits.h b/src/broadcom/vulkan/v3dv_limits.h index 91a5030b9fe..a5ddb66e4cc 100644 --- a/src/broadcom/vulkan/v3dv_limits.h +++ b/src/broadcom/vulkan/v3dv_limits.h @@ -39,20 +39,20 @@ #define MAX_PUSH_CONSTANTS_SIZE 128 -#define MAX_UNIFORM_BUFFERS 12 -#define MAX_STORAGE_BUFFERS 12 - #define MAX_SAMPLED_IMAGES 16 #define MAX_STORAGE_IMAGES 4 #define MAX_INPUT_ATTACHMENTS 4 -#define MAX_DYNAMIC_UNIFORM_BUFFERS 16 -#define MAX_DYNAMIC_STORAGE_BUFFERS 8 -#define MAX_DYNAMIC_BUFFERS \ - (MAX_DYNAMIC_UNIFORM_BUFFERS + MAX_DYNAMIC_STORAGE_BUFFERS) +#define MAX_UNIFORM_BUFFERS 12 +#define MAX_STORAGE_BUFFERS 4 +#define MAX_DYNAMIC_UNIFORM_BUFFERS 8 +#define MAX_DYNAMIC_STORAGE_BUFFERS 4 +#define MAX_DYNAMIC_BUFFERS (MAX_DYNAMIC_UNIFORM_BUFFERS + \ + MAX_DYNAMIC_STORAGE_BUFFERS) #define MAX_RENDER_TARGETS 4 + /* These are tunable parameters in the HW design, but all the V3D * implementations agree. */ _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
