diff --git a/src/rendervulkan.cpp b/src/rendervulkan.cpp index c2042208a..f98665c10 100644 --- a/src/rendervulkan.cpp +++ b/src/rendervulkan.cpp @@ -537,6 +537,7 @@ bool CVulkanDevice::createDevice() VkPhysicalDeviceProperties deviceProperties; vk.GetPhysicalDeviceProperties( physDev(), &deviceProperties ); m_uVendorID = deviceProperties.vendorID; + m_uUploadAlignment = std::max( 16, deviceProperties.limits.minUniformBufferOffsetAlignment ); } float queuePriorities = 1.0f; diff --git a/src/rendervulkan.hpp b/src/rendervulkan.hpp index 033fa6671..31cfc7aba 100644 --- a/src/rendervulkan.hpp +++ b/src/rendervulkan.hpp @@ -877,7 +877,7 @@ class CVulkanDevice { assert(size <= upload_buffer_size); - m_uploadBufferOffset = align(m_uploadBufferOffset, 16); + m_uploadBufferOffset = align(m_uploadBufferOffset, m_uUploadAlignment); if (m_uploadBufferOffset + size > upload_buffer_size) { fprintf(stderr, "Exceeded uploadBufferData\n"); @@ -934,6 +934,7 @@ class CVulkanDevice bool m_bSupportsFp16 = false; uint32_t m_uVendorID = 0; + uint32_t m_uUploadAlignment = 16; bool m_bHasDrmPrimaryDevId = false; bool m_bSupportsModifiers = false; bool m_bInitialized = false;