diff options
Diffstat (limited to 'src/intel/vulkan')
-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; } |