Add RHI vertex and index buffer views
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -278,6 +278,8 @@ enum class ResourceViewDimension : uint8_t {
|
||||
};
|
||||
|
||||
enum class ResourceViewType : uint8_t {
|
||||
VertexBuffer,
|
||||
IndexBuffer,
|
||||
RenderTarget,
|
||||
DepthStencil,
|
||||
ShaderResource,
|
||||
|
||||
Reference in New Issue
Block a user