Add RHI vertex and index buffer views

This commit is contained in:
2026-03-25 23:07:22 +08:00
parent 268daf7bc9
commit aaf9cce418
14 changed files with 342 additions and 19 deletions

View File

@@ -88,6 +88,8 @@ public:
RHIDescriptorPool* CreateDescriptorPool(const DescriptorPoolDesc& desc) override;
RHIDescriptorSet* CreateDescriptorSet(RHIDescriptorPool* pool, const DescriptorSetLayoutDesc& layout) override;
RHIResourceView* CreateVertexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override;
RHIResourceView* CreateIndexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override;
RHIResourceView* CreateRenderTargetView(RHITexture* texture, const ResourceViewDesc& desc) override;
RHIResourceView* CreateDepthStencilView(RHITexture* texture, const ResourceViewDesc& desc) override;
RHIResourceView* CreateShaderResourceView(RHITexture* texture, const ResourceViewDesc& desc) override;

View File

@@ -14,6 +14,7 @@ namespace XCEngine {
namespace RHI {
class D3D12DescriptorHeap;
class D3D12Buffer;
class D3D12ResourceView : public RHIResourceView {
public:
@@ -46,12 +47,18 @@ public:
void InitializeAsConstantBuffer(ID3D12Device* device, ID3D12Resource* resource,
const D3D12_CONSTANT_BUFFER_VIEW_DESC* desc,
D3D12DescriptorHeap* heap, uint32_t slotIndex);
void InitializeAsVertexBuffer(D3D12Buffer* buffer, const ResourceViewDesc& desc);
void InitializeAsIndexBuffer(D3D12Buffer* buffer, const ResourceViewDesc& desc);
D3D12_CPU_DESCRIPTOR_HANDLE GetCPUHandle() const { return m_handle; }
GPUDescriptorHandle GetGPUHandle() const;
ID3D12Resource* GetResource() const { return m_resource; }
D3D12DescriptorHeap* GetHeap() const { return m_heap; }
uint32_t GetSlotIndex() const { return m_slotIndex; }
uint64_t GetBufferLocation() const { return m_bufferLocation; }
uint32_t GetBufferSize() const { return m_bufferSize; }
uint32_t GetBufferStride() const { return m_bufferStride; }
uint64_t GetBufferOffset() const { return m_bufferOffset; }
static D3D12_RENDER_TARGET_VIEW_DESC CreateRenderTargetDesc(Format format, D3D12_RTV_DIMENSION dimension);
static D3D12_DEPTH_STENCIL_VIEW_DESC CreateDepthStencilDesc(Format format, D3D12_DSV_DIMENSION dimension);
@@ -67,7 +74,11 @@ private:
D3D12DescriptorHeap* m_heap;
uint32_t m_slotIndex;
std::unique_ptr<D3D12DescriptorHeap> m_ownedHeap;
uint64_t m_bufferLocation;
uint64_t m_bufferOffset;
uint32_t m_bufferSize;
uint32_t m_bufferStride;
};
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -59,6 +59,8 @@ public:
RHIDescriptorPool* CreateDescriptorPool(const DescriptorPoolDesc& desc) override;
RHIDescriptorSet* CreateDescriptorSet(RHIDescriptorPool* pool, const DescriptorSetLayoutDesc& layout) override;
RHIResourceView* CreateVertexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override;
RHIResourceView* CreateIndexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override;
RHIResourceView* CreateRenderTargetView(RHITexture* texture, const ResourceViewDesc& desc) override;
RHIResourceView* CreateDepthStencilView(RHITexture* texture, const ResourceViewDesc& desc) override;
RHIResourceView* CreateShaderResourceView(RHITexture* texture, const ResourceViewDesc& desc) override;

View File

@@ -45,6 +45,12 @@ public:
OpenGLBuffer* buffer,
const ResourceViewDesc& desc,
OpenGLUniformBufferManager* manager);
bool InitializeAsVertexBuffer(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
bool InitializeAsIndexBuffer(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
ResourceViewType GetViewType() const override { return m_viewType; }
ResourceViewDimension GetDimension() const override { return m_dimension; }
@@ -54,6 +60,9 @@ public:
int32_t GetBindingPoint() const { return m_bindingPoint; }
unsigned int GetTexture() const;
unsigned int GetBuffer() const;
uint64_t GetBufferOffset() const { return m_bufferOffset; }
uint32_t GetBufferSize() const { return m_bufferSize; }
uint32_t GetBufferStride() const { return m_bufferStride; }
private:
ResourceViewType m_viewType;
@@ -67,7 +76,10 @@ private:
OpenGLFramebuffer* m_framebuffer;
OpenGLTextureUnitAllocator* m_textureUnitAllocator;
OpenGLUniformBufferManager* m_uniformBufferManager;
uint64_t m_bufferOffset;
uint32_t m_bufferSize;
uint32_t m_bufferStride;
};
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -57,6 +57,8 @@ public:
virtual RHIDescriptorPool* CreateDescriptorPool(const DescriptorPoolDesc& desc) = 0;
virtual RHIDescriptorSet* CreateDescriptorSet(RHIDescriptorPool* pool, const DescriptorSetLayoutDesc& layout) = 0;
virtual RHIResourceView* CreateVertexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) = 0;
virtual RHIResourceView* CreateIndexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) = 0;
virtual RHIResourceView* CreateRenderTargetView(RHITexture* texture, const ResourceViewDesc& desc) = 0;
virtual RHIResourceView* CreateDepthStencilView(RHITexture* texture, const ResourceViewDesc& desc) = 0;
virtual RHIResourceView* CreateShaderResourceView(RHITexture* texture, const ResourceViewDesc& desc) = 0;

View File

@@ -278,6 +278,8 @@ enum class ResourceViewDimension : uint8_t {
};
enum class ResourceViewType : uint8_t {
VertexBuffer,
IndexBuffer,
RenderTarget,
DepthStencil,
ShaderResource,