Files
XCEngine/engine/include/XCEngine/RHI/IRHIResources.h
ssdfasd 3ad317afb2 feat: 修复RHI渲染循环问题
- 修复RootSignature参数数量与HelloEarth一致
- 修复StaticMeshComponent中device为nullptr的问题
- 修复CommandList::Reset类型转换问题
- 修复RTV创建使用nullptr而不是rtvDesc
- 添加SwapChain的GetCurrentRenderTarget方法
- 修复DepthStencil创建问题(暂时跳过)
- 渲染循环基本可运行
2026-03-14 03:13:10 +08:00

100 lines
2.6 KiB
C++

#pragma once
#include "RHIDefines.h"
#include <unknwn.h>
namespace XCEngine {
namespace RHI {
class ICommandQueue {
public:
virtual ~ICommandQueue() = default;
virtual void ExecuteCommandLists(void** lists, uint32_t count) = 0;
virtual void Signal(void* fence, uint64_t value) = 0;
virtual void Wait(void* fence, uint64_t value) = 0;
virtual uint64_t GetTimestampFrequency() const = 0;
virtual IUnknown* GetNativeQueue() const = 0;
};
class ICommandAllocator {
public:
virtual ~ICommandAllocator() = default;
virtual void Reset() = 0;
};
class IFence {
public:
virtual ~IFence() = default;
virtual uint64_t GetCompletedValue() const = 0;
virtual void Signal(uint64_t value) = 0;
virtual void Wait(uint64_t value) = 0;
virtual void Wait(uint64_t value, uint64_t timeoutMs) = 0;
};
class IDescriptorHeap {
public:
virtual ~IDescriptorHeap() = default;
virtual DescriptorHeapType GetType() const = 0;
virtual uint32_t GetDescriptorCount() const = 0;
virtual void* GetCPUDescriptorHandle(uint32_t index) const = 0;
virtual uint64_t GetGPUDescriptorHandle(uint32_t index) const = 0;
virtual void SetName(const char* name) = 0;
};
class ISwapChain {
public:
virtual ~ISwapChain() = default;
virtual bool Initialize(const SwapChainDesc& desc, void* windowHandle) = 0;
virtual void Shutdown() = 0;
virtual bool Present() = 0;
virtual bool Resize(uint32_t width, uint32_t height) = 0;
virtual uint32_t GetCurrentBufferIndex() const = 0;
virtual void* GetBuffer(uint32_t index) = 0;
virtual void* GetCurrentRenderTarget() = 0;
virtual void* GetDepthStencil() = 0;
virtual void SetFullscreen(bool fullscreen) = 0;
virtual bool IsFullscreen() const = 0;
};
enum class RootParameterType {
DescriptorTable,
Constants,
CBV,
SRV,
UAV,
Sampler
};
struct RootParameter {
RootParameterType type;
uint32_t shaderRegister = 0;
uint32_t registerSpace = 0;
uint32_t num32BitValues = 4;
ShaderVisibility visibility = ShaderVisibility::All;
};
struct RootSignatureDesc {
RootParameter* parameters = nullptr;
uint32_t parameterCount = 0;
uint32_t flags = 0;
};
class IRootSignature {
public:
virtual ~IRootSignature() = default;
virtual bool Initialize(const RootSignatureDesc& desc) = 0;
virtual void SetName(const char* name) = 0;
virtual void* GetNativeRootSignature() const = 0;
};
class IPipelineState {
public:
virtual ~IPipelineState() = default;
virtual void SetName(const char* name) = 0;
virtual void* GetNativePipelineState() const = 0;
};
} // namespace RHI
} // namespace XCEngine