- 修复RootSignature参数数量与HelloEarth一致 - 修复StaticMeshComponent中device为nullptr的问题 - 修复CommandList::Reset类型转换问题 - 修复RTV创建使用nullptr而不是rtvDesc - 添加SwapChain的GetCurrentRenderTarget方法 - 修复DepthStencil创建问题(暂时跳过) - 渲染循环基本可运行
100 lines
2.6 KiB
C++
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
|