aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorwildcard <wildcard@eden-emu.dev>2026-03-05 00:54:26 +0100
committercrueter <crueter@eden-emu.dev>2026-03-05 00:54:26 +0100
commitcdf9b556b25b33cf558c0ed3085d99e129a2fb1c (patch)
treec6cb01543e05bfb8f4818ed9625a24efb018a6ba /src/video_core
parent7f5de6bcd651f8145e4746c76d0531b6560fd5e4 (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.cpp8
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h5
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;