15#ifndef GPUDISPLAYBACKENDVULKAN_H
16#define GPUDISPLAYBACKENDVULKAN_H
19#include <vulkan/vulkan.hpp>
22#include <unordered_map>
39 std::vector<vk::SurfaceFormatKHR>
formats;
56 std::unique_ptr<char[]>
data;
73 void prepareDraw(
const hmm_mat4& proj,
const hmm_mat4& view,
bool requestScreenshot,
bool toMixBuffer,
float includeMixImage)
override;
74 void finishDraw(
bool doScreenshot,
bool toMixBuffer,
float includeMixImage)
override;
75 void finishFrame(
bool doScreenshot,
bool toMixBuffer,
float includeMixImage)
override;
78 void mixImages(vk::CommandBuffer cmdBuffer,
float mixSlaveImage);
86 double checkDevice(vk::PhysicalDevice device,
const std::vector<const char*>& reqDeviceExtensions);
87 vk::Extent2D
chooseSwapExtent(
const vk::SurfaceCapabilitiesKHR& capabilities);
89 VulkanBuffer createBuffer(
size_t size,
const void* srcData =
nullptr, vk::BufferUsageFlags
type = vk::BufferUsageFlagBits::eVertexBuffer, int32_t deviceMemory = 1);
92 VulkanImage createImage(uint32_t sizex, uint32_t sizey,
const void* srcData =
nullptr,
size_t srcSize = 0, vk::Format
format = vk::Format::eR8G8B8A8Srgb);
97 void startFillCommandBuffer(vk::CommandBuffer& commandBuffer, uint32_t imageIndex,
bool toMixBuffer =
false);
112 void createSwapChain(
bool forScreenshot =
false,
bool forMixing =
false);
127 void addFontSymbol(int32_t symbol, int32_t sizex, int32_t sizey, int32_t offsetx, int32_t offsety, int32_t advance,
void*
data)
override;
129 void OpenGLPrint(
const char* s,
float x,
float y,
float*
color,
float scale)
override;
152 std::unordered_map<std::string, vk::ShaderModule>
mShaders;
void OpenGLPrint(const char *s, float x, float y, float *color, float scale) override
vk::CommandBuffer getSingleTimeCommandBuffer()
std::vector< vk::Fence > mInFlightFence
std::vector< vk::CommandBuffer > mCommandBuffersMix
vk::RenderPass mRenderPassTexture
std::vector< vk::CommandBuffer > mCommandBuffers
void setMixDescriptor(int32_t descriptorIndex, int32_t imageIndex)
std::vector< vk::Semaphore > mRenderFinishedSemaphore
vk::DescriptorPool mDescriptorPool
vk::DescriptorSetLayout mUniformDescriptor
VulkanBuffer mIndirectCommandBuffer
void prepareDraw(const hmm_mat4 &proj, const hmm_mat4 &view, bool requestScreenshot, bool toMixBuffer, float includeMixImage) override
std::vector< vk::Pipeline > mPipelines
vk::CommandBuffer mCurrentCommandBuffer
void createCommandBuffers()
void resizeScene(uint32_t width, uint32_t height) override
vk::Fence mSingleCommitFence
int32_t mCurrentCommandBufferLastPipeline
uint32_t DepthBits() override
void submitSingleTimeCommandBuffer(vk::CommandBuffer commandBuffer)
std::vector< VulkanImage > mDownsampleImages
void clearUniformLayoutsAndBuffers()
float getYFactor() const override
void writeToBuffer(VulkanBuffer &buffer, size_t size, const void *srcData)
std::vector< vk::ImageView > mSwapChainImageViews
std::vector< VulkanImage > mMSAAImages
void pointSizeFactor(float factor) override
std::vector< FontSymbolVulkan > mFontSymbols
vk::SwapchainKHR mSwapChain
int32_t InitBackendA() override
void clearImage(VulkanImage &image)
std::vector< vk::ImageView * > mRenderTargetView
std::vector< vk::Framebuffer > mFramebuffersTexture
void finishText() override
void addFontSymbol(int32_t symbol, int32_t sizex, int32_t sizey, int32_t offsetx, int32_t offsety, int32_t advance, void *data) override
bool backendNeedRedraw() override
vk::SampleCountFlagBits mMSAASampleCount
std::vector< vk::Framebuffer > mFramebuffersText
void mixImages(vk::CommandBuffer cmdBuffer, float mixSlaveImage)
void clearVertexBuffers()
void createTextureSampler()
void recreateRendering(bool forScreenshot=false, bool forMixing=false)
std::vector< VulkanBuffer > mFontVertexBuffer
void endFillCommandBuffer(vk::CommandBuffer &commandBuffer)
uint32_t drawVertices(const vboList &v, const drawType t) override
vk::SurfaceFormatKHR mSurfaceFormat
bool mCommandBufferPerImage
std::vector< vk::CommandBuffer > mCommandBuffersDownsample
void ActivateColor(std::array< float, 4 > &color) override
std::vector< vk::Image > mSwapChainImages
void initializeTextDrawing() override
void clearBuffer(VulkanBuffer &buffer)
VulkanBuffer mMixingTextureVertexArray
std::vector< vk::Semaphore > mMixFinishedSemaphore
vk::Sampler mTextureSampler
std::vector< vk::Semaphore > mTextFinishedSemaphore
uint32_t mCurrentImageIndex
void updateFontTextureDescriptor()
void createUniformLayoutsAndBuffers()
void transitionImageLayout(vk::CommandBuffer commandBuffer, vk::Image image, vk::Format format, vk::ImageLayout oldLayout, vk::ImageLayout newLayout)
void needRecordCommandBuffers()
std::vector< VulkanBuffer > mUniformBuffersMat[3]
double checkDevice(vk::PhysicalDevice device, const std::vector< const char * > &reqDeviceExtensions)
bool mCommandInfrastructureCreated
void updateSwapChainDetails(const vk::PhysicalDevice &device)
std::vector< VulkanImage > mMixImages
vk::CommandPool mCommandPool
void finishDraw(bool doScreenshot, bool toMixBuffer, float includeMixImage) override
bool mCubicFilterSupported
void writeToImage(VulkanImage &image, const void *srcData, size_t srcSize)
vk::RenderPass mRenderPass
void createSemaphoresAndFences()
std::vector< vk::DescriptorSet > mDescriptorSets[3]
vecpod< float > mFontVertexBufferHost
vk::PipelineLayout mPipelineLayout
void clearOffscreenBuffers()
vk::DescriptorSetLayout mUniformDescriptorTexture
void setDepthBuffer() override
bool mSwapchainImageReadable
void downsampleToFramebuffer(vk::CommandBuffer &commandBuffer)
void ExitBackendA() override
vk::Extent2D chooseSwapExtent(const vk::SurfaceCapabilitiesKHR &capabilities)
vk::RenderPass mRenderPassText
void clearSemaphoresAndFences()
~GPUDisplayBackendVulkan() override
std::vector< vk::Framebuffer > mFramebuffers
void readImageToPixels(vk::Image image, vk::ImageLayout layout, std::vector< char > &pixels)
int32_t getMaxMSAA() const override
VulkanImage createImage(uint32_t sizex, uint32_t sizey, const void *srcData=nullptr, size_t srcSize=0, vk::Format format=vk::Format::eR8G8B8A8Srgb)
std::vector< vk::Semaphore > mDownsampleFinishedSemaphore
std::vector< TextDrawCommand > mTextDrawCommands
void clearTextureSampler()
vk::PipelineLayout mPipelineLayoutTexture
SwapChainSupportDetails mSwapChainDetails
uint32_t mMaxMSAAsupported
std::unordered_map< std::string, vk::ShaderModule > mShaders
void finishFrame(bool doScreenshot, bool toMixBuffer, float includeMixImage) override
void createSwapChain(bool forScreenshot=false, bool forMixing=false)
std::vector< vk::Semaphore > mImageAvailableSemaphore
int32_t mCurrentBufferSet
void startFillCommandBuffer(vk::CommandBuffer &commandBuffer, uint32_t imageIndex, bool toMixBuffer=false)
std::vector< vk::CommandBuffer > mCommandBuffersTexture
vk::PhysicalDevice mPhysicalDevice
void SetVSync(bool enable) override
vk::DebugUtilsMessengerEXT mDebugMessenger
GPUDisplayBackendVulkan()
VulkanBuffer createBuffer(size_t size, const void *srcData=nullptr, vk::BufferUsageFlags type=vk::BufferUsageFlagBits::eVertexBuffer, int32_t deviceMemory=1)
std::vector< VulkanImage > mZImages
void createOffscreenBuffers(bool forScreenshot=false, bool forMixing=false)
bool mEnableValidationLayers
std::vector< bool > mCommandBufferUpToDate
void lineWidthFactor(float factor) override
void prepareText() override
void clearCommandBuffers()
std::vector< vk::CommandBuffer > mCommandBuffersText
bool mMustUpdateSwapChain
vk::PresentModeKHR mPresentMode
void loadDataToGPU(size_t totalVertizes) override
std::vector< VulkanBuffer > mUniformBuffersCol[3]
std::tuple< uint32_t, uint32_t, int32_t > vboList
GLint GLsizei GLsizei height
GLint GLint GLsizei GLint GLenum GLenum type
GLint GLint GLsizei GLint GLenum GLenum const void * pixels
GLint GLint GLsizei GLint GLenum format
std::unique_ptr< char[]> data
std::vector< vk::SurfaceFormatKHR > formats
vk::SurfaceCapabilitiesKHR capabilities
std::vector< vk::PresentModeKHR > presentModes
typename std::vector< T, vecpod_allocator< T > > vecpod