From a0e3e413031dfc08165f820f22abf7d6f71b67f8 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 25 Apr 2024 18:48:21 -0400 Subject: [PATCH] Fix rendering on Windows At least on my machine, the AMD Windows Vulkan driver is way more strict compared to Linux. * The correct device features are now enabled. * Image usage flags for offscreen textures are corrected. --- renderer/src/gamerenderer.cpp | 8 ++++---- renderer/src/rendermanager.cpp | 1 + renderer/src/simplerenderer.cpp | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/renderer/src/gamerenderer.cpp b/renderer/src/gamerenderer.cpp index fa0c88d..21470fa 100644 --- a/renderer/src/gamerenderer.cpp +++ b/renderer/src/gamerenderer.cpp @@ -1054,19 +1054,19 @@ void GameRenderer::createImageResources() m_normalGBuffer = m_device.createTexture(m_device.swapChain->extent.width, m_device.swapChain->extent.height, VK_FORMAT_R8G8B8A8_UNORM, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); m_viewPositionBuffer = m_device.createTexture(m_device.swapChain->extent.width, m_device.swapChain->extent.height, VK_FORMAT_R8G8B8A8_UNORM, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); m_compositeBuffer = m_device.createTexture(m_device.swapChain->extent.width, m_device.swapChain->extent.height, VK_FORMAT_R8G8B8A8_UNORM, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); m_depthBuffer = m_device.createTexture(m_device.swapChain->extent.width, m_device.swapChain->extent.height, VK_FORMAT_D32_SFLOAT, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT); + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); CommonParameter commonParam{}; commonParam.m_RenderTarget = {1.0f / m_device.swapChain->extent.width, diff --git a/renderer/src/rendermanager.cpp b/renderer/src/rendermanager.cpp index 3462220..5ce8eb5 100644 --- a/renderer/src/rendermanager.cpp +++ b/renderer/src/rendermanager.cpp @@ -196,6 +196,7 @@ RenderManager::RenderManager(GameData *data) VkPhysicalDeviceFeatures enabledFeatures{}; enabledFeatures.shaderClipDistance = VK_TRUE; enabledFeatures.shaderCullDistance = VK_TRUE; + enabledFeatures.fillModeNonSolid = VK_TRUE; VkPhysicalDeviceVulkan11Features enabled11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES}; enabled11Features.shaderDrawParameters = VK_TRUE; diff --git a/renderer/src/simplerenderer.cpp b/renderer/src/simplerenderer.cpp index a1562bf..4fcaf19 100644 --- a/renderer/src/simplerenderer.cpp +++ b/renderer/src/simplerenderer.cpp @@ -430,7 +430,7 @@ void SimpleRenderer::initDescriptors() void SimpleRenderer::initTextures(int width, int height) { - m_compositeTexture = m_device.createTexture(width, height, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); + m_compositeTexture = m_device.createTexture(width, height, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); m_depthTexture = m_device.createTexture(width, height, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT); }