diff options
| author | wildcard <wildcard@eden-emu.dev> | 2026-03-05 00:54:26 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-03-05 00:54:26 +0100 |
| commit | cdf9b556b25b33cf558c0ed3085d99e129a2fb1c (patch) | |
| tree | c6cb01543e05bfb8f4818ed9625a24efb018a6ba /src/video_core | |
| parent | 7f5de6bcd651f8145e4746c76d0531b6560fd5e4 (diff) | |
[vulkan]fix vuid 02751 (#3573)
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3573
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: DraVee <chimera@dravee.dev>
Co-authored-by: wildcard <wildcard@eden-emu.dev>
Co-committed-by: wildcard <wildcard@eden-emu.dev>
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_buffer_cache.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 5 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 6256bc8bd8..f4345262fb 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -108,6 +108,14 @@ VkBufferView Buffer::View(u32 offset, u32 size, VideoCore::Surface::PixelFormat // Null buffer not supported, adjust offset and size offset = 0; size = 0; + } else { + // Align offset down to minTexelBufferOffsetAlignment + const u32 alignment = static_cast<u32>(device->GetMinTexelBufferOffsetAlignment()); + if (alignment > 1) { + const u32 aligned_offset = offset & ~(alignment - 1); + size += offset - aligned_offset; + offset = aligned_offset; + } } const auto it{std::ranges::find_if(views, [offset, size, format](const BufferView& view) { return offset == view.offset && size == view.size && format == view.format; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index d3623d1186..d29a8cd3f3 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -318,6 +318,11 @@ public: return properties.properties.limits.minStorageBufferOffsetAlignment; } + /// Returns texel buffer offset alignment requirement. + VkDeviceSize GetMinTexelBufferOffsetAlignment() const { + return properties.properties.limits.minTexelBufferOffsetAlignment; + } + /// Returns the maximum range for storage buffers. VkDeviceSize GetMaxStorageBufferRange() const { return properties.properties.limits.maxStorageBufferRange; |
