Files
XCEngine/engine/include/XCEngine/RHI/RHIPipelineState.h
ssdfasd 6328ac8d37 RHI: Add Compute Pipeline abstraction with D3D12 and OpenGL support
- Add SetComputeShader/GetComputeShader/HasComputeShader to RHIPipelineState
- Add m_computePipelineState for D3D12 compute PSO
- Add m_computeProgram/m_computeShader for OpenGL
- Fix OpenGLCommandList::DispatchCompute bug (was ignoring x,y,z params)
- Fix OpenGLShader::GetID usage in OpenGLPipelineState
- Mark Priority 8 as completed in RHI_Design_Issues.md
2026-03-25 01:05:03 +08:00

48 lines
1.6 KiB
C++

#pragma once
#include "RHITypes.h"
#include "RHIEnums.h"
namespace XCEngine {
namespace RHI {
class RHIShader;
class RHIPipelineState {
public:
virtual ~RHIPipelineState() = default;
// State configuration (Unity SRP style - Shader independent of PSO)
virtual void SetInputLayout(const InputLayoutDesc& layout) = 0;
virtual void SetRasterizerState(const RasterizerDesc& state) = 0;
virtual void SetBlendState(const BlendDesc& state) = 0;
virtual void SetDepthStencilState(const DepthStencilStateDesc& state) = 0;
virtual void SetTopology(uint32_t topologyType) = 0; // PrimitiveTopologyType
virtual void SetRenderTargetFormats(uint32_t count, const uint32_t* formats, uint32_t depthFormat) = 0;
virtual void SetSampleCount(uint32_t count) = 0;
virtual void SetComputeShader(RHIShader* shader) = 0;
// State query
virtual const RasterizerDesc& GetRasterizerState() const = 0;
virtual const BlendDesc& GetBlendState() const = 0;
virtual const DepthStencilStateDesc& GetDepthStencilState() const = 0;
virtual const InputLayoutDesc& GetInputLayout() const = 0;
virtual PipelineStateHash GetHash() const = 0;
virtual RHIShader* GetComputeShader() const = 0;
virtual bool HasComputeShader() const = 0;
// Finalization (D3D12/Vulkan creates real PSO)
virtual bool IsFinalized() const = 0;
virtual bool Finalize() = 0;
// Lifecycle
virtual void Shutdown() = 0;
virtual void Bind() = 0;
virtual void Unbind() = 0;
virtual void* GetNativeHandle() = 0;
virtual PipelineType GetType() const = 0;
};
} // namespace RHI
} // namespace XCEngine