Module: Mesa
Branch: main
Commit: 65f12fde44075276b640925d4f4301fcf00fc955
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=65f12fde44075276b640925d4f4301fcf00fc955

Author: Faith Ekstrand <[email protected]>
Date:   Wed Oct 11 02:55:11 2023 -0500

nvk: Improve address space and buffer size limits

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25653>

---

 src/nouveau/vulkan/nvk_buffer.c          | 3 +++
 src/nouveau/vulkan/nvk_physical_device.c | 4 ++--
 src/nouveau/vulkan/nvk_private.h         | 3 +++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/nouveau/vulkan/nvk_buffer.c b/src/nouveau/vulkan/nvk_buffer.c
index 6f1c4057ad3..bfe599ecc4e 100644
--- a/src/nouveau/vulkan/nvk_buffer.c
+++ b/src/nouveau/vulkan/nvk_buffer.c
@@ -41,6 +41,9 @@ nvk_CreateBuffer(VkDevice device,
    VK_FROM_HANDLE(nvk_device, dev, device);
    struct nvk_buffer *buffer;
 
+   if (pCreateInfo->size > NVK_MAX_BUFFER_SIZE)
+      return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
+
    buffer = vk_buffer_create(&dev->vk, pCreateInfo, pAllocator,
                              sizeof(*buffer));
    if (!buffer)
diff --git a/src/nouveau/vulkan/nvk_physical_device.c 
b/src/nouveau/vulkan/nvk_physical_device.c
index 72dbba01120..e7f3909f64c 100644
--- a/src/nouveau/vulkan/nvk_physical_device.c
+++ b/src/nouveau/vulkan/nvk_physical_device.c
@@ -396,7 +396,7 @@ nvk_get_device_properties(const struct nvk_instance 
*instance,
       .maxMemoryAllocationCount = 4096,
       .maxSamplerAllocationCount = 4000,
       .bufferImageGranularity = info->chipset >= 0x120 ? 0x400 : 0x10000,
-      .sparseAddressSpaceSize = UINT32_MAX,
+      .sparseAddressSpaceSize = NVK_SPARSE_ADDR_SPACE_SIZE,
       .maxBoundDescriptorSets = NVK_MAX_SETS,
       .maxPerStageDescriptorSamplers = NVK_MAX_DESCRIPTORS,
       .maxPerStageDescriptorUniformBuffers = NVK_MAX_DESCRIPTORS,
@@ -556,7 +556,7 @@ nvk_get_device_properties(const struct nvk_instance 
*instance,
       .maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32,
       .maxDescriptorSetInlineUniformBlocks = 6 * 32,
       .maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 6 * 32,
-      .maxBufferSize = UINT32_MAX,
+      .maxBufferSize = NVK_MAX_BUFFER_SIZE,
 
       /* VK_KHR_push_descriptor */
       .maxPushDescriptors = NVK_MAX_PUSH_DESCRIPTORS,
diff --git a/src/nouveau/vulkan/nvk_private.h b/src/nouveau/vulkan/nvk_private.h
index df657a2c2a7..a10da4f935c 100644
--- a/src/nouveau/vulkan/nvk_private.h
+++ b/src/nouveau/vulkan/nvk_private.h
@@ -26,6 +26,9 @@
 #define NVK_SSBO_BOUNDS_CHECK_ALIGNMENT 4
 #define NVK_MAX_MULTIVIEW_VIEW_COUNT 32
 
+#define NVK_SPARSE_ADDR_SPACE_SIZE (1ull << 39)
+#define NVK_MAX_BUFFER_SIZE (1ull << 31)
+
 struct nvk_addr_range {
    uint64_t addr;
    uint64_t range;

Reply via email to