RHI: Fix view type signatures in CommandList abstraction

- Unified RHICommandList interface to use RHIResourceView* for all view types
- Fixed OpenGLCommandList override signatures (SetVertexBuffers, SetIndexBuffer, etc.)
- Fixed D3D12CommandList by removing duplicate SetVertexBuffer methods
- Updated OpenGLCommandList.cpp to match new signatures
- Build and all 845 tests pass
This commit is contained in:
2026-03-24 23:41:57 +08:00
parent 7a66913f2b
commit 1e88beacb8
10 changed files with 505 additions and 44 deletions

View File

@@ -70,9 +70,6 @@ public:
void SetRenderTargetsInternal(uint32_t count, ID3D12Resource** renderTargets, ID3D12Resource* depthStencil = nullptr);
void SetRenderTargetsHandle(uint32_t count, const D3D12_CPU_DESCRIPTOR_HANDLE* renderTargetHandles, const D3D12_CPU_DESCRIPTOR_HANDLE* depthStencilHandle = nullptr);
void SetVertexBuffer(uint32_t slot, RHIResourceView* buffer, uint64_t offset) override;
void SetVertexBuffer(uint32_t slot, ID3D12Resource* buffer, uint64_t offset, uint32_t stride);
void SetVertexBufferInternal(uint32_t slot, ID3D12Resource* buffer, uint64_t offset, uint32_t stride);
void SetVertexBuffers(uint32_t startSlot, uint32_t count, RHIResourceView** buffers, const uint64_t* offsets, const uint32_t* strides) override;
void SetVertexBuffersInternal(uint32_t startSlot, uint32_t count, const D3D12_VERTEX_BUFFER_VIEW* views);
void SetIndexBuffer(RHIResourceView* buffer, uint64_t offset) override;

View File

@@ -68,7 +68,6 @@ public:
void SetGlobalTexture(const char* name, RHIResourceView* texture) override;
void SetPipelineState(RHIPipelineState* pipelineState) override;
void SetVertexBuffer(uint32_t slot, RHIResourceView* buffer, uint64_t offset) override;
void SetVertexBuffers(uint32_t startSlot, uint32_t count, RHIResourceView** buffers, const uint64_t* offsets, const uint32_t* strides) override;
void SetIndexBuffer(RHIResourceView* buffer, uint64_t offset) override;

View File

@@ -2,12 +2,13 @@
#include "RHITypes.h"
#include "RHIEnums.h"
#include "RHIResource.h"
#include <string>
namespace XCEngine {
namespace RHI {
class RHIBuffer {
class RHIBuffer : public RHIResource {
public:
virtual ~RHIBuffer() = default;

View File

@@ -2,11 +2,12 @@
#include "RHITypes.h"
#include "RHIEnums.h"
#include "RHIResource.h"
#include "RHIResourceView.h"
namespace XCEngine {
namespace RHI {
class RHIResourceView;
class RHIPipelineState;
class RHIShader;
@@ -83,7 +84,6 @@ public:
virtual void SetBlendState(const BlendState& state) = 0;
virtual void SetBlendFactor(const float factor[4]) = 0;
virtual void SetVertexBuffer(uint32_t slot, RHIResourceView* buffer, uint64_t offset) = 0;
virtual void SetVertexBuffers(uint32_t startSlot, uint32_t count, RHIResourceView** buffers, const uint64_t* offsets, const uint32_t* strides) = 0;
virtual void SetIndexBuffer(RHIResourceView* buffer, uint64_t offset) = 0;
@@ -102,4 +102,4 @@ public:
};
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -0,0 +1,19 @@
#pragma once
#include "RHITypes.h"
#include "RHIEnums.h"
namespace XCEngine {
namespace RHI {
class RHIResource {
public:
virtual ~RHIResource() = default;
virtual void* GetNativeHandle() = 0;
virtual ResourceStates GetState() const = 0;
virtual void SetState(ResourceStates state) = 0;
};
} // namespace RHI
} // namespace XCEngine

View File

@@ -21,5 +21,51 @@ public:
virtual Format GetFormat() const = 0;
};
class RHIVertexBufferView : public RHIResourceView {
public:
virtual ~RHIVertexBufferView() = default;
virtual uint64_t GetBufferAddress() const = 0;
virtual uint32_t GetSize() const = 0;
virtual uint32_t GetStride() const = 0;
};
class RHIIndexBufferView : public RHIResourceView {
public:
virtual ~RHIIndexBufferView() = default;
virtual uint64_t GetBufferAddress() const = 0;
virtual uint32_t GetSize() const = 0;
virtual Format GetIndexFormat() const = 0;
};
class RHIRenderTargetView : public RHIResourceView {
public:
virtual ~RHIRenderTargetView() = default;
};
class RHIDepthStencilView : public RHIResourceView {
public:
virtual ~RHIDepthStencilView() = default;
};
class RHIShaderResourceView : public RHIResourceView {
public:
virtual ~RHIShaderResourceView() = default;
};
class RHIUnorderedAccessView : public RHIResourceView {
public:
virtual ~RHIUnorderedAccessView() = default;
};
class RHIConstantBufferView : public RHIResourceView {
public:
virtual ~RHIConstantBufferView() = default;
virtual uint64_t GetBufferAddress() const = 0;
virtual uint32_t GetSize() const = 0;
};
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -2,12 +2,13 @@
#include "RHITypes.h"
#include "RHIEnums.h"
#include "RHIResource.h"
#include <string>
namespace XCEngine {
namespace RHI {
class RHITexture {
class RHITexture : public RHIResource {
public:
virtual ~RHITexture() = default;