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 <jordan.l.justen@intel.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user