Nameless Engine
Loading...
Searching...
No Matches
VulkanRenderer.h
1#pragma once
2
3// Standard.
4#include <vector>
5
6// Custom.
7#include "render/Renderer.h"
8#include "render/general/resource/frame/FrameResourceManager.h"
9#include "render/vulkan/resource/VulkanResource.h"
10#include "material/Material.h"
11
12// External.
13#include "vulkan/vulkan.h"
14#include "VulkanMemoryAllocator/include/vk_mem_alloc.h"
15
16namespace ne {
17 class CameraProperties;
18 class VulkanPipeline;
19 struct VulkanFrameResource;
20 struct QueuedForExecutionComputeShaders;
21 class ComputeShaderInterface;
22 class MeshNode;
23 class Pipeline;
24
26 class VulkanRenderer : public Renderer {
27 public:
28 VulkanRenderer() = delete;
29 VulkanRenderer(const VulkanRenderer&) = delete;
30 VulkanRenderer& operator=(const VulkanRenderer&) = delete;
31
32 virtual ~VulkanRenderer() override;
33
39 static uint32_t getUsedVulkanVersion();
40
46 static constexpr VkFormat getDepthImageFormat() { return depthImageFormat; }
47
53 static constexpr VkFormat getShadowMapFormat() { return shadowMapFormat; }
54
61 static constexpr VkFormat getShadowMappingPointLightColorTargetFormat() {
63 }
64
76 static std::variant<std::unique_ptr<Renderer>, std::pair<Error, std::string>>
77 create(GameManager* pGameManager, const std::vector<std::string>& vBlacklistedGpuNames);
78
89 static void setObjectDebugOnlyName(
90 Renderer* pRenderer, void* pObject, VkObjectType objectType, const std::string& sResourceName);
91
102 VkSampler getTextureSampler(TextureFilteringQuality filtering);
103
112 virtual std::vector<std::string> getSupportedGpuNames() const override;
113
119 virtual std::variant<std::set<std::pair<unsigned int, unsigned int>>, Error>
120 getSupportedRenderResolutions() const override;
121
130 virtual std::variant<std::set<std::pair<unsigned int, unsigned int>>, Error>
131 getSupportedRefreshRates() const override;
132
138 virtual RendererType getType() const override;
139
148 virtual std::string getUsedApiVersion() const override;
149
155 virtual std::string getCurrentlyUsedGpuName() const override;
156
162 virtual void waitForGpuToFinishWorkUpToThisPoint() override;
163
170 std::variant<VkCommandBuffer, Error> createOneTimeSubmitCommandBuffer();
171
182 [[nodiscard]] std::optional<Error>
183 submitWaitDestroyOneTimeSubmitCommandBuffer(VkCommandBuffer pOneTimeSubmitCommandBuffer);
184
198 [[nodiscard]] std::optional<Error> transitionImageLayout(
199 VkImage pImage,
200 VkFormat imageFormat,
201 VkImageAspectFlags aspect,
202 uint32_t levelCount,
203 uint32_t layerCount,
204 VkImageLayout oldLayout,
205 VkImageLayout newLayout);
206
212 virtual std::pair<unsigned int, unsigned int> getRenderTargetSize() const override;
213
219 VkDevice getLogicalDevice() const;
220
226 VkPhysicalDevice getPhysicalDevice() const;
227
233 VkInstance getInstance() const;
234
240 VkRenderPass getMainRenderPass() const;
241
247 VkRenderPass getDepthOnlyRenderPass() const;
248
258 VkRenderPass getShadowMappingRenderPass(bool bIsForPointLights) const;
259
265 VkCommandPool getCommandPool() const;
266
272 VkQueue getGraphicsQueue() const;
273
283 VkSampler getComputeTextureSampler() const;
284
292 VkSampler getShadowTextureSampler() const;
293
300 std::optional<VkExtent2D> getSwapChainExtent() const;
301
307 VkSampleCountFlagBits getMsaaSampleCount() const;
308
322
323 protected:
332
341 virtual std::variant<std::optional<AntialiasingQuality>, Error>
342 getMaxSupportedAntialiasingQuality() const override;
343
350 virtual void onFramebufferSizeChangedDerived(int iWidth, int iHeight) override;
351
358 [[nodiscard]] virtual std::optional<Error> onRenderSettingsChangedDerived() override;
359
369 virtual void waitForGpuToFinishUsingFrameResource(FrameResource* pFrameResource) override;
370
379 virtual bool isInitialized() const override;
380
381 private:
385 VkSurfaceCapabilitiesKHR capabilities;
386
388 std::vector<VkSurfaceFormatKHR> vSupportedFormats;
389
391 std::vector<VkPresentModeKHR> vSupportedPresentModes;
392 };
393
399 QueueFamilyIndices() = default;
400
406 bool isComplete() const {
407 return iGraphicsFamilyIndex.has_value() && iPresentFamilyIndex.has_value();
408 }
409
411 std::optional<uint32_t> iGraphicsFamilyIndex;
412
417 std::optional<uint32_t> iPresentFamilyIndex;
418 };
419
427 VkSemaphore pAcquireImageSemaphore = nullptr;
428
434 VkSemaphore pQueueSubmitSemaphore = nullptr;
435
441 };
442
448 static std::variant<std::vector<const char*>, Error> getRequiredVulkanInstanceExtensions();
449
459 static std::variant<std::string, Error>
460 isGpuSupportsUsedDeviceExtensions(VkPhysicalDevice pGpuDevice);
461
473 VkRenderPass pShadowMappingRenderPass,
474 VkCommandBuffer pCommandBuffer,
475 VkFramebuffer pFramebufferToUse,
476 uint32_t iShadowMapSize);
477
478#if defined(DEBUG)
485 [[nodiscard]] static std::optional<Error> makeSureUsedValidationLayersSupported();
486
497 static VkResult createDebugUtilsMessengerEXT(
498 VkInstance pInstance,
499 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
500 const VkAllocationCallbacks* pAllocator,
501 VkDebugUtilsMessengerEXT* pDebugMessenger);
502
510 static void destroyDebugUtilsMessengerEXT(
511 VkInstance pInstance,
512 VkDebugUtilsMessengerEXT pDebugMessenger,
513 const VkAllocationCallbacks* pAllocator);
514
522 static PFN_vkCmdBeginDebugUtilsLabelEXT requestVkCmdBeginDebugUtilsLabelEXT(VkInstance pInstance);
523
531 static PFN_vkCmdEndDebugUtilsLabelEXT requestVkCmdEndDebugUtilsLabelEXT(VkInstance pInstance);
532#endif
533
546 [[nodiscard]] std::optional<Error> initialize(const std::vector<std::string>& vBlacklistedGpuNames);
547
556 [[nodiscard]] std::optional<Error>
557 initializeVulkan(const std::vector<std::string>& vBlacklistedGpuNames);
558
564 [[nodiscard]] std::optional<Error> createVulkanInstance();
565
574 [[nodiscard]] std::optional<Error> createWindowSurface();
575
584 size_t rateGpuSuitability(VkPhysicalDevice pGpuDevice);
585
595 std::variant<std::string, Error> isDeviceSuitable(VkPhysicalDevice pGpu);
596
609 std::variant<SwapChainSupportDetails, Error> querySwapChainSupportDetails(VkPhysicalDevice pGpu);
610
621 std::variant<VulkanRenderer::QueueFamilyIndices, Error>
622 queryQueueFamilyIndices(VkPhysicalDevice pGpu);
623
638 std::variant<std::string, Error> isGpuSupportsSwapChain(VkPhysicalDevice pGpu);
639
650 [[nodiscard]] std::optional<Error>
651 pickPhysicalDevice(const std::vector<std::string>& vBlacklistedGpuNames);
652
660 [[nodiscard]] std::optional<Error> createLogicalDevice();
661
669 [[nodiscard]] std::optional<Error> createSwapChain();
670
678 [[nodiscard]] std::optional<Error> createCommandPool();
679
687 std::variant<VkExtent2D, Error>
688 pickSwapChainExtent(const VkSurfaceCapabilitiesKHR& surfaceCapabilities);
689
701 [[nodiscard]] std::optional<Error> createRenderPasses(bool bIsRendererInitialization);
702
710 [[nodiscard]] std::optional<Error> createMainRenderPass();
711
719 [[nodiscard]] std::optional<Error> createDepthOnlyRenderPass();
720
728 [[nodiscard]] std::optional<Error> createShadowMappingRenderPasses();
729
739 void destroySwapChainAndDependentResources(bool bDestroyPipelineManager);
740
748 [[nodiscard]] std::optional<Error> createTextureSamplers();
749
759 [[nodiscard]] std::optional<Error> createComputeTextureSampler();
760
770 [[nodiscard]] std::optional<Error> createShadowTextureSampler();
771
778
786 [[nodiscard]] std::optional<Error> createDepthImage();
787
796 [[nodiscard]] std::optional<Error> createMsaaImage();
797
804 [[nodiscard]] std::optional<Error> recreateSwapChainAndDependentResources();
805
811 [[nodiscard]] std::optional<Error> createSwapChainFramebuffers();
812
819 virtual void prepareRenderTargetForNextFrame() override;
820
832 virtual void prepareForDrawingNextFrame(
833 CameraProperties* pCameraProperties, FrameResource* pCurrentFrameResource) override;
834
841 void startMainRenderPass(VkCommandBuffer pCommandBuffer, size_t iAcquiredImageIndex);
842
849 void startDepthOnlyRenderPass(VkCommandBuffer pCommandBuffer, size_t iAcquiredImageIndex);
850
859 virtual void drawShadowMappingPass(
860 FrameResource* pCurrentFrameResource,
861 size_t iCurrentFrameResourceIndex,
862 GraphicsPipelineRegistry* pGraphicsPipelines) override;
863
871 virtual void drawMeshesDepthPrepass(
872 FrameResource* pCurrentFrameResource,
873 size_t iCurrentFrameResourceIndex,
874 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vOpaquePipelines) override;
875
886 FrameResource* pCurrentFrameResource,
887 size_t iCurrentFrameResourceIndex,
888 ComputeExecutionStage stage) override;
889
898 virtual void drawMeshesMainPass(
899 FrameResource* pCurrentFrameResource,
900 size_t iCurrentFrameResourceIndex,
901 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vOpaquePipelines,
902 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vTransparentPipelines)
903 override;
904
911 virtual void
912 present(FrameResource* pCurrentFrameResource, size_t iCurrentFrameResourceIndex) override;
913
922 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& pipelinesOfSpecificType,
923 VkCommandBuffer pCommandBuffer,
924 size_t iCurrentFrameResourceIndex);
925
931 [[nodiscard]] std::optional<Error> updateMsaaSampleCount();
932
943 VulkanFrameResource* pCurrentFrameResource,
944 size_t iCurrentFrameResourceIndex,
945 std::unordered_map<Pipeline*, std::unordered_set<ComputeShaderInterface*>>&
946 computePipelinesToSubmit);
947
949 VkInstance pInstance = nullptr;
950
952 VkSurfaceKHR pWindowSurface = nullptr;
953
955 VkPhysicalDevice pPhysicalDevice = nullptr;
956
958 VkDevice pLogicalDevice = nullptr;
959
961 VkQueue pGraphicsQueue = nullptr;
962
964 VkQueue pPresentQueue = nullptr;
965
967 VkSwapchainKHR pSwapChain = nullptr;
968
970 std::unique_ptr<VulkanResource> pDepthImage = nullptr;
971
980 std::unique_ptr<VulkanResource> pDepthImageNoMultisampling = nullptr;
981
983 std::unique_ptr<VulkanResource> pMsaaImage = nullptr;
984
986 VkRenderPass pDepthOnlyRenderPass = nullptr;
987
989 VkRenderPass pMainRenderPass = nullptr;
990
993
995 VkRenderPass pShadowMappingPointRenderPass = nullptr;
996
998 VkCommandPool pCommandPool = nullptr;
999
1006
1013
1020
1026 VkSampler pComputeTextureSampler = nullptr;
1027
1033 VkSampler pShadowTextureSampler = nullptr;
1034
1035#if defined(DEBUG)
1040 VkDebugUtilsMessengerEXT pValidationLayerDebugMessenger = nullptr;
1041#endif
1042
1048 std::vector<VkImage> vSwapChainImages;
1049
1055 std::vector<VkImageView> vSwapChainImageViews;
1056
1062 std::vector<VkFramebuffer> vSwapChainFramebuffersMainRenderPass;
1063
1070
1079 std::vector<std::pair<VkFence, size_t>> vSwapChainImageFenceRefs;
1080
1086 std::vector<SwapChainImageSemaphores> vImageSemaphores;
1087
1090
1092 std::vector<std::string> vSupportedGpuNames;
1093
1095 std::string sUsedGpuName;
1096
1099
1101 std::optional<VkExtent2D> swapChainExtent;
1102
1104 VkSampleCountFlagBits msaaSampleCount = VK_SAMPLE_COUNT_1_BIT;
1105
1108
1111
1114
1120
1123
1125 bool bIsBeingDestroyed = false;
1126
1128 static constexpr size_t iMainRenderPassColorAttachmentIndex = 0;
1129
1131 static constexpr size_t iMainRenderPassDepthAttachmentIndex = 1;
1132
1135
1138
1141
1143 static constexpr auto swapChainImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
1144
1146 static constexpr auto swapChainImageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
1147
1149 static constexpr auto depthImageFormat = VK_FORMAT_D32_SFLOAT;
1150
1152 static constexpr auto shadowMapFormat = VK_FORMAT_D32_SFLOAT;
1153
1157 static constexpr auto shadowMappingPointLightColorTargetFormat = VK_FORMAT_R32_SFLOAT;
1158
1160 static constexpr auto depthImageTiling = VK_IMAGE_TILING_OPTIMAL;
1161
1163 static constexpr auto indexTypeFormat = VK_INDEX_TYPE_UINT32;
1164
1166 static constexpr auto depthResolveMode = VK_RESOLVE_MODE_MAX_BIT;
1167
1169 static constexpr auto stencilResolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT;
1170
1172 static constexpr uint32_t iUsedVulkanVersion = VK_API_VERSION_1_2;
1173
1175 static inline const std::vector<const char*> vUsedDeviceExtensionNames = {
1176 VK_KHR_SWAPCHAIN_EXTENSION_NAME};
1177
1178#if defined(DEBUG)
1184 static inline const std::vector<const char*> vUsedValidationLayerNames = {
1185 "VK_LAYER_KHRONOS_validation"};
1186#endif
1187 };
1188} // namespace ne
Definition: CameraProperties.h:22
Definition: Error.h:27
Definition: GameManager.h:34
Definition: GpuResource.h:16
Definition: Pipeline.h:20
Definition: Renderer.h:43
GameManager * pGameManager
Definition: Renderer.h:870
Definition: VulkanRenderer.h:26
std::vector< VkImageView > vSwapChainImageViews
Definition: VulkanRenderer.h:1055
std::variant< std::string, Error > isGpuSupportsSwapChain(VkPhysicalDevice pGpu)
Definition: VulkanRenderer.cpp:826
virtual std::optional< Error > onRenderSettingsChangedDerived() override
Definition: VulkanRenderer.cpp:4026
virtual void executeComputeShadersOnGraphicsQueue(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, ComputeExecutionStage stage) override
Definition: VulkanRenderer.cpp:3533
VkInstance getInstance() const
Definition: VulkanRenderer.cpp:2793
VkRenderPass pShadowMappingPointRenderPass
Definition: VulkanRenderer.h:995
std::optional< Error > createSwapChain()
Definition: VulkanRenderer.cpp:1224
VkSampler getTextureSampler(TextureFilteringQuality filtering)
Definition: VulkanRenderer.cpp:2694
std::variant< VulkanRenderer::QueueFamilyIndices, Error > queryQueueFamilyIndices(VkPhysicalDevice pGpu)
Definition: VulkanRenderer.cpp:771
std::optional< Error > createComputeTextureSampler()
Definition: VulkanRenderer.cpp:2026
virtual void present(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex) override
Definition: VulkanRenderer.cpp:3635
std::optional< Error > createSwapChainFramebuffers()
Definition: VulkanRenderer.cpp:2330
static constexpr size_t iMainRenderPassColorAttachmentIndex
Definition: VulkanRenderer.h:1128
virtual void drawShadowMappingPass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, GraphicsPipelineRegistry *pGraphicsPipelines) override
Definition: VulkanRenderer.cpp:3033
static constexpr VkFormat getShadowMappingPointLightColorTargetFormat()
Definition: VulkanRenderer.h:61
VkRenderPass getDepthOnlyRenderPass() const
Definition: VulkanRenderer.cpp:2797
VkRenderPass getShadowMappingRenderPass(bool bIsForPointLights) const
Definition: VulkanRenderer.cpp:2799
VkSampler pTextureSamplerPointFiltering
Definition: VulkanRenderer.h:1005
void destroySwapChainAndDependentResources(bool bDestroyPipelineManager)
Definition: VulkanRenderer.cpp:1888
bool bIsVulkanInitialized
Definition: VulkanRenderer.h:1113
bool bNeedToRecreateSwapchain
Definition: VulkanRenderer.h:1119
virtual GpuResource * getDepthTextureNoMultisampling() override
Definition: VulkanRenderer.cpp:2818
VkCommandPool pCommandPool
Definition: VulkanRenderer.h:998
static constexpr auto depthImageFormat
Definition: VulkanRenderer.h:1149
std::optional< VkExtent2D > swapChainExtent
Definition: VulkanRenderer.h:1101
std::optional< Error > pickPhysicalDevice(const std::vector< std::string > &vBlacklistedGpuNames)
Definition: VulkanRenderer.cpp:902
static constexpr VkFormat getShadowMapFormat()
Definition: VulkanRenderer.h:53
std::optional< Error > createShadowMappingRenderPasses()
Definition: VulkanRenderer.cpp:1760
VkRenderPass getMainRenderPass() const
Definition: VulkanRenderer.cpp:2795
uint32_t iSwapChainImageCount
Definition: VulkanRenderer.h:1107
std::optional< Error > transitionImageLayout(VkImage pImage, VkFormat imageFormat, VkImageAspectFlags aspect, uint32_t levelCount, uint32_t layerCount, VkImageLayout oldLayout, VkImageLayout newLayout)
Definition: VulkanRenderer.cpp:2919
std::unique_ptr< VulkanResource > pDepthImage
Definition: VulkanRenderer.h:970
virtual void waitForGpuToFinishWorkUpToThisPoint() override
Definition: VulkanRenderer.cpp:2742
std::optional< Error > createDepthImage()
Definition: VulkanRenderer.cpp:2146
std::optional< Error > initialize(const std::vector< std::string > &vBlacklistedGpuNames)
Definition: VulkanRenderer.cpp:213
VkSampleCountFlagBits getMsaaSampleCount() const
Definition: VulkanRenderer.cpp:2816
std::optional< Error > initializeVulkan(const std::vector< std::string > &vBlacklistedGpuNames)
Definition: VulkanRenderer.cpp:234
size_t rateGpuSuitability(VkPhysicalDevice pGpuDevice)
Definition: VulkanRenderer.cpp:504
std::variant< SwapChainSupportDetails, Error > querySwapChainSupportDetails(VkPhysicalDevice pGpu)
Definition: VulkanRenderer.cpp:700
static constexpr auto swapChainImageColorSpace
Definition: VulkanRenderer.h:1146
VkDevice pLogicalDevice
Definition: VulkanRenderer.h:958
VkCommandPool getCommandPool() const
Definition: VulkanRenderer.cpp:2806
bool bIsBeingDestroyed
Definition: VulkanRenderer.h:1125
void startDepthOnlyRenderPass(VkCommandBuffer pCommandBuffer, size_t iAcquiredImageIndex)
Definition: VulkanRenderer.cpp:2620
bool isUsedDepthImageFormatSupported()
Definition: VulkanRenderer.cpp:2131
std::unique_ptr< VulkanResource > pMsaaImage
Definition: VulkanRenderer.h:983
VkQueue pPresentQueue
Definition: VulkanRenderer.h:964
std::optional< Error > createWindowSurface()
Definition: VulkanRenderer.cpp:476
static constexpr auto depthImageTiling
Definition: VulkanRenderer.h:1160
VkSampler pComputeTextureSampler
Definition: VulkanRenderer.h:1026
std::optional< Error > submitWaitDestroyOneTimeSubmitCommandBuffer(VkCommandBuffer pOneTimeSubmitCommandBuffer)
Definition: VulkanRenderer.cpp:2869
std::vector< std::string > vSupportedGpuNames
Definition: VulkanRenderer.h:1092
static constexpr auto depthResolveMode
Definition: VulkanRenderer.h:1166
virtual std::string getCurrentlyUsedGpuName() const override
Definition: VulkanRenderer.cpp:2740
VkDevice getLogicalDevice() const
Definition: VulkanRenderer.cpp:2789
virtual std::vector< std::string > getSupportedGpuNames() const override
Definition: VulkanRenderer.cpp:2715
VkRenderPass pShadowMappingDirectionalSpotRenderPass
Definition: VulkanRenderer.h:992
virtual std::variant< std::set< std::pair< unsigned int, unsigned int > >, Error > getSupportedRenderResolutions() const override
Definition: VulkanRenderer.cpp:2718
std::variant< VkCommandBuffer, Error > createOneTimeSubmitCommandBuffer()
Definition: VulkanRenderer.cpp:2831
std::optional< Error > createTextureSamplers()
Definition: VulkanRenderer.cpp:1951
std::unique_ptr< VulkanResource > pDepthImageNoMultisampling
Definition: VulkanRenderer.h:980
static bool dispatchComputeShadersOnGraphicsQueue(VulkanFrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, std::unordered_map< Pipeline *, std::unordered_set< ComputeShaderInterface * > > &computePipelinesToSubmit)
Definition: VulkanRenderer.cpp:3978
static std::variant< std::unique_ptr< Renderer >, std::pair< Error, std::string > > create(GameManager *pGameManager, const std::vector< std::string > &vBlacklistedGpuNames)
Definition: VulkanRenderer.cpp:2679
static void setObjectDebugOnlyName(Renderer *pRenderer, void *pObject, VkObjectType objectType, const std::string &sResourceName)
Definition: VulkanRenderer.cpp:3337
bool bIsUsingMsaaRenderTarget
Definition: VulkanRenderer.h:1122
static constexpr size_t iDepthOnlyRenderPassDepthImageAttachmentIndex
Definition: VulkanRenderer.h:1137
static const std::vector< const char * > vUsedDeviceExtensionNames
Definition: VulkanRenderer.h:1175
uint32_t iLastAcquiredImageIndex
Definition: VulkanRenderer.h:1110
virtual std::variant< std::set< std::pair< unsigned int, unsigned int > >, Error > getSupportedRefreshRates() const override
Definition: VulkanRenderer.cpp:2728
std::variant< std::string, Error > isDeviceSuitable(VkPhysicalDevice pGpu)
Definition: VulkanRenderer.cpp:560
VkSampler getComputeTextureSampler() const
Definition: VulkanRenderer.cpp:2810
static constexpr VkFormat getDepthImageFormat()
Definition: VulkanRenderer.h:46
QueueFamilyIndices physicalDeviceQueueFamilyIndices
Definition: VulkanRenderer.h:1098
virtual RendererType getType() const override
Definition: VulkanRenderer.cpp:2733
std::optional< Error > updateMsaaSampleCount()
Definition: VulkanRenderer.cpp:3916
static constexpr auto shadowMappingPointLightColorTargetFormat
Definition: VulkanRenderer.h:1157
std::vector< SwapChainImageSemaphores > vImageSemaphores
Definition: VulkanRenderer.h:1086
static constexpr size_t iMainRenderPassDepthAttachmentIndex
Definition: VulkanRenderer.h:1131
static constexpr auto indexTypeFormat
Definition: VulkanRenderer.h:1163
std::optional< Error > createVulkanInstance()
Definition: VulkanRenderer.cpp:377
virtual void drawMeshesDepthPrepass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vOpaquePipelines) override
Definition: VulkanRenderer.cpp:3391
VkSampleCountFlagBits msaaSampleCount
Definition: VulkanRenderer.h:1104
std::optional< Error > createMsaaImage()
Definition: VulkanRenderer.cpp:2205
VkPhysicalDevice getPhysicalDevice() const
Definition: VulkanRenderer.cpp:2791
virtual std::variant< std::optional< AntialiasingQuality >, Error > getMaxSupportedAntialiasingQuality() const override
Definition: VulkanRenderer.cpp:98
VkSampler pTextureSamplerAnisotropicFiltering
Definition: VulkanRenderer.h:1019
static constexpr size_t iDepthOnlyRenderPassDepthResolveTargetAttachmentIndex
Definition: VulkanRenderer.h:1140
VkSampler pTextureSamplerLinearFiltering
Definition: VulkanRenderer.h:1012
VkPhysicalDevice pPhysicalDevice
Definition: VulkanRenderer.h:955
virtual void drawMeshesMainPass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vOpaquePipelines, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vTransparentPipelines) override
Definition: VulkanRenderer.cpp:3600
std::vector< VkFramebuffer > vSwapChainFramebuffersDepthOnlyRenderPass
Definition: VulkanRenderer.h:1069
std::optional< Error > recreateSwapChainAndDependentResources()
Definition: VulkanRenderer.cpp:2249
std::optional< Error > createRenderPasses(bool bIsRendererInitialization)
Definition: VulkanRenderer.cpp:1469
static std::variant< std::string, Error > isGpuSupportsUsedDeviceExtensions(VkPhysicalDevice pGpuDevice)
Definition: VulkanRenderer.cpp:4091
virtual bool isInitialized() const override
Definition: VulkanRenderer.cpp:4062
VkQueue getGraphicsQueue() const
Definition: VulkanRenderer.cpp:2808
static constexpr auto stencilResolveMode
Definition: VulkanRenderer.h:1169
void startMainRenderPass(VkCommandBuffer pCommandBuffer, size_t iAcquiredImageIndex)
Definition: VulkanRenderer.cpp:2589
std::optional< Error > createLogicalDevice()
Definition: VulkanRenderer.cpp:1136
std::optional< Error > createMainRenderPass()
Definition: VulkanRenderer.cpp:1499
std::string sUsedGpuName
Definition: VulkanRenderer.h:1095
virtual void onFramebufferSizeChangedDerived(int iWidth, int iHeight) override
Definition: VulkanRenderer.cpp:3891
std::variant< VkExtent2D, Error > pickSwapChainExtent(const VkSurfaceCapabilitiesKHR &surfaceCapabilities)
Definition: VulkanRenderer.cpp:1434
VkSwapchainKHR pSwapChain
Definition: VulkanRenderer.h:967
std::optional< VkExtent2D > getSwapChainExtent() const
Definition: VulkanRenderer.cpp:2814
static uint32_t getUsedVulkanVersion()
Definition: VulkanRenderer.cpp:211
std::vector< VkImage > vSwapChainImages
Definition: VulkanRenderer.h:1048
static std::variant< std::vector< const char * >, Error > getRequiredVulkanInstanceExtensions()
Definition: VulkanRenderer.cpp:4064
size_t iCurrentImageSemaphore
Definition: VulkanRenderer.h:1089
virtual std::string getUsedApiVersion() const override
Definition: VulkanRenderer.cpp:2735
static void startShadowMappingRenderPass(VkRenderPass pShadowMappingRenderPass, VkCommandBuffer pCommandBuffer, VkFramebuffer pFramebufferToUse, uint32_t iShadowMapSize)
Definition: VulkanRenderer.cpp:2648
VkSurfaceKHR pWindowSurface
Definition: VulkanRenderer.h:952
std::optional< Error > createCommandPool()
Definition: VulkanRenderer.cpp:1417
static constexpr size_t iMainRenderPassColorResolveTargetAttachmentIndex
Definition: VulkanRenderer.h:1134
static constexpr auto shadowMapFormat
Definition: VulkanRenderer.h:1152
VkInstance pInstance
Definition: VulkanRenderer.h:949
VkSampler getShadowTextureSampler() const
Definition: VulkanRenderer.cpp:2812
static constexpr auto swapChainImageFormat
Definition: VulkanRenderer.h:1143
std::optional< Error > createDepthOnlyRenderPass()
Definition: VulkanRenderer.cpp:1627
VkRenderPass pMainRenderPass
Definition: VulkanRenderer.h:989
virtual void prepareRenderTargetForNextFrame() override
Definition: VulkanRenderer.cpp:2479
virtual void prepareForDrawingNextFrame(CameraProperties *pCameraProperties, FrameResource *pCurrentFrameResource) override
Definition: VulkanRenderer.cpp:2501
VkRenderPass pDepthOnlyRenderPass
Definition: VulkanRenderer.h:986
std::vector< std::pair< VkFence, size_t > > vSwapChainImageFenceRefs
Definition: VulkanRenderer.h:1079
static constexpr uint32_t iUsedVulkanVersion
Definition: VulkanRenderer.h:1172
std::vector< VkFramebuffer > vSwapChainFramebuffersMainRenderPass
Definition: VulkanRenderer.h:1062
VkQueue pGraphicsQueue
Definition: VulkanRenderer.h:961
void drawMeshesMainPassSpecificPipelines(const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &pipelinesOfSpecificType, VkCommandBuffer pCommandBuffer, size_t iCurrentFrameResourceIndex)
Definition: VulkanRenderer.cpp:3747
virtual void waitForGpuToFinishUsingFrameResource(FrameResource *pFrameResource) override
Definition: VulkanRenderer.cpp:4048
std::optional< Error > createShadowTextureSampler()
Definition: VulkanRenderer.cpp:2077
virtual std::pair< unsigned int, unsigned int > getRenderTargetSize() const override
Definition: VulkanRenderer.cpp:3026
VkSampler pShadowTextureSampler
Definition: VulkanRenderer.h:1033
Definition: FrameResource.h:15
Definition: PipelineRegistry.hpp:31
Definition: VulkanFrameResource.h:17
Definition: VulkanRenderer.h:398
std::optional< uint32_t > iPresentFamilyIndex
Definition: VulkanRenderer.h:417
bool isComplete() const
Definition: VulkanRenderer.h:406
std::optional< uint32_t > iGraphicsFamilyIndex
Definition: VulkanRenderer.h:411
Definition: VulkanRenderer.h:421
VkSemaphore pQueueSubmitSemaphore
Definition: VulkanRenderer.h:434
size_t iUsedFrameResourceIndex
Definition: VulkanRenderer.h:440
VkSemaphore pAcquireImageSemaphore
Definition: VulkanRenderer.h:427
Definition: VulkanRenderer.h:383
std::vector< VkPresentModeKHR > vSupportedPresentModes
Definition: VulkanRenderer.h:391
std::vector< VkSurfaceFormatKHR > vSupportedFormats
Definition: VulkanRenderer.h:388
VkSurfaceCapabilitiesKHR capabilities
Definition: VulkanRenderer.h:385