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? */
|
.viewportSubPixelBits = 13, /* We take a float? */
|
||||||
.minMemoryMapAlignment = 4096, /* A page */
|
.minMemoryMapAlignment = 4096, /* A page */
|
||||||
.minTexelBufferOffsetAlignment = 1,
|
.minTexelBufferOffsetAlignment = 1,
|
||||||
.minUniformBufferOffsetAlignment = 16,
|
/* We need 16 for UBO block reads to work and 32 for push UBOs */
|
||||||
|
.minUniformBufferOffsetAlignment = 32,
|
||||||
.minStorageBufferOffsetAlignment = 4,
|
.minStorageBufferOffsetAlignment = 4,
|
||||||
.minTexelOffset = -8,
|
.minTexelOffset = -8,
|
||||||
.maxTexelOffset = 7,
|
.maxTexelOffset = 7,
|
||||||
@@ -1915,8 +1916,15 @@ void anv_GetBufferMemoryRequirements(
|
|||||||
memory_types |= (1u << i);
|
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->size = buffer->size;
|
||||||
pMemoryRequirements->alignment = 16;
|
pMemoryRequirements->alignment = alignment;
|
||||||
pMemoryRequirements->memoryTypeBits = memory_types;
|
pMemoryRequirements->memoryTypeBits = memory_types;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user