From b291f8a21c728b3c7dd6b03ad87829f41052a4fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 20 Feb 2021 19:25:25 +0100 Subject: [PATCH] Renderer: Implement TextureUsage --- include/Nazara/Renderer/Enums.hpp | 20 ++++++++++++++++++++ include/Nazara/Renderer/Texture.hpp | 2 ++ src/Nazara/VulkanRenderer/VulkanTexture.cpp | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Renderer/Enums.hpp b/include/Nazara/Renderer/Enums.hpp index 2e3f95286..7204ff60d 100644 --- a/include/Nazara/Renderer/Enums.hpp +++ b/include/Nazara/Renderer/Enums.hpp @@ -154,6 +154,26 @@ namespace Nz TransferDestination, Undefined }; + + enum class TextureUsage + { + ColorOutput, + DepthStencilOutput, + InputAttachment, + ShaderSampling, + TransferSource, + TransferDestination, + + Max = TransferDestination + }; + + template<> + struct EnumAsFlags + { + static constexpr TextureUsage max = TextureUsage::Max; + }; + + using TextureUsageFlags = Flags; } #endif // NAZARA_ENUMS_RENDERER_HPP diff --git a/include/Nazara/Renderer/Texture.hpp b/include/Nazara/Renderer/Texture.hpp index 8f185fe21..450144d7b 100644 --- a/include/Nazara/Renderer/Texture.hpp +++ b/include/Nazara/Renderer/Texture.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace Nz @@ -19,6 +20,7 @@ namespace Nz { PixelFormat pixelFormat; ImageType type; + TextureUsageFlags usageFlags = TextureUsage::ShaderSampling | TextureUsage::TransferDestination; UInt8 mipmapLevel = 1; unsigned int depth = 1; unsigned int height; diff --git a/src/Nazara/VulkanRenderer/VulkanTexture.cpp b/src/Nazara/VulkanRenderer/VulkanTexture.cpp index 377370946..275f78e92 100644 --- a/src/Nazara/VulkanRenderer/VulkanTexture.cpp +++ b/src/Nazara/VulkanRenderer/VulkanTexture.cpp @@ -24,7 +24,7 @@ namespace Nz createInfo.mipLevels = params.mipmapLevel; createInfo.samples = VK_SAMPLE_COUNT_1_BIT; createInfo.tiling = VK_IMAGE_TILING_OPTIMAL; - createInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; + createInfo.usage = ToVulkan(params.usageFlags); VkImageViewCreateInfo createInfoView = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; createInfoView.subresourceRange = {