diff options
author | Jason Ekstrand <[email protected]> | 2017-12-01 16:07:23 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-12-08 15:43:25 -0800 |
commit | 8d34077182d8408923e5239ece882b081670b528 (patch) | |
tree | d4a2ad447d1a766c818a1b3f3ca75f0a70405f31 | |
parent | 2f9eb045f30568342ceffdd41171ca82ccbca30c (diff) |
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 <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_device.c | 12 |
1 files changed, 10 insertions, 2 deletions
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; } |