Files
Seele/src/Engine/Graphics/Vulkan/VulkanGraphicsResources.h
T

155 lines
3.6 KiB
C++
Raw Normal View History

#pragma once
2020-03-09 12:30:07 +01:00
#include "Graphics/GraphicsResources.h"
2020-03-13 12:44:33 +01:00
#include <vulkan/vulkan.h>
2020-03-09 12:30:07 +01:00
namespace Seele
{
DECLARE_REF(VulkanDescriptorAllocator);
DECLARE_REF(VulkanGraphics);
class VulkanDescriptorLayout : public DescriptorLayout
{
public:
VulkanDescriptorLayout(PVulkanGraphics graphics)
: graphics(graphics)
, layoutHandle(VK_NULL_HANDLE)
2020-03-09 12:30:07 +01:00
{}
virtual ~VulkanDescriptorLayout();
virtual void create();
inline VkDescriptorSetLayout getHandle() const
{
return layoutHandle;
}
private:
PVulkanGraphics graphics;
Array<VkDescriptorSetLayoutBinding> bindings;
VkDescriptorSetLayout layoutHandle;
friend class VulkanPipelineStateCacheManager;
};
DEFINE_REF(VulkanDescriptorLayout);
class VulkanPipelineLayout : public PipelineLayout
{
public:
VulkanPipelineLayout(PVulkanGraphics graphics)
: graphics(graphics)
, layoutHash(0)
, layoutHandle(VK_NULL_HANDLE)
2020-03-09 12:30:07 +01:00
{}
2020-03-13 12:44:33 +01:00
virtual ~VulkanPipelineLayout();
2020-03-09 12:30:07 +01:00
virtual void create();
inline VkPipelineLayout getHandle() const
{
return layoutHandle;
}
2020-03-13 12:44:33 +01:00
virtual uint32 getHash() const
{
return layoutHash;
}
2020-03-09 12:30:07 +01:00
private:
Array<VkDescriptorSetLayout> vulkanDescriptorLayouts;
uint32 layoutHash;
VkPipelineLayout layoutHandle;
PVulkanGraphics graphics;
friend class VulkanPipelineStateCacheManager;
};
DEFINE_REF(VulkanPipelineLayout);
class VulkanDescriptorSet : public DescriptorSet
{
public:
VulkanDescriptorSet(PVulkanGraphics graphics, PVulkanDescriptorAllocator owner)
: graphics(graphics)
, owner(owner)
, setHandle(VK_NULL_HANDLE)
{}
2020-03-09 12:30:07 +01:00
virtual ~VulkanDescriptorSet();
virtual void updateBuffer(uint32_t binding, PUniformBuffer uniformBuffer);
virtual void updateBuffer(uint32_t binding, PStructuredBuffer uniformBuffer);
virtual void updateSampler(uint32_t binding, PSamplerState samplerState);
virtual void updateTexture(uint32_t binding, PTexture texture, PSamplerState sampler = nullptr);
virtual bool operator<(PDescriptorSet other);
inline VkDescriptorSet getHandle() const
{
return setHandle;
}
private:
virtual void writeChanges();
Array<VkDescriptorImageInfo> imageInfos;
Array<VkDescriptorBufferInfo> bufferInfos;
Array<VkWriteDescriptorSet> writeDescriptors;
VkDescriptorSet setHandle;
PVulkanDescriptorAllocator owner;
2020-03-13 12:44:33 +01:00
PVulkanGraphics graphics;
2020-03-09 12:30:07 +01:00
friend class VulkanDescriptorAllocator;
};
DEFINE_REF(VulkanDescriptorSet);
class VulkanDescriptorAllocator : public DescriptorAllocator
{
public:
2020-03-13 12:44:33 +01:00
VulkanDescriptorAllocator(PVulkanGraphics graphics, VulkanDescriptorLayout& layout);
2020-03-09 12:30:07 +01:00
~VulkanDescriptorAllocator();
virtual void allocateDescriptorSet(PDescriptorSet& descriptorSet);
inline VkDescriptorPool getHandle()
{
return poolHandle;
}
private:
2020-03-13 12:44:33 +01:00
PVulkanGraphics graphics;
2020-03-09 12:30:07 +01:00
int maxSets = 512;
VkDescriptorPool poolHandle;
VulkanDescriptorLayout& layout;
};
DEFINE_REF(VulkanDescriptorAllocator);
2020-03-13 12:44:33 +01:00
class VulkanUniformBuffer : public UniformBuffer
{
};
DEFINE_REF(VulkanUniformBuffer);
class VulkanStructuredBuffer : public StructuredBuffer
{
};
DEFINE_REF(VulkanStructuredBuffer);
class VulkanTextureBase
{
private:
uint32 sizeX;
uint32 sizeY;
uint32 sizeZ;
uint32 arrayCount;
uint32 layerCount;
};
DEFINE_REF(VulkanTextureBase);
class VulkanTexture2D : public Texture2D
{
public:
private:
PVulkanTextureBase textureHandle;
};
DEFINE_REF(VulkanTexture2D);
class VulkanSamplerState
{
public:
VkSampler sampler;
};
DEFINE_REF(VulkanSamplerState);
class VulkanViewport : public Viewport
{
public:
private:
uint32 sizeX;
uint32 sizeY;
uint32 offsetX;
uint32 offsetY;
VkSwapchainKHR swapchain;
void* windowHandle;
};
DECLARE_REF(VulkanViewport);
2020-03-09 12:30:07 +01:00
}