mirror of
https://github.com/AxioDL/boo.git
synced 2025-12-16 08:27:10 +00:00
Initial round of D3D12 implementation
This commit is contained in:
@@ -8,6 +8,41 @@ namespace boo
|
||||
|
||||
class D3D11DataFactory : public IGraphicsDataFactory
|
||||
{
|
||||
IGraphicsContext* m_parent;
|
||||
IGraphicsData* m_deferredData = nullptr;
|
||||
std::unordered_set<IGraphicsData*> m_committedData;
|
||||
public:
|
||||
D3D11DataFactory(IGraphicsContext* parent);
|
||||
~D3D11DataFactory() {}
|
||||
|
||||
Platform platform() const {return PlatformD3D11;}
|
||||
const char* platformName() const {return "Direct 3D 11";}
|
||||
|
||||
const IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t sz);
|
||||
IGraphicsBufferD* newDynamicBuffer(BufferUse use);
|
||||
|
||||
const ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt,
|
||||
const void* data, size_t sz);
|
||||
ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt);
|
||||
|
||||
const IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements);
|
||||
|
||||
const IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource,
|
||||
size_t texCount, const char** texNames,
|
||||
BlendFactor srcFac, BlendFactor dstFac,
|
||||
bool depthTest, bool depthWrite, bool backfaceCulling);
|
||||
|
||||
const IShaderDataBinding*
|
||||
newShaderDataBinding(const IShaderPipeline* pipeline,
|
||||
const IVertexFormat* vtxFormat,
|
||||
const IGraphicsBuffer* vbo, const IGraphicsBuffer* ebo,
|
||||
size_t ubufCount, const IGraphicsBuffer** ubufs,
|
||||
size_t texCount, const ITexture** texs);
|
||||
|
||||
void reset();
|
||||
IGraphicsData* commit();
|
||||
void destroyData(IGraphicsData*);
|
||||
void destroyAllData();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -2,12 +2,58 @@
|
||||
#define GDEV_D3D12_HPP
|
||||
|
||||
#include "IGraphicsDataFactory.hpp"
|
||||
#include "IGraphicsCommandQueue.hpp"
|
||||
#include "boo/IGraphicsContext.hpp"
|
||||
#include <d3d12.h>
|
||||
#include <vector>
|
||||
#include <unordered_set>
|
||||
|
||||
#include <wrl/client.h>
|
||||
template <class T>
|
||||
using ComPtr = Microsoft::WRL::ComPtr<T>;
|
||||
|
||||
namespace boo
|
||||
{
|
||||
|
||||
class D3D12DataFactory : public IGraphicsDataFactory
|
||||
{
|
||||
IGraphicsContext* m_parent;
|
||||
IGraphicsData* m_deferredData = nullptr;
|
||||
struct D3D12Context* m_ctx;
|
||||
std::unordered_set<IGraphicsData*> m_committedData;
|
||||
public:
|
||||
D3D12DataFactory(IGraphicsContext* parent, D3D12Context* ctx);
|
||||
~D3D12DataFactory() {}
|
||||
|
||||
Platform platform() const {return PlatformD3D12;}
|
||||
const char* platformName() const {return "Direct 3D 12";}
|
||||
|
||||
const IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count);
|
||||
IGraphicsBufferD* newDynamicBuffer(BufferUse use, size_t stride, size_t count);
|
||||
|
||||
const ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt,
|
||||
const void* data, size_t sz);
|
||||
ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt);
|
||||
|
||||
const IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements);
|
||||
|
||||
const IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource,
|
||||
ComPtr<ID3DBlob>& vertBlobOut, ComPtr<ID3DBlob>& fragBlobOut,
|
||||
const IVertexFormat* vtxFmt,
|
||||
BlendFactor srcFac, BlendFactor dstFac,
|
||||
bool depthTest, bool depthWrite, bool backfaceCulling);
|
||||
|
||||
const IShaderDataBinding*
|
||||
newShaderDataBinding(IShaderPipeline* pipeline,
|
||||
IVertexFormat* vtxFormat,
|
||||
IGraphicsBuffer* vbo, IGraphicsBuffer* ebo,
|
||||
size_t ubufCount, IGraphicsBuffer** ubufs,
|
||||
size_t texCount, ITexture** texs);
|
||||
|
||||
void reset();
|
||||
IGraphicsData* commit();
|
||||
void destroyData(IGraphicsData* data);
|
||||
void destroyAllData();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -10,9 +10,6 @@ namespace boo
|
||||
struct IGraphicsBuffer
|
||||
{
|
||||
bool dynamic() const {return m_dynamic;}
|
||||
virtual void bindVertex() const=0;
|
||||
virtual void bindIndex() const=0;
|
||||
virtual void bindUniform(size_t idx) const=0;
|
||||
protected:
|
||||
bool m_dynamic;
|
||||
IGraphicsBuffer(bool dynamic) : m_dynamic(dynamic) {}
|
||||
@@ -47,7 +44,6 @@ enum BufferUse
|
||||
struct ITexture
|
||||
{
|
||||
bool dynamic() const {return m_dynamic;}
|
||||
virtual void bind(size_t idx) const=0;
|
||||
protected:
|
||||
bool m_dynamic;
|
||||
ITexture(bool dynamic) : m_dynamic(dynamic) {}
|
||||
@@ -99,6 +95,7 @@ struct VertexElementDescriptor
|
||||
const IGraphicsBuffer* vertBuffer = nullptr;
|
||||
const IGraphicsBuffer* indexBuffer = nullptr;
|
||||
VertexSemantic semantic;
|
||||
int semanticIdx = 0;
|
||||
};
|
||||
|
||||
/** Opaque token for referencing a complete graphics pipeline state necessary
|
||||
@@ -151,9 +148,9 @@ struct IGraphicsDataFactory
|
||||
virtual const char* platformName() const=0;
|
||||
|
||||
virtual const IGraphicsBufferS*
|
||||
newStaticBuffer(BufferUse use, const void* data, size_t sz)=0;
|
||||
newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count)=0;
|
||||
virtual IGraphicsBufferD*
|
||||
newDynamicBuffer(BufferUse use)=0;
|
||||
newDynamicBuffer(BufferUse use, size_t stride, size_t count)=0;
|
||||
|
||||
virtual const ITextureS*
|
||||
newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt,
|
||||
@@ -165,11 +162,11 @@ struct IGraphicsDataFactory
|
||||
newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements)=0;
|
||||
|
||||
virtual const IShaderDataBinding*
|
||||
newShaderDataBinding(const IShaderPipeline* pipeline,
|
||||
const IVertexFormat* vtxFormat,
|
||||
const IGraphicsBuffer* vbo, const IGraphicsBuffer* ebo,
|
||||
size_t ubufCount, const IGraphicsBuffer** ubufs,
|
||||
size_t texCount, const ITexture** texs)=0;
|
||||
newShaderDataBinding(IShaderPipeline* pipeline,
|
||||
IVertexFormat* vtxFormat,
|
||||
IGraphicsBuffer* vbo, IGraphicsBuffer* ebo,
|
||||
size_t ubufCount, IGraphicsBuffer** ubufs,
|
||||
size_t texCount, ITexture** texs)=0;
|
||||
|
||||
virtual void reset()=0;
|
||||
virtual IGraphicsData* commit()=0;
|
||||
|
||||
Reference in New Issue
Block a user