- 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
48 lines
1.6 KiB
C++
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
|