radv: Unify max_descriptor_set_size.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 27 Nov 2019 23:36:24 +0000 (00:36 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Thu, 28 Nov 2019 11:06:44 +0000 (12:06 +0100)
They were out of sync. Besides syncing, lets ensure they never diverge
again.

Fixes: 8d2654a4197 "radv: Support VK_EXT_inline_uniform_block."
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/vulkan/radv_device.c

index f2c802f9210b83d19d112fa56b474edacd919e7e..9add671998e9fc96894f1a0c01cc08e11854926c 100644 (file)
@@ -1197,25 +1197,32 @@ void radv_GetPhysicalDeviceFeatures2(
        return radv_GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
 }
 
-void radv_GetPhysicalDeviceProperties(
-       VkPhysicalDevice                            physicalDevice,
-       VkPhysicalDeviceProperties*                 pProperties)
+static size_t
+radv_max_descriptor_set_size()
 {
-       RADV_FROM_HANDLE(radv_physical_device, pdevice, physicalDevice);
-       VkSampleCountFlags sample_counts = 0xf;
-
        /* make sure that the entire descriptor set is addressable with a signed
         * 32-bit int. So the sum of all limits scaled by descriptor size has to
         * be at most 2 GiB. the combined image & samples object count as one of
         * both. This limit is for the pipeline layout, not for the set layout, but
         * there is no set limit, so we just set a pipeline limit. I don't think
         * any app is going to hit this soon. */
-       size_t max_descriptor_set_size = ((1ull << 31) - 16 * MAX_DYNAMIC_BUFFERS) /
+       return ((1ull << 31) - 16 * MAX_DYNAMIC_BUFFERS
+                            - MAX_INLINE_UNIFORM_BLOCK_SIZE * MAX_INLINE_UNIFORM_BLOCK_COUNT) /
                  (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 */);
+}
+
+void radv_GetPhysicalDeviceProperties(
+       VkPhysicalDevice                            physicalDevice,
+       VkPhysicalDeviceProperties*                 pProperties)
+{
+       RADV_FROM_HANDLE(radv_physical_device, pdevice, physicalDevice);
+       VkSampleCountFlags sample_counts = 0xf;
+
+       size_t max_descriptor_set_size = radv_max_descriptor_set_size();
 
        VkPhysicalDeviceLimits limits = {
                .maxImageDimension1D                      = (1 << 14),
@@ -1492,13 +1499,7 @@ void radv_GetPhysicalDeviceProperties2(
                        properties->robustBufferAccessUpdateAfterBind = false;
                        properties->quadDivergentImplicitLod = false;
 
-                       size_t max_descriptor_set_size = ((1ull << 31) - 16 * MAX_DYNAMIC_BUFFERS -
-                               MAX_INLINE_UNIFORM_BLOCK_SIZE * MAX_INLINE_UNIFORM_BLOCK_COUNT) /
-                                 (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 */);
+                       size_t max_descriptor_set_size = radv_max_descriptor_set_size();
                        properties->maxPerStageDescriptorUpdateAfterBindSamplers = max_descriptor_set_size;
                        properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers = max_descriptor_set_size;
                        properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers = max_descriptor_set_size;