From: Jason Ekstrand Date: Sat, 2 Dec 2017 00:07:23 +0000 (-0800) Subject: anv/device: Increase the UBO alignment requirement to 32 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8d34077182d8408923e5239ece882b081670b528;p=mesa.git anv/device: Increase the UBO alignment requirement to 32 Push constants work in terms of 32-byte chunks so if we want to be able to push UBOs, every thing needs to be 32-byte aligned. Currently, we only require 16-byte which is too small. Reviewed-by: Jordan Justen --- diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 55b77f90711..8eb5a9342ae 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -849,7 +849,8 @@ void anv_GetPhysicalDeviceProperties( .viewportSubPixelBits = 13, /* We take a float? */ .minMemoryMapAlignment = 4096, /* A page */ .minTexelBufferOffsetAlignment = 1, - .minUniformBufferOffsetAlignment = 16, + /* We need 16 for UBO block reads to work and 32 for push UBOs */ + .minUniformBufferOffsetAlignment = 32, .minStorageBufferOffsetAlignment = 4, .minTexelOffset = -8, .maxTexelOffset = 7, @@ -1915,8 +1916,15 @@ void anv_GetBufferMemoryRequirements( memory_types |= (1u << i); } + /* Base alignment requirement of a cache line */ + uint32_t alignment = 16; + + /* We need an alignment of 32 for pushing UBOs */ + if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) + alignment = MAX2(alignment, 32); + pMemoryRequirements->size = buffer->size; - pMemoryRequirements->alignment = 16; + pMemoryRequirements->alignment = alignment; pMemoryRequirements->memoryTypeBits = memory_types; }