2020-02-25 00:44:40 +01:00
|
|
|
#pragma once
|
2020-03-02 19:07:49 +01:00
|
|
|
#include "Containers/Array.h"
|
2024-06-09 12:20:04 +02:00
|
|
|
#include "Initializer.h"
|
|
|
|
|
#include "MinimalEngine.h"
|
|
|
|
|
#include "RenderTarget.h"
|
|
|
|
|
#include "Resources.h"
|
2020-02-25 00:44:40 +01:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
|
|
|
|
|
namespace Seele {
|
|
|
|
|
namespace Gfx {
|
2023-10-26 18:37:29 +02:00
|
|
|
DECLARE_REF(Window)
|
|
|
|
|
DECLARE_REF(Viewport)
|
|
|
|
|
DECLARE_REF(ShaderCompiler)
|
|
|
|
|
DECLARE_REF(Texture)
|
|
|
|
|
DECLARE_REF(Texture2D)
|
|
|
|
|
DECLARE_REF(Texture3D)
|
|
|
|
|
DECLARE_REF(TextureCube)
|
|
|
|
|
DECLARE_REF(DescriptorLayout)
|
|
|
|
|
DECLARE_REF(VertexShader)
|
|
|
|
|
DECLARE_REF(FragmentShader)
|
|
|
|
|
DECLARE_REF(ComputeShader)
|
|
|
|
|
DECLARE_REF(TaskShader)
|
|
|
|
|
DECLARE_REF(MeshShader)
|
|
|
|
|
DECLARE_REF(ShaderBuffer)
|
|
|
|
|
DECLARE_REF(VertexBuffer)
|
|
|
|
|
DECLARE_REF(IndexBuffer)
|
|
|
|
|
DECLARE_REF(UniformBuffer)
|
|
|
|
|
DECLARE_REF(PipelineLayout)
|
2023-11-15 00:06:00 +01:00
|
|
|
DECLARE_REF(GraphicsPipeline)
|
2024-07-10 21:07:10 +02:00
|
|
|
DECLARE_REF(RayTracingPipeline)
|
2023-11-15 00:06:00 +01:00
|
|
|
DECLARE_REF(ComputePipeline)
|
2023-11-15 17:42:57 +01:00
|
|
|
DECLARE_REF(RenderCommand)
|
|
|
|
|
DECLARE_REF(ComputeCommand)
|
2024-06-11 16:55:20 +02:00
|
|
|
DECLARE_REF(OcclusionQuery)
|
2024-06-18 09:48:00 +02:00
|
|
|
DECLARE_REF(PipelineStatisticsQuery)
|
2024-07-01 12:17:04 +02:00
|
|
|
DECLARE_REF(TimestampQuery)
|
2024-06-09 10:44:24 +02:00
|
|
|
DECLARE_REF(BottomLevelAS)
|
|
|
|
|
DECLARE_REF(TopLevelAS)
|
2024-06-18 09:48:00 +02:00
|
|
|
DECLARE_REF(RayGenShader)
|
|
|
|
|
DECLARE_REF(AnyHitShader)
|
|
|
|
|
DECLARE_REF(ClosestHitShader)
|
|
|
|
|
DECLARE_REF(MissShader)
|
|
|
|
|
DECLARE_REF(IntersectionShader)
|
|
|
|
|
DECLARE_REF(CallableShader)
|
2024-06-09 12:20:04 +02:00
|
|
|
class Graphics {
|
|
|
|
|
public:
|
2020-04-12 15:47:19 +02:00
|
|
|
Graphics();
|
|
|
|
|
virtual ~Graphics();
|
|
|
|
|
virtual void init(GraphicsInitializer initializer) = 0;
|
2020-09-19 14:36:50 +02:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
const QueueFamilyMapping getFamilyMapping() const { return queueMapping; }
|
|
|
|
|
|
|
|
|
|
PShaderCompiler getShaderCompiler() { return shaderCompiler; }
|
|
|
|
|
|
|
|
|
|
virtual OWindow createWindow(const WindowCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OViewport createViewport(PWindow owner, const ViewportCreateInfo& createInfo) = 0;
|
2020-04-12 15:47:19 +02:00
|
|
|
|
2025-04-12 17:40:14 +02:00
|
|
|
virtual ORenderPass createRenderPass(RenderTargetLayout layout, Array<SubPassDependency> dependencies, URect renderArea,
|
2025-04-06 09:57:47 +02:00
|
|
|
std::string name = "", Array<uint32> viewMasks = {0}, Array<uint32> correlationMasks = {}) = 0;
|
2020-04-12 15:47:19 +02:00
|
|
|
virtual void beginRenderPass(PRenderPass renderPass) = 0;
|
|
|
|
|
virtual void endRenderPass() = 0;
|
2024-03-03 10:29:09 +01:00
|
|
|
virtual void waitDeviceIdle() = 0;
|
2020-04-12 15:47:19 +02:00
|
|
|
|
2025-02-14 00:39:53 +01:00
|
|
|
virtual void executeCommands(ORenderCommand commands) = 0;
|
2024-04-10 10:23:06 +02:00
|
|
|
virtual void executeCommands(Array<ORenderCommand> commands) = 0;
|
2024-08-13 22:44:04 +02:00
|
|
|
virtual void executeCommands(OComputeCommand commands) = 0;
|
2024-04-10 10:23:06 +02:00
|
|
|
virtual void executeCommands(Array<OComputeCommand> commands) = 0;
|
2020-05-05 01:51:13 +02:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual OTexture2D createTexture2D(const TextureCreateInfo& createInfo) = 0;
|
2025-08-08 22:29:54 +02:00
|
|
|
virtual OTexture2DArray createTexture2DArray(const TextureCreateInfo& createInfo) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual OTexture3D createTexture3D(const TextureCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OTextureCube createTextureCube(const TextureCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OUniformBuffer createUniformBuffer(const UniformBufferCreateInfo& bulkData) = 0;
|
|
|
|
|
virtual OShaderBuffer createShaderBuffer(const ShaderBufferCreateInfo& bulkData) = 0;
|
|
|
|
|
virtual OVertexBuffer createVertexBuffer(const VertexBufferCreateInfo& bulkData) = 0;
|
|
|
|
|
virtual OIndexBuffer createIndexBuffer(const IndexBufferCreateInfo& bulkData) = 0;
|
|
|
|
|
|
2024-04-10 10:23:06 +02:00
|
|
|
virtual ORenderCommand createRenderCommand(const std::string& name = "") = 0;
|
|
|
|
|
virtual OComputeCommand createComputeCommand(const std::string& name = "") = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
|
2024-07-10 21:07:10 +02:00
|
|
|
virtual void beginShaderCompilation(const ShaderCompilationInfo& compileInfo) = 0;
|
2023-11-01 23:12:30 +01:00
|
|
|
virtual OVertexShader createVertexShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OFragmentShader createFragmentShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OComputeShader createComputeShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OMeshShader createMeshShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OTaskShader createTaskShader(const ShaderCreateInfo& createInfo) = 0;
|
2023-11-09 22:15:51 +01:00
|
|
|
virtual PGraphicsPipeline createGraphicsPipeline(LegacyPipelineCreateInfo createInfo) = 0;
|
|
|
|
|
virtual PGraphicsPipeline createGraphicsPipeline(MeshPipelineCreateInfo createInfo) = 0;
|
2024-07-10 21:07:10 +02:00
|
|
|
virtual PRayTracingPipeline createRayTracingPipeline(RayTracingPipelineCreateInfo createInfo) = 0;
|
2023-11-09 22:15:51 +01:00
|
|
|
virtual PComputePipeline createComputePipeline(ComputePipelineCreateInfo createInfo) = 0;
|
2023-11-15 17:42:57 +01:00
|
|
|
virtual OSampler createSampler(const SamplerCreateInfo& createInfo) = 0;
|
2020-10-03 11:00:10 +02:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual ODescriptorLayout createDescriptorLayout(const std::string& name = "") = 0;
|
|
|
|
|
virtual OPipelineLayout createPipelineLayout(const std::string& name = "", PPipelineLayout baseLayout = nullptr) = 0;
|
2020-10-03 11:00:10 +02:00
|
|
|
|
2024-01-19 09:49:42 +01:00
|
|
|
virtual OVertexInput createVertexInput(VertexInputStateCreateInfo createInfo) = 0;
|
|
|
|
|
|
2024-07-01 12:17:04 +02:00
|
|
|
virtual Gfx::OOcclusionQuery createOcclusionQuery(const std::string& name = "") = 0;
|
|
|
|
|
virtual Gfx::OPipelineStatisticsQuery createPipelineStatisticsQuery(const std::string& name = "") = 0;
|
|
|
|
|
virtual Gfx::OTimestampQuery createTimestampQuery(uint64 numTimestamps, const std::string& name = "") = 0;
|
2024-06-11 16:55:20 +02:00
|
|
|
|
2024-10-18 19:01:04 +02:00
|
|
|
virtual void beginDebugRegion(const std::string& name) = 0;
|
|
|
|
|
virtual void endDebugRegion() = 0;
|
|
|
|
|
|
2024-06-11 14:15:29 +02:00
|
|
|
virtual void resolveTexture(PTexture source, PTexture destination) = 0;
|
|
|
|
|
virtual void copyTexture(PTexture src, PTexture dst) = 0;
|
2023-12-10 22:27:59 +01:00
|
|
|
|
2024-10-07 20:14:00 +02:00
|
|
|
virtual void copyBuffer(Gfx::PShaderBuffer src, Gfx::PShaderBuffer dst) = 0;
|
|
|
|
|
|
2025-01-08 19:15:12 +01:00
|
|
|
constexpr bool supportMeshShading() const { return meshShadingEnabled; }
|
|
|
|
|
constexpr bool supportRayTracing() const { return rayTracingEnabled; }
|
2024-06-09 10:44:24 +02:00
|
|
|
|
|
|
|
|
// Ray Tracing
|
|
|
|
|
virtual OBottomLevelAS createBottomLevelAccelerationStructure(const BottomLevelASCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OTopLevelAS createTopLevelAccelerationStructure(const TopLevelASCreateInfo& createInfo) = 0;
|
2024-07-12 13:33:52 +02:00
|
|
|
virtual void buildBottomLevelAccelerationStructures(Array<Gfx::PBottomLevelAS> data) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
|
2024-06-18 09:48:00 +02:00
|
|
|
virtual ORayGenShader createRayGenShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OAnyHitShader createAnyHitShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OClosestHitShader createClosestHitShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OMissShader createMissShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OIntersectionShader createIntersectionShader(const ShaderCreateInfo& createInfo) = 0;
|
|
|
|
|
virtual OCallableShader createCallableShader(const ShaderCreateInfo& createInfo) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
protected:
|
2020-06-02 11:46:18 +02:00
|
|
|
QueueFamilyMapping queueMapping;
|
2023-11-01 23:12:30 +01:00
|
|
|
OShaderCompiler shaderCompiler;
|
2023-11-07 16:55:13 +01:00
|
|
|
bool meshShadingEnabled = false;
|
2025-01-08 19:15:12 +01:00
|
|
|
bool rayTracingEnabled = false;
|
2020-04-12 15:47:19 +02:00
|
|
|
friend class Window;
|
|
|
|
|
};
|
2021-04-01 16:40:14 +02:00
|
|
|
DEFINE_REF(Graphics)
|
2020-04-12 15:47:19 +02:00
|
|
|
} // namespace Gfx
|
2024-04-20 21:35:43 +02:00
|
|
|
} // namespace Seele
|