diff --git a/src/rendering/gl/renderer/gl_renderbuffers.cpp b/src/rendering/gl/renderer/gl_renderbuffers.cpp index a54df1279..2ab12e44a 100644 --- a/src/rendering/gl/renderer/gl_renderbuffers.cpp +++ b/src/rendering/gl/renderer/gl_renderbuffers.cpp @@ -868,7 +868,7 @@ void GLPPRenderState::Draw() const PPTextureInput &input = Textures[index]; int filter = (input.Filter == PPFilterMode::Nearest) ? GL_NEAREST : GL_LINEAR; - int wrap = (input.Wrap == PPWrapMode::Clamp) ? GL_CLAMP : GL_REPEAT; + int wrap = (input.Wrap == PPWrapMode::Clamp) ? GL_CLAMP_TO_EDGE : GL_REPEAT; switch (input.Type) { diff --git a/src/rendering/hwrenderer/scene/hw_walls.cpp b/src/rendering/hwrenderer/scene/hw_walls.cpp index 4f8ee4d15..9f1b4aab0 100644 --- a/src/rendering/hwrenderer/scene/hw_walls.cpp +++ b/src/rendering/hwrenderer/scene/hw_walls.cpp @@ -173,7 +173,7 @@ void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags) PalEntry color1 = side->GetSpecialColor(tierndx, side_t::walltop, frontsector); PalEntry color2 = side->GetSpecialColor(tierndx, side_t::wallbottom, frontsector); state.SetObjectColor(color1); - state.SetObjectColor2((color1 != color2) ? color2 : 0); + state.SetObjectColor2((color1 != color2) ? color2 : PalEntry(0)); state.SetAddColor(side->GetAdditiveColor(tierndx, frontsector)); if (color1 != color2) { diff --git a/src/rendering/vulkan/renderer/vk_postprocess.cpp b/src/rendering/vulkan/renderer/vk_postprocess.cpp index e0f489144..8716b8d38 100644 --- a/src/rendering/vulkan/renderer/vk_postprocess.cpp +++ b/src/rendering/vulkan/renderer/vk_postprocess.cpp @@ -287,7 +287,7 @@ void VkPostprocess::RenderBuffersReset() VulkanSampler *VkPostprocess::GetSampler(PPFilterMode filter, PPWrapMode wrap) { - int index = (((int)filter) << 2) | (int)wrap; + int index = (((int)filter) << 1) | (int)wrap; auto &sampler = mSamplers[index]; if (sampler) return sampler.get(); diff --git a/src/rendering/vulkan/renderer/vk_postprocess.h b/src/rendering/vulkan/renderer/vk_postprocess.h index ace4afdfe..a1b6b9e87 100644 --- a/src/rendering/vulkan/renderer/vk_postprocess.h +++ b/src/rendering/vulkan/renderer/vk_postprocess.h @@ -75,7 +75,7 @@ private: VulkanSampler *GetSampler(PPFilterMode filter, PPWrapMode wrap); - std::array, 16> mSamplers; + std::array, 4> mSamplers; std::map> mRenderPassSetup; std::unique_ptr mDescriptorPool; int mCurrentPipelineImage = 0; diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index 1e24fb0ba..e24a6e654 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -191,7 +191,7 @@ void VulkanFrameBuffer::DeleteFrameObjects() FrameDeleteList.CommandBuffers.clear(); } -void VulkanFrameBuffer::FlushCommands(VulkanCommandBuffer **commands, size_t count, bool finish) +void VulkanFrameBuffer::FlushCommands(VulkanCommandBuffer **commands, size_t count, bool finish, bool lastsubmit) { int currentIndex = mNextSubmit % maxConcurrentSubmitCount; @@ -215,12 +215,14 @@ void VulkanFrameBuffer::FlushCommands(VulkanCommandBuffer **commands, size_t cou submit.addSignal(mRenderFinishedSemaphore.get()); } - submit.addSignal(mSubmitSemaphore[currentIndex].get()); + if (!lastsubmit) + submit.addSignal(mSubmitSemaphore[currentIndex].get()); + submit.execute(device, device->graphicsQueue, mSubmitFence[currentIndex].get()); mNextSubmit++; } -void VulkanFrameBuffer::FlushCommands(bool finish) +void VulkanFrameBuffer::FlushCommands(bool finish, bool lastsubmit) { if (mDrawCommands || mTransferCommands) { @@ -241,7 +243,7 @@ void VulkanFrameBuffer::FlushCommands(bool finish) FrameDeleteList.CommandBuffers.push_back(std::move(mDrawCommands)); } - FlushCommands(commands, count, finish); + FlushCommands(commands, count, finish, lastsubmit); current_rendered_commandbuffers += (int)count; } @@ -259,7 +261,7 @@ void VulkanFrameBuffer::WaitForCommands(bool finish) mPostprocess->DrawPresentTexture(mOutputLetterbox, true, true); } - FlushCommands(finish); + FlushCommands(finish, true); if (finish) { diff --git a/src/rendering/vulkan/system/vk_framebuffer.h b/src/rendering/vulkan/system/vk_framebuffer.h index 5bdbc820d..0051abbaa 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.h +++ b/src/rendering/vulkan/system/vk_framebuffer.h @@ -34,7 +34,7 @@ public: VkPostprocess *GetPostprocess() { return mPostprocess.get(); } VkRenderBuffers *GetBuffers() { return mActiveRenderBuffers; } - void FlushCommands(bool finish); + void FlushCommands(bool finish, bool lastsubmit = false); unsigned int GetLightBufferBlockSize() const; @@ -111,7 +111,7 @@ private: void CopyScreenToBuffer(int w, int h, void *data); void UpdateShadowMap(); void DeleteFrameObjects(); - void FlushCommands(VulkanCommandBuffer **commands, size_t count, bool finish); + void FlushCommands(VulkanCommandBuffer **commands, size_t count, bool finish, bool lastsubmit); std::unique_ptr mShaderManager; std::unique_ptr mSamplerManager;