From eaf44cc15457978bd1ac2f41a585c52008ebdc41 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Wed, 21 May 2025 07:54:57 +0300 Subject: [PATCH] Vulkan: Fixed buffer clear after using BufferData and BufferSubData This happened if both functions were called before any Draw* used them --- src/CRE/Vulkan/gl_wrap.cpp | 8 ++++---- src/CRE/Vulkan/gl_wrap.hpp | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/CRE/Vulkan/gl_wrap.cpp b/src/CRE/Vulkan/gl_wrap.cpp index 76d15a4f..62066218 100644 --- a/src/CRE/Vulkan/gl_wrap.cpp +++ b/src/CRE/Vulkan/gl_wrap.cpp @@ -277,7 +277,7 @@ namespace Vulkan { Vulkan::Buffer dynamic_buffer = Vulkan::manager_get_dynamic_buffer(size, alignment); dynamic_buffer.WriteMemory(dynamic_buffer.GetOffset(), size, data.data()); - enum_and(flags, ~Vulkan::GL_BUFFER_FLAG_WRITE_DATA); + enum_and(flags, ~Vulkan::GL_BUFFER_FLAG_UPDATE_DATA); working_buffer.AddBuffer(hash, dynamic_buffer); copy_working_buffer = true; @@ -286,7 +286,7 @@ namespace Vulkan { Vulkan::end_render_pass(Vulkan::current_command_buffer); vkCmdFillBuffer(Vulkan::current_command_buffer, buffer, 0, size, 0); - enum_and(flags, ~Vulkan::GL_BUFFER_FLAG_CLEAR_DATA); + enum_and(flags, ~Vulkan::GL_BUFFER_FLAG_UPDATE_DATA); working_buffer.SetBuffer(buffer); copy_working_buffer = false; @@ -6967,8 +6967,8 @@ namespace Vulkan { return GL_FALSE; } - if (vk_buf->flags & Vulkan::GL_BUFFER_FLAG_WRITE_DATA) { - enum_and(vk_buf->flags, ~Vulkan::GL_BUFFER_FLAG_CLEAR_DATA); + if (vk_buf->flags & Vulkan::GL_BUFFER_FLAG_UPDATE_DATA) { + enum_and(vk_buf->flags, ~Vulkan::GL_BUFFER_FLAG_UPDATE_DATA); if (check_for_zero(vk_buf->data.data(), vk_buf->data.size())) enum_or(vk_buf->flags, Vulkan::GL_BUFFER_FLAG_CLEAR_DATA); diff --git a/src/CRE/Vulkan/gl_wrap.hpp b/src/CRE/Vulkan/gl_wrap.hpp index c79f9e60..db048f90 100644 --- a/src/CRE/Vulkan/gl_wrap.hpp +++ b/src/CRE/Vulkan/gl_wrap.hpp @@ -43,6 +43,8 @@ namespace Vulkan { GL_BUFFER_FLAG_MAP_READ_BIT = (1 << 5u), GL_BUFFER_FLAG_MAP_WRITE_BIT = (1 << 6u), GL_BUFFER_FLAG_DYNAMIC_STORAGE_BIT = (1 << 7u), + + GL_BUFFER_FLAG_UPDATE_DATA = GL_BUFFER_FLAG_CLEAR_DATA | GL_BUFFER_FLAG_WRITE_DATA, }; enum gl_texture_flags {