From 7e68223794feeae926c4f655f3dee10b6d2896dd Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 12 Feb 2021 12:17:01 +0100 Subject: [PATCH] Add support for zero size buffers as the hwrenderer uses that! Also add a sanity check on zero size textures just in case that ever happens! --- src/common/rendering/vulkan/system/vk_buffers.cpp | 8 ++++++++ src/common/rendering/vulkan/textures/vk_hwtexture.cpp | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/common/rendering/vulkan/system/vk_buffers.cpp b/src/common/rendering/vulkan/system/vk_buffers.cpp index 715b357ec0..420be91f11 100644 --- a/src/common/rendering/vulkan/system/vk_buffers.cpp +++ b/src/common/rendering/vulkan/system/vk_buffers.cpp @@ -68,6 +68,8 @@ void VKBuffer::SetData(size_t size, const void *data, bool staticdata) { auto fb = GetVulkanFrameBuffer(); + size = std::max(size, (size_t)16); // For supporting zero byte buffers + if (staticdata) { mPersistent = false; @@ -122,6 +124,8 @@ void VKBuffer::SetData(size_t size, const void *data, bool staticdata) void VKBuffer::SetSubData(size_t offset, size_t size, const void *data) { + size = std::max(size, (size_t)16); // For supporting zero byte buffers + auto fb = GetVulkanFrameBuffer(); if (mStaging) { @@ -141,6 +145,8 @@ void VKBuffer::SetSubData(size_t offset, size_t size, const void *data) void VKBuffer::Resize(size_t newsize) { + newsize = std::max(newsize, (size_t)16); // For supporting zero byte buffers + auto fb = GetVulkanFrameBuffer(); // Grab old buffer @@ -187,6 +193,8 @@ void VKBuffer::Unmap() void *VKBuffer::Lock(unsigned int size) { + size = std::max(size, (unsigned int)16); // For supporting zero byte buffers + if (!mBuffer) { // The model mesh loaders lock multiple non-persistent buffers at the same time. This is not allowed in vulkan. diff --git a/src/common/rendering/vulkan/textures/vk_hwtexture.cpp b/src/common/rendering/vulkan/textures/vk_hwtexture.cpp index aac0185180..25bd66d718 100644 --- a/src/common/rendering/vulkan/textures/vk_hwtexture.cpp +++ b/src/common/rendering/vulkan/textures/vk_hwtexture.cpp @@ -158,6 +158,9 @@ void VkHardwareTexture::CreateImage(FTexture *tex, int translation, int flags) void VkHardwareTexture::CreateTexture(int w, int h, int pixelsize, VkFormat format, const void *pixels) { + if (w <= 0 || h <= 0) + throw CVulkanError("Trying to create zero size texture"); + auto fb = GetVulkanFrameBuffer(); int totalSize = w * h * pixelsize;