196 lines
3.6 KiB
C++
196 lines
3.6 KiB
C++
#ifndef HGL_GRAPH_VULKAN_INCLUDE
|
|
#define HGL_GRAPH_VULKAN_INCLUDE
|
|
|
|
#include<hgl/type/List.h>
|
|
#include<hgl/math/Math.h>
|
|
#include<hgl/type/String.h>
|
|
#include<hgl/type/Map.h>
|
|
#include<hgl/graph/VKNamespace.h>
|
|
#include<hgl/graph/VKFormat.h>
|
|
#include<hgl/graph/VKPrimitiveType.h>
|
|
#include<hgl/graph/VKStruct.h>
|
|
#include<hgl/graph/ViewportInfo.h>
|
|
#include<hgl/graph/VKRenderbufferInfo.h>
|
|
|
|
VK_NAMESPACE_BEGIN
|
|
|
|
#ifndef VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
|
constexpr size_t VK_DESCRIPTOR_TYPE_BEGIN_RANGE=VK_DESCRIPTOR_TYPE_SAMPLER;
|
|
#endif//VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
|
|
|
#ifndef VK_DESCRIPTOR_TYPE_END_RANGE
|
|
constexpr size_t VK_DESCRIPTOR_TYPE_END_RANGE=VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT;
|
|
#endif//VK_DESCRIPTOR_TYPE_END_RANGE
|
|
|
|
#ifndef VK_DESCRIPTOR_TYPE_RANGE_SIZE
|
|
constexpr size_t VK_DESCRIPTOR_TYPE_RANGE_SIZE=VK_DESCRIPTOR_TYPE_END_RANGE-VK_DESCRIPTOR_TYPE_BEGIN_RANGE+1;
|
|
#endif//VK_DESCRIPTOR_TYPE_RANGE_SIZE
|
|
|
|
struct VertexAttribDataPtr
|
|
{
|
|
const char * name;
|
|
const VkFormat format;
|
|
const void * data;
|
|
};
|
|
|
|
using BindingMap =Map<AnsiString,int>;
|
|
using BindingMapArray =BindingMap[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
|
|
|
class GraphModule;
|
|
class RenderFramework;
|
|
|
|
class VulkanInstance;
|
|
class GPUPhysicalDevice;
|
|
class GPUDevice;
|
|
struct GPUDeviceAttribute;
|
|
class DeviceQueue;
|
|
class ImageView;
|
|
class Framebuffer;
|
|
struct Swapchain;
|
|
class IRenderTarget;
|
|
class RenderTarget;
|
|
class MFRenderTarget;
|
|
class SwapchainRenderTarget;
|
|
|
|
struct CopyBufferToImageInfo;
|
|
|
|
class Texture;
|
|
class Texture1D;
|
|
class Texture1DArray;
|
|
class Texture2D;
|
|
class Texture2DArray;
|
|
class Texture3D;
|
|
class TextureCube;
|
|
class TextureCubeArray;
|
|
|
|
class Sampler;
|
|
|
|
class TileData;
|
|
|
|
class DeviceMemory;
|
|
class DeviceBuffer;
|
|
struct DeviceBufferData;
|
|
|
|
struct PrimitiveDataBuffer;
|
|
struct PrimitiveRenderData;
|
|
|
|
class VertexAttribBuffer;
|
|
using VAB=VertexAttribBuffer;
|
|
|
|
class IndexBuffer;
|
|
|
|
class VABMap;
|
|
class IBMap;
|
|
|
|
class GPUCmdBuffer;
|
|
class RenderCmdBuffer;
|
|
class TextureCmdBuffer;
|
|
|
|
class RenderPass;
|
|
class DeviceRenderPassManage;
|
|
|
|
class Fence;
|
|
class Semaphore;
|
|
|
|
struct PipelineLayoutData;
|
|
class DescriptorSet;
|
|
|
|
struct VertexInputAttribute;
|
|
|
|
class ShaderResource;
|
|
class ShaderModule;
|
|
class ShaderModuleMap;
|
|
class MaterialDescriptorManager;
|
|
|
|
class Material;
|
|
class MaterialParameters;
|
|
class MaterialInstance;
|
|
struct PipelineData;
|
|
enum class InlinePipeline;
|
|
class Pipeline;
|
|
|
|
struct VAConfig;
|
|
class VILConfig;
|
|
class VertexInput;
|
|
|
|
struct VertexInputFormat;
|
|
using VIF=VertexInputFormat;
|
|
|
|
class VertexInputLayout;
|
|
using VIL=VertexInputLayout;
|
|
|
|
class PrimitiveData;
|
|
class Primitive;
|
|
class Renderable;
|
|
|
|
class VertexDataManager;
|
|
using VDM=VertexDataManager;
|
|
|
|
class IndirectDrawBuffer;
|
|
class IndirectDrawIndexedBuffer;
|
|
class IndirectDispatchBuffer;
|
|
|
|
class RenderResource;
|
|
|
|
class StaticMesh;
|
|
|
|
enum class SharingMode
|
|
{
|
|
Exclusive = 0,
|
|
Concurrent
|
|
};//
|
|
|
|
enum class Filter
|
|
{
|
|
Nearest=0,
|
|
Linear,
|
|
};//
|
|
|
|
enum ImageTiling
|
|
{
|
|
Optimal=0,
|
|
Linear
|
|
};//
|
|
|
|
inline const uint32_t GetMipLevel(const VkExtent2D &ext)
|
|
{
|
|
return hgl::GetMipLevel(ext.width,ext.height);
|
|
}
|
|
|
|
inline const uint32_t GetMipLevel(const VkExtent3D &ext)
|
|
{
|
|
return hgl::GetMipLevel(ext.width,ext.height,ext.depth);
|
|
}
|
|
|
|
/**
|
|
* 索引类型,等同于VkIndexType
|
|
*/
|
|
enum IndexType:int
|
|
{
|
|
AUTO=-1,
|
|
U16=0,
|
|
U32,
|
|
U8=VK_INDEX_TYPE_UINT8_EXT,
|
|
|
|
ERR=VK_INDEX_TYPE_MAX_ENUM
|
|
};
|
|
|
|
inline const bool IsIndexType(const IndexType it)
|
|
{
|
|
return it>=U16&&it<=U8;
|
|
}
|
|
|
|
//Push Constant max-lengths:
|
|
//
|
|
// 256 bytes: nvidia,arm
|
|
// 128 bytes: amd,intel,powervr,adreno
|
|
|
|
inline void copy(VkExtent3D &e3d,const VkExtent2D &e2d,const uint32 depth=1)
|
|
{
|
|
e3d.width =e2d.width;
|
|
e3d.height =e2d.height;
|
|
e3d.depth =depth;
|
|
}
|
|
VK_NAMESPACE_END
|
|
#endif//HGL_GRAPH_VULKAN_INCLUDE
|