fixing buffers issue

This commit is contained in:
Kbz-8
2025-05-02 01:25:37 +02:00
parent 5eb5821c2a
commit 6862ce0c18
4 changed files with 13 additions and 18 deletions

View File

@@ -43,7 +43,7 @@ namespace Scop
MemoryBlock m_memory = NULL_MEMORY_BLOCK; MemoryBlock m_memory = NULL_MEMORY_BLOCK;
private: private:
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, bool use_raw_size); void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties);
private: private:
inline static std::size_t s_buffer_count = 0; inline static std::size_t s_buffer_count = 0;

View File

@@ -43,11 +43,11 @@ namespace Scop
switch(type) switch(type)
{ {
case LogType::Debug: std::cout << Ansi::blue << "[Scop Debug] "; break; case LogType::Debug: std::cout << Ansi::blue << "[Scop Debug] "; break;
case LogType::Message: std::cout << Ansi::blue << "[Scop Message] "; break; case LogType::Message: std::cout << Ansi::blue << "[Scop Message] "; break;
case LogType::Warning: std::cout << Ansi::magenta << "[Scop Warning] "; break; case LogType::Warning: std::cout << Ansi::magenta << "[Scop Warning] "; break;
case LogType::Error: std::cerr << Ansi::red << "[Scop Error] "; break; case LogType::Error: std::cerr << Ansi::red << "[Scop Error] "; break;
case LogType::FatalError: std::cerr << Ansi::red << "[Scop Fatal Error] "; break; case LogType::FatalError: std::cerr << Ansi::red << "[Scop Fatal Error] "; break;
default: break; default: break;
} }

View File

@@ -30,7 +30,7 @@ namespace Scop
if(type == BufferType::Staging && data.Empty()) if(type == BufferType::Staging && data.Empty())
Warning("Vulkan: trying to create staging buffer without data (wtf?)"); Warning("Vulkan: trying to create staging buffer without data (wtf?)");
CreateBuffer(size, m_usage, m_flags, false); CreateBuffer(size, m_usage, m_flags);
if(!data.Empty()) if(!data.Empty())
{ {
@@ -41,7 +41,7 @@ namespace Scop
PushToGPU(); PushToGPU();
} }
void GPUBuffer::CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, bool use_raw_size) void GPUBuffer::CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties)
{ {
auto device = RenderCore::Get().GetDevice(); auto device = RenderCore::Get().GetDevice();
m_buffer = kvfCreateBuffer(device, usage, size); m_buffer = kvfCreateBuffer(device, usage, size);
@@ -49,13 +49,8 @@ namespace Scop
VkMemoryRequirements mem_requirements; VkMemoryRequirements mem_requirements;
RenderCore::Get().vkGetBufferMemoryRequirements(device, m_buffer, &mem_requirements); RenderCore::Get().vkGetBufferMemoryRequirements(device, m_buffer, &mem_requirements);
if(use_raw_size) m_memory = RenderCore::Get().GetAllocator().Allocate(size, mem_requirements.alignment, *FindMemoryType(mem_requirements.memoryTypeBits, properties));
{ //m_memory = RenderCore::Get().GetAllocator().Allocate(mem_requirements.size, mem_requirements.alignment, *FindMemoryType(mem_requirements.memoryTypeBits, properties));
m_memory = RenderCore::Get().GetAllocator().Allocate(size, mem_requirements.alignment, *FindMemoryType(mem_requirements.memoryTypeBits, properties));
Message("test % - %", size, m_memory.size);
}
else
m_memory = RenderCore::Get().GetAllocator().Allocate(mem_requirements.size, mem_requirements.alignment, *FindMemoryType(mem_requirements.memoryTypeBits, properties));
RenderCore::Get().vkBindBufferMemory(device, m_buffer, m_memory.memory, m_memory.offset); RenderCore::Get().vkBindBufferMemory(device, m_buffer, m_memory.memory, m_memory.offset);
Message("Vulkan: created buffer"); Message("Vulkan: created buffer");
s_buffer_count++; s_buffer_count++;
@@ -90,7 +85,7 @@ namespace Scop
GPUBuffer new_buffer; GPUBuffer new_buffer;
new_buffer.m_usage = (this->m_usage & 0xFFFFFFFC) | VK_BUFFER_USAGE_TRANSFER_DST_BIT; new_buffer.m_usage = (this->m_usage & 0xFFFFFFFC) | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
new_buffer.m_flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; new_buffer.m_flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
new_buffer.CreateBuffer(m_memory.size, new_buffer.m_usage, new_buffer.m_flags, true); new_buffer.CreateBuffer(m_memory.size, new_buffer.m_usage, new_buffer.m_flags);
if(new_buffer.CopyFrom(*this)) if(new_buffer.CopyFrom(*this))
Swap(new_buffer); Swap(new_buffer);
@@ -167,7 +162,7 @@ namespace Scop
void UniformBuffer::SetData(CPUBuffer data, std::size_t frame_index) void UniformBuffer::SetData(CPUBuffer data, std::size_t frame_index)
{ {
if(data.GetSize() != m_buffers[frame_index].GetSize()) if(data.GetSize() > m_buffers[frame_index].GetSize())
{ {
Error("Vulkan: invalid data size to update to a uniform buffer, % != %", data.GetSize(), m_buffers[frame_index].GetSize()); Error("Vulkan: invalid data size to update to a uniform buffer, % != %", data.GetSize(), m_buffers[frame_index].GetSize());
return; return;

View File

@@ -18,7 +18,7 @@ namespace Scop
{ {
case ImageType::Color: kvf_type = KVF_IMAGE_COLOR; break; case ImageType::Color: kvf_type = KVF_IMAGE_COLOR; break;
case ImageType::Depth: kvf_type = KVF_IMAGE_DEPTH; break; case ImageType::Depth: kvf_type = KVF_IMAGE_DEPTH; break;
case ImageType::Cube: kvf_type = KVF_IMAGE_CUBE; break; case ImageType::Cube: kvf_type = KVF_IMAGE_CUBE; break;
default: break; default: break;
} }