Initial round of D3D12 implementation

This commit is contained in:
Jack Andersen
2015-11-01 19:41:24 -10:00
parent dfceab59ab
commit e54c8a7c6b
6 changed files with 2413 additions and 11 deletions

View File

@@ -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();
};
}

View File

@@ -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();
};
}

View File

@@ -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;