Graphics API decouple part7

This commit is contained in:
turanszkij
2016-03-23 22:33:57 +01:00
parent e55d301652
commit e7fff3d8bb
16 changed files with 173 additions and 178 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ void Cube::SetUpVertices()
verts[6].pos=max;
verts[7].pos=XMFLOAT3(max.x,min.y,max.z);
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DEFAULT;
bd.ByteWidth = sizeof( Vertex ) * 8;
+28 -28
View File
@@ -24,23 +24,23 @@ void wiDepthTarget::Initialize(int width, int height, UINT MSAAC, UINT MSAAQ)
isCube = false;
Texture2DDesc depthBufferDesc;
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));
Texture2DDesc depthGPUBufferDesc;
ZeroMemory(&depthGPUBufferDesc, sizeof(depthGPUBufferDesc));
// Set up the description of the depth buffer.
depthBufferDesc.Width = width;
depthBufferDesc.Height = height;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 1;
depthBufferDesc.Format = FORMAT_R24G8_TYPELESS;
depthBufferDesc.SampleDesc.Count = MSAAC;
depthBufferDesc.SampleDesc.Quality = MSAAQ;
depthBufferDesc.Usage = USAGE_DEFAULT;
depthBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = 0;
depthGPUBufferDesc.Width = width;
depthGPUBufferDesc.Height = height;
depthGPUBufferDesc.MipLevels = 1;
depthGPUBufferDesc.ArraySize = 1;
depthGPUBufferDesc.Format = FORMAT_R24G8_TYPELESS;
depthGPUBufferDesc.SampleDesc.Count = MSAAC;
depthGPUBufferDesc.SampleDesc.Quality = MSAAQ;
depthGPUBufferDesc.Usage = USAGE_DEFAULT;
depthGPUBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthGPUBufferDesc.CPUAccessFlags = 0;
depthGPUBufferDesc.MiscFlags = 0;
wiRenderer::GetDevice()->CreateTexture2D(&depthBufferDesc, nullptr, &texture);
wiRenderer::GetDevice()->CreateTexture2D(&depthGPUBufferDesc, nullptr, &texture);
}
void wiDepthTarget::InitializeCube(int size)
{
@@ -49,23 +49,23 @@ void wiDepthTarget::InitializeCube(int size)
isCube = true;
Texture2DDesc depthBufferDesc;
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));
Texture2DDesc depthGPUBufferDesc;
ZeroMemory(&depthGPUBufferDesc, sizeof(depthGPUBufferDesc));
// Set up the description of the depth buffer.
depthBufferDesc.Width = size;
depthBufferDesc.Height = size;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 6;
depthBufferDesc.Format = FORMAT_R32_TYPELESS;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = USAGE_DEFAULT;
depthBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = RESOURCE_MISC_TEXTURECUBE;
depthGPUBufferDesc.Width = size;
depthGPUBufferDesc.Height = size;
depthGPUBufferDesc.MipLevels = 1;
depthGPUBufferDesc.ArraySize = 6;
depthGPUBufferDesc.Format = FORMAT_R32_TYPELESS;
depthGPUBufferDesc.SampleDesc.Count = 1;
depthGPUBufferDesc.SampleDesc.Quality = 0;
depthGPUBufferDesc.Usage = USAGE_DEFAULT;
depthGPUBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthGPUBufferDesc.CPUAccessFlags = 0;
depthGPUBufferDesc.MiscFlags = RESOURCE_MISC_TEXTURECUBE;
wiRenderer::GetDevice()->CreateTextureCube(&depthBufferDesc, nullptr, &textureCube);
wiRenderer::GetDevice()->CreateTextureCube(&depthGPUBufferDesc, nullptr, &textureCube);
}
void wiDepthTarget::Clear(GRAPHICSTHREAD threadID)
+1 -1
View File
@@ -25,6 +25,6 @@ public:
void CopyFrom(const wiDepthTarget&, GRAPHICSTHREAD threadID);
wiGraphicsTypes::Texture2D* GetTexture() const { return(isCube ? textureCube : texture); }
wiGraphicsTypes::Texture2DDesc GetDesc() const { return GetTexture()->desc; }
wiGraphicsTypes::Texture2DDesc GetDesc() const { return GetTexture()->GetDesc(); }
};
+5 -5
View File
@@ -332,7 +332,7 @@ void wiEmittedParticle::LoadShaders()
}
void wiEmittedParticle::SetUpCB()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(ConstantBuffer);
@@ -343,7 +343,7 @@ void wiEmittedParticle::SetUpCB()
}
void wiEmittedParticle::SetUpStates()
{
RasterizerDesc rs;
RasterizerStateDesc rs;
rs.FillMode=FILL_SOLID;
rs.CullMode=CULL_BACK;
rs.FrontCounterClockwise=true;
@@ -375,7 +375,7 @@ void wiEmittedParticle::SetUpStates()
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = false;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ZERO;
dsd.DepthFunc = COMPARISON_LESS;
@@ -402,7 +402,7 @@ void wiEmittedParticle::SetUpStates()
BlendDesc bd;
BlendStateDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.RenderTarget[0].BlendEnable=true;
bd.RenderTarget[0].SrcBlend = BLEND_SRC_ALPHA;
@@ -433,7 +433,7 @@ void wiEmittedParticle::LoadVertexBuffer()
{
vertexBuffer=NULL;
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof( Point ) * MAX_PARTICLES;
+6 -6
View File
@@ -38,7 +38,7 @@ void wiFont::Initialize()
void wiFont::SetUpStates()
{
RasterizerDesc rs;
RasterizerStateDesc rs;
rs.FillMode=FILL_SOLID;
rs.CullMode=CULL_BACK;
rs.FrontCounterClockwise=TRUE;
@@ -56,7 +56,7 @@ void wiFont::SetUpStates()
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = false;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ZERO;
dsd.DepthFunc = COMPARISON_LESS;
@@ -83,7 +83,7 @@ void wiFont::SetUpStates()
BlendDesc bd;
BlendStateDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.RenderTarget[0].BlendEnable = TRUE;
bd.RenderTarget[0].SrcBlend = BLEND_SRC_ALPHA;
@@ -98,7 +98,7 @@ void wiFont::SetUpStates()
}
void wiFont::SetUpCB()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(ConstantBuffer);
@@ -210,7 +210,7 @@ void wiFont::ModifyGeo(const wstring& text, wiFontProps props, int style, GRAPHI
void wiFont::LoadVertexBuffer()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof( Vertex ) * MAX_TEXT * 4;
@@ -232,7 +232,7 @@ void wiFont::LoadIndices()
indices[i/4*6+5]=i/4*4+3;
}
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DEFAULT;
bd.ByteWidth = sizeof( unsigned long ) * MAX_TEXT * 6;
+37 -18
View File
@@ -362,7 +362,7 @@ namespace wiGraphicsTypes
FLOAT MinLOD;
FLOAT MaxLOD;
};
struct RasterizerDesc
struct RasterizerStateDesc
{
FILL_MODE FillMode;
CULL_MODE CullMode;
@@ -382,7 +382,7 @@ namespace wiGraphicsTypes
STENCIL_OP StencilPassOp;
COMPARISON_FUNC StencilFunc;
};
struct DepthStencilDesc
struct DepthStencilStateDesc
{
BOOL DepthEnable;
DEPTH_WRITE_MASK DepthWriteMask;
@@ -393,7 +393,7 @@ namespace wiGraphicsTypes
DepthStencilOpDesc FrontFace;
DepthStencilOpDesc BackFace;
};
struct RenderTargetBlendDesc
struct RenderTargetBlendStateDesc
{
BOOL BlendEnable;
BLEND SrcBlend;
@@ -404,13 +404,13 @@ namespace wiGraphicsTypes
BLEND_OP BlendOpAlpha;
UINT8 RenderTargetWriteMask;
};
struct BlendDesc
struct BlendStateDesc
{
BOOL AlphaToCoverageEnable;
BOOL IndependentBlendEnable;
RenderTargetBlendDesc RenderTarget[8];
RenderTargetBlendStateDesc RenderTarget[8];
};
struct BufferDesc
struct GPUBufferDesc
{
UINT ByteWidth;
USAGE Usage;
@@ -527,6 +527,7 @@ namespace wiGraphicsTypes
friend class GraphicsDevice_DX11;
private:
ID3D11SamplerState* resource_DX11;
SamplerDesc desc;
public:
Sampler() :resource_DX11(nullptr) {}
~Sampler()
@@ -535,21 +536,31 @@ namespace wiGraphicsTypes
}
bool IsValid() { return resource_DX11 != nullptr; }
SamplerDesc GetDesc() { return desc; }
};
class GPUBuffer
{
friend class GraphicsDevice_DX11;
private:
ID3D11Buffer* resource_DX11;
ID3D11Buffer* resource_DX11[2]; // double buffer
GPUBufferDesc desc;
int activeBuffer;
public:
GPUBuffer() :resource_DX11(nullptr) {}
GPUBuffer()
{
activeBuffer = 0;
SAFE_INIT(resource_DX11[0]);
SAFE_INIT(resource_DX11[1]);
}
~GPUBuffer()
{
SAFE_RELEASE(resource_DX11);
SAFE_RELEASE(resource_DX11[0]);
SAFE_RELEASE(resource_DX11[1]);
}
bool IsValid() { return resource_DX11 != nullptr; }
bool IsValid() { return resource_DX11[activeBuffer] != nullptr; }
GPUBufferDesc GetDesc() { return desc; }
};
class VertexLayout
@@ -572,6 +583,7 @@ namespace wiGraphicsTypes
friend class GraphicsDevice_DX11;
private:
ID3D11BlendState* resource_DX11;
BlendStateDesc desc;
public:
BlendState() :resource_DX11(nullptr) {}
~BlendState()
@@ -580,6 +592,7 @@ namespace wiGraphicsTypes
}
bool IsValid() { return resource_DX11 != nullptr; }
BlendStateDesc GetDesc() { return desc; }
};
class DepthStencilState
@@ -587,6 +600,7 @@ namespace wiGraphicsTypes
friend class GraphicsDevice_DX11;
private:
ID3D11DepthStencilState* resource_DX11;
DepthStencilStateDesc desc;
public:
DepthStencilState() :resource_DX11(nullptr) {}
~DepthStencilState()
@@ -595,6 +609,7 @@ namespace wiGraphicsTypes
}
bool IsValid() { return resource_DX11 != nullptr; }
DepthStencilStateDesc GetDesc() { return desc; }
};
class RasterizerState
@@ -602,6 +617,7 @@ namespace wiGraphicsTypes
friend class GraphicsDevice_DX11;
private:
ID3D11RasterizerState* resource_DX11;
RasterizerStateDesc desc;
public:
RasterizerState() :resource_DX11(nullptr) {}
~RasterizerState()
@@ -610,6 +626,7 @@ namespace wiGraphicsTypes
}
bool IsValid() { return resource_DX11 != nullptr; }
RasterizerStateDesc GetDesc() { return desc; }
};
class ClassLinkage
@@ -664,14 +681,15 @@ namespace wiGraphicsTypes
friend class GraphicsDevice_DX11;
private:
ID3D11Texture2D* texture2D_DX11;
Texture2DDesc desc;
public:
Texture2DDesc desc;
Texture2D() :Texture(), texture2D_DX11(nullptr) {}
virtual ~Texture2D()
{
SAFE_RELEASE(texture2D_DX11);
}
Texture2DDesc GetDesc() { return desc; }
};
class TextureCube : public Texture2D
{
@@ -684,13 +702,13 @@ namespace wiGraphicsTypes
class GraphicsDevice : public wiThreadSafeManager
{
protected:
bool oddFrame;
long FRAMECOUNT;
bool VSYNC;
int SCREENWIDTH, SCREENHEIGHT;
public:
GraphicsDevice() :oddFrame(false), VSYNC(true), SCREENWIDTH(0), SCREENHEIGHT(0) {}
GraphicsDevice() :FRAMECOUNT(0), VSYNC(true), SCREENWIDTH(0), SCREENHEIGHT(0) {}
virtual HRESULT CreateBuffer(const BufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer) = 0;
virtual HRESULT CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer) = 0;
virtual HRESULT CreateTexture1D() = 0;
virtual HRESULT CreateTexture2D(const Texture2DDesc* pDesc, const SubresourceData *pInitialData, Texture2D **ppTexture2D) = 0;
virtual HRESULT CreateTexture3D() = 0;
@@ -708,9 +726,9 @@ namespace wiGraphicsTypes
virtual HRESULT CreateHullShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, HullShader *pHullShader) = 0;
virtual HRESULT CreateDomainShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, DomainShader *pDomainShader) = 0;
virtual HRESULT CreateComputeShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, ComputeShader *pComputeShader) = 0;
virtual HRESULT CreateBlendState(const BlendDesc *pBlendStateDesc, BlendState *pBlendState) = 0;
virtual HRESULT CreateDepthStencilState(const DepthStencilDesc *pDepthStencilDesc, DepthStencilState *pDepthStencilState) = 0;
virtual HRESULT CreateRasterizerState(const RasterizerDesc *pRasterizerDesc, RasterizerState *pRasterizerState) = 0;
virtual HRESULT CreateBlendState(const BlendStateDesc *pBlendStateDesc, BlendState *pBlendState) = 0;
virtual HRESULT CreateDepthStencilState(const DepthStencilStateDesc *pDepthStencilStateDesc, DepthStencilState *pDepthStencilState) = 0;
virtual HRESULT CreateRasterizerState(const RasterizerStateDesc *pRasterizerStateDesc, RasterizerState *pRasterizerState) = 0;
virtual HRESULT CreateSamplerState(const SamplerDesc *pSamplerDesc, Sampler *pSamplerState) = 0;
virtual void PresentBegin() = 0;
@@ -723,6 +741,7 @@ namespace wiGraphicsTypes
bool GetVSyncEnabled() { return VSYNC; }
void SetVSyncEnabled(bool value) { VSYNC = value; }
long GetFrameCount() { return FRAMECOUNT; }
int GetScreenWidth() { return SCREENWIDTH; }
int GetScreenHeight() { return SCREENHEIGHT; }
+44 -32
View File
@@ -998,7 +998,7 @@ inline D3D11_SUBRESOURCE_DATA* _ConvertSubresourceData(const SubresourceData* pI
}
HRESULT GraphicsDevice_DX11::CreateBuffer(const BufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer)
HRESULT GraphicsDevice_DX11::CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer)
{
D3D11_BUFFER_DESC desc;
desc.ByteWidth = pDesc->ByteWidth;
@@ -1010,7 +1010,15 @@ HRESULT GraphicsDevice_DX11::CreateBuffer(const BufferDesc *pDesc, const Subreso
D3D11_SUBRESOURCE_DATA* data = _ConvertSubresourceData(pInitialData);
return device->CreateBuffer(&desc, data, &ppBuffer->resource_DX11);
ppBuffer->desc = *pDesc;
HRESULT hr = device->CreateBuffer(&desc, data, &ppBuffer->resource_DX11[0]);
assert(SUCCEEDED(hr) && "GPUBuffer Creation failed!");
if (desc.Usage != USAGE_IMMUTABLE)
{
hr = device->CreateBuffer(&desc, data, &ppBuffer->resource_DX11[1]);
assert(SUCCEEDED(hr) && "GPUBuffer Creation failed!");
}
return hr;
}
HRESULT GraphicsDevice_DX11::CreateTexture1D()
{
@@ -1227,7 +1235,7 @@ HRESULT GraphicsDevice_DX11::CreateComputeShader(const void *pShaderBytecode, SI
{
return device->CreateComputeShader(pShaderBytecode, BytecodeLength, (pClassLinkage == nullptr ? nullptr : pClassLinkage->resource_DX11), &pComputeShader->resource_DX11);
}
HRESULT GraphicsDevice_DX11::CreateBlendState(const BlendDesc *pBlendStateDesc, BlendState *pBlendState)
HRESULT GraphicsDevice_DX11::CreateBlendState(const BlendStateDesc *pBlendStateDesc, BlendState *pBlendState)
{
D3D11_BLEND_DESC desc;
desc.AlphaToCoverageEnable = pBlendStateDesc->AlphaToCoverageEnable;
@@ -1244,42 +1252,45 @@ HRESULT GraphicsDevice_DX11::CreateBlendState(const BlendDesc *pBlendStateDesc,
desc.RenderTarget[i].RenderTargetWriteMask = pBlendStateDesc->RenderTarget[i].RenderTargetWriteMask;
}
pBlendState->desc = *pBlendStateDesc;
return device->CreateBlendState(&desc, &pBlendState->resource_DX11);
}
HRESULT GraphicsDevice_DX11::CreateDepthStencilState(const DepthStencilDesc *pDepthStencilDesc, DepthStencilState *pDepthStencilState)
HRESULT GraphicsDevice_DX11::CreateDepthStencilState(const DepthStencilStateDesc *pDepthStencilStateDesc, DepthStencilState *pDepthStencilState)
{
D3D11_DEPTH_STENCIL_DESC desc;
desc.DepthEnable = pDepthStencilDesc->DepthEnable;
desc.DepthWriteMask = _ConvertDepthWriteMask(pDepthStencilDesc->DepthWriteMask);
desc.DepthFunc = _ConvertComparisonFunc(pDepthStencilDesc->DepthFunc);
desc.StencilEnable = pDepthStencilDesc->StencilEnable;
desc.StencilReadMask = pDepthStencilDesc->StencilReadMask;
desc.StencilWriteMask = pDepthStencilDesc->StencilWriteMask;
desc.FrontFace.StencilDepthFailOp = _ConvertStencilOp(pDepthStencilDesc->FrontFace.StencilDepthFailOp);
desc.FrontFace.StencilFailOp = _ConvertStencilOp(pDepthStencilDesc->FrontFace.StencilFailOp);
desc.FrontFace.StencilFunc = _ConvertComparisonFunc(pDepthStencilDesc->FrontFace.StencilFunc);
desc.FrontFace.StencilPassOp = _ConvertStencilOp(pDepthStencilDesc->FrontFace.StencilPassOp);
desc.BackFace.StencilDepthFailOp = _ConvertStencilOp(pDepthStencilDesc->BackFace.StencilDepthFailOp);
desc.BackFace.StencilFailOp = _ConvertStencilOp(pDepthStencilDesc->BackFace.StencilFailOp);
desc.BackFace.StencilFunc = _ConvertComparisonFunc(pDepthStencilDesc->BackFace.StencilFunc);
desc.BackFace.StencilPassOp = _ConvertStencilOp(pDepthStencilDesc->BackFace.StencilPassOp);
desc.DepthEnable = pDepthStencilStateDesc->DepthEnable;
desc.DepthWriteMask = _ConvertDepthWriteMask(pDepthStencilStateDesc->DepthWriteMask);
desc.DepthFunc = _ConvertComparisonFunc(pDepthStencilStateDesc->DepthFunc);
desc.StencilEnable = pDepthStencilStateDesc->StencilEnable;
desc.StencilReadMask = pDepthStencilStateDesc->StencilReadMask;
desc.StencilWriteMask = pDepthStencilStateDesc->StencilWriteMask;
desc.FrontFace.StencilDepthFailOp = _ConvertStencilOp(pDepthStencilStateDesc->FrontFace.StencilDepthFailOp);
desc.FrontFace.StencilFailOp = _ConvertStencilOp(pDepthStencilStateDesc->FrontFace.StencilFailOp);
desc.FrontFace.StencilFunc = _ConvertComparisonFunc(pDepthStencilStateDesc->FrontFace.StencilFunc);
desc.FrontFace.StencilPassOp = _ConvertStencilOp(pDepthStencilStateDesc->FrontFace.StencilPassOp);
desc.BackFace.StencilDepthFailOp = _ConvertStencilOp(pDepthStencilStateDesc->BackFace.StencilDepthFailOp);
desc.BackFace.StencilFailOp = _ConvertStencilOp(pDepthStencilStateDesc->BackFace.StencilFailOp);
desc.BackFace.StencilFunc = _ConvertComparisonFunc(pDepthStencilStateDesc->BackFace.StencilFunc);
desc.BackFace.StencilPassOp = _ConvertStencilOp(pDepthStencilStateDesc->BackFace.StencilPassOp);
pDepthStencilState->desc = *pDepthStencilStateDesc;
return device->CreateDepthStencilState(&desc, &pDepthStencilState->resource_DX11);
}
HRESULT GraphicsDevice_DX11::CreateRasterizerState(const RasterizerDesc *pRasterizerDesc, RasterizerState *pRasterizerState)
HRESULT GraphicsDevice_DX11::CreateRasterizerState(const RasterizerStateDesc *pRasterizerStateDesc, RasterizerState *pRasterizerState)
{
D3D11_RASTERIZER_DESC desc;
desc.FillMode = _ConvertFillMode(pRasterizerDesc->FillMode);
desc.CullMode = _ConvertCullMode(pRasterizerDesc->CullMode);
desc.FrontCounterClockwise = pRasterizerDesc->FrontCounterClockwise;
desc.DepthBias = pRasterizerDesc->DepthBias;
desc.DepthBiasClamp = pRasterizerDesc->DepthBiasClamp;
desc.SlopeScaledDepthBias = pRasterizerDesc->SlopeScaledDepthBias;
desc.DepthClipEnable = pRasterizerDesc->DepthClipEnable;
desc.ScissorEnable = pRasterizerDesc->ScissorEnable;
desc.MultisampleEnable = pRasterizerDesc->MultisampleEnable;
desc.AntialiasedLineEnable = pRasterizerDesc->AntialiasedLineEnable;
desc.FillMode = _ConvertFillMode(pRasterizerStateDesc->FillMode);
desc.CullMode = _ConvertCullMode(pRasterizerStateDesc->CullMode);
desc.FrontCounterClockwise = pRasterizerStateDesc->FrontCounterClockwise;
desc.DepthBias = pRasterizerStateDesc->DepthBias;
desc.DepthBiasClamp = pRasterizerStateDesc->DepthBiasClamp;
desc.SlopeScaledDepthBias = pRasterizerStateDesc->SlopeScaledDepthBias;
desc.DepthClipEnable = pRasterizerStateDesc->DepthClipEnable;
desc.ScissorEnable = pRasterizerStateDesc->ScissorEnable;
desc.MultisampleEnable = pRasterizerStateDesc->MultisampleEnable;
desc.AntialiasedLineEnable = pRasterizerStateDesc->AntialiasedLineEnable;
pRasterizerState->desc = *pRasterizerStateDesc;
return device->CreateRasterizerState(&desc, &pRasterizerState->resource_DX11);
}
HRESULT GraphicsDevice_DX11::CreateSamplerState(const SamplerDesc *pSamplerDesc, Sampler *pSamplerState)
@@ -1299,6 +1310,7 @@ HRESULT GraphicsDevice_DX11::CreateSamplerState(const SamplerDesc *pSamplerDesc,
desc.MinLOD = pSamplerDesc->MinLOD;
desc.MaxLOD = pSamplerDesc->MaxLOD;
pSamplerState->desc = *pSamplerDesc;
return device->CreateSamplerState(&desc, &pSamplerState->resource_DX11);
}
@@ -1322,7 +1334,7 @@ void GraphicsDevice_DX11::PresentEnd()
UnbindTextures(0, TEXSLOT_COUNT, GRAPHICSTHREAD_IMMEDIATE);
oddFrame = !oddFrame;
FRAMECOUNT++;
UNLOCK();
}
@@ -1357,14 +1369,14 @@ HRESULT GraphicsDevice_DX11::CreateTextureFromFile(const wstring& fileName, Text
if (!fileName.substr(fileName.length() - 4).compare(wstring(L".dds")))
{
// Load dds
hr = CreateDDSTextureFromFile(device, fileName.c_str(), nullptr, &(*ppTexture)->shaderResourceView_DX11);
hr = CreateDDSTextureFromFile(device, fileName.c_str(), (ID3D11Resource**)&(*ppTexture)->texture2D_DX11, &(*ppTexture)->shaderResourceView_DX11);
}
else
{
// Load WIC
if (mipMaps && threadID == GRAPHICSTHREAD_IMMEDIATE)
LOCK();
hr = CreateWICTextureFromFile(mipMaps, device, deviceContexts[threadID], fileName.c_str(), nullptr, &(*ppTexture)->shaderResourceView_DX11);
hr = CreateWICTextureFromFile(mipMaps, device, deviceContexts[threadID], fileName.c_str(), (ID3D11Resource**)&(*ppTexture)->texture2D_DX11, &(*ppTexture)->shaderResourceView_DX11);
if (mipMaps && threadID == GRAPHICSTHREAD_IMMEDIATE)
UNLOCK();
}
+25 -61
View File
@@ -27,7 +27,7 @@ namespace wiGraphicsTypes
~GraphicsDevice_DX11();
virtual HRESULT CreateBuffer(const BufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer);
virtual HRESULT CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer);
virtual HRESULT CreateTexture1D();
virtual HRESULT CreateTexture2D(const Texture2DDesc* pDesc, const SubresourceData *pInitialData, Texture2D **ppTexture2D);
virtual HRESULT CreateTexture3D();
@@ -45,9 +45,9 @@ namespace wiGraphicsTypes
virtual HRESULT CreateHullShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, HullShader *pHullShader);
virtual HRESULT CreateDomainShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, DomainShader *pDomainShader);
virtual HRESULT CreateComputeShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ClassLinkage* pClassLinkage, ComputeShader *pComputeShader);
virtual HRESULT CreateBlendState(const BlendDesc *pBlendStateDesc, BlendState *pBlendState);
virtual HRESULT CreateDepthStencilState(const DepthStencilDesc *pDepthStencilDesc, DepthStencilState *pDepthStencilState);
virtual HRESULT CreateRasterizerState(const RasterizerDesc *pRasterizerDesc, RasterizerState *pRasterizerState);
virtual HRESULT CreateBlendState(const BlendStateDesc *pBlendStateDesc, BlendState *pBlendState);
virtual HRESULT CreateDepthStencilState(const DepthStencilStateDesc *pDepthStencilStateDesc, DepthStencilState *pDepthStencilState);
virtual HRESULT CreateRasterizerState(const RasterizerStateDesc *pRasterizerStateDesc, RasterizerState *pRasterizerState);
virtual HRESULT CreateSamplerState(const SamplerDesc *pSamplerDesc, Sampler *pSamplerState);
virtual void PresentBegin();
@@ -175,45 +175,45 @@ namespace wiGraphicsTypes
}
virtual void BindConstantBufferPS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->PSSetConstantBuffers(slot, 1, &res);
}
}
virtual void BindConstantBufferVS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->VSSetConstantBuffers(slot, 1, &res);
}
}
virtual void BindConstantBufferGS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->GSSetConstantBuffers(slot, 1, &res);
}
}
virtual void BindConstantBufferDS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->DSSetConstantBuffers(slot, 1, &res);
}
}
virtual void BindConstantBufferHS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->HSSetConstantBuffers(slot, 1, &res);
}
}
virtual void BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
UINT offset = 0;
ID3D11Buffer* res = vertexBuffer ? vertexBuffer->resource_DX11 : nullptr;
ID3D11Buffer* res = vertexBuffer ? vertexBuffer->resource_DX11[vertexBuffer->activeBuffer] : nullptr;
deviceContexts[threadID]->IASetVertexBuffers(slot, 1, &res, &stride, &offset);
}
}
virtual void BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
ID3D11Buffer* res = indexBuffer ? indexBuffer->resource_DX11 : nullptr;
ID3D11Buffer* res = indexBuffer ? indexBuffer->resource_DX11[indexBuffer->activeBuffer] : nullptr;
deviceContexts[threadID]->IASetIndexBuffer(res, DXGI_FORMAT_R32_UINT, 0);
}
}
@@ -276,7 +276,7 @@ namespace wiGraphicsTypes
virtual void BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr) {
UINT offsetSO[1] = { 0 };
ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr;
ID3D11Buffer* res = buffer ? buffer->resource_DX11[buffer->activeBuffer] : nullptr;
deviceContexts[threadID]->SOSetTargets(1, &res, offsetSO);
}
}
@@ -338,62 +338,26 @@ namespace wiGraphicsTypes
}
virtual void UpdateBuffer(GPUBuffer* buffer, const void* data, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE, int dataSize = -1)
{
if (buffer != nullptr && buffer->resource_DX11 != nullptr && data != nullptr && deviceContexts[threadID] != nullptr) {
static thread_local D3D11_BUFFER_DESC d3dDesc;
buffer->resource_DX11->GetDesc(&d3dDesc);
if (buffer != nullptr && buffer->resource_DX11[0] != nullptr && buffer->resource_DX11[1] != nullptr && data != nullptr
&& deviceContexts[threadID] != nullptr)
{
assert(buffer->desc.Usage != USAGE_IMMUTABLE && "Cannot update IMMUTABLE GPUBuffer!");
HRESULT hr;
if (dataSize > (int)d3dDesc.ByteWidth) { //recreate the buffer if new datasize exceeds buffer size
buffer->resource_DX11->Release();
d3dDesc.ByteWidth = dataSize * 2;
BufferDesc desc;
desc.ByteWidth = d3dDesc.ByteWidth;
switch (d3dDesc.Usage)
{
case D3D11_USAGE_DEFAULT:
desc.Usage = USAGE_DEFAULT;
break;
case D3D11_USAGE_IMMUTABLE:
desc.Usage = USAGE_IMMUTABLE;
break;
case D3D11_USAGE_DYNAMIC:
desc.Usage = USAGE_DYNAMIC;
break;
case D3D11_USAGE_STAGING:
desc.Usage = USAGE_STAGING;
break;
};
desc.BindFlags = 0;
{
if (d3dDesc.BindFlags & D3D11_BIND_CONSTANT_BUFFER)
desc.BindFlags |= BIND_CONSTANT_BUFFER;
if (d3dDesc.BindFlags & D3D11_BIND_VERTEX_BUFFER)
desc.BindFlags |= BIND_VERTEX_BUFFER;
if (d3dDesc.BindFlags & D3D11_BIND_INDEX_BUFFER)
desc.BindFlags |= BIND_INDEX_BUFFER;
}
desc.CPUAccessFlags = 0;
{
if (d3dDesc.CPUAccessFlags & D3D11_CPU_ACCESS_WRITE)
desc.CPUAccessFlags |= CPU_ACCESS_WRITE;
if (d3dDesc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)
desc.CPUAccessFlags |= CPU_ACCESS_READ;
}
desc.MiscFlags = 0;
desc.StructureByteStride = d3dDesc.StructureByteStride;
hr = CreateBuffer(&desc, nullptr, buffer);
if (dataSize > (int)buffer->desc.ByteWidth) { //recreate the buffer if new datasize exceeds buffer size
buffer->resource_DX11[buffer->activeBuffer]->Release();
buffer->desc.ByteWidth = dataSize * 2;
hr = CreateBuffer(&buffer->desc, nullptr, buffer);
}
if (d3dDesc.Usage == D3D11_USAGE_DYNAMIC) {
if (buffer->desc.Usage == USAGE_DYNAMIC) {
static thread_local D3D11_MAPPED_SUBRESOURCE mappedResource;
void* dataPtr;
deviceContexts[threadID]->Map(buffer->resource_DX11, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
deviceContexts[threadID]->Map(buffer->resource_DX11[buffer->activeBuffer], 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
dataPtr = (void*)mappedResource.pData;
memcpy(dataPtr, data, (dataSize >= 0 ? dataSize : d3dDesc.ByteWidth));
deviceContexts[threadID]->Unmap(buffer->resource_DX11, 0);
memcpy(dataPtr, data, (dataSize >= 0 ? dataSize : buffer->desc.ByteWidth));
deviceContexts[threadID]->Unmap(buffer->resource_DX11[buffer->activeBuffer], 0);
}
else {
deviceContexts[threadID]->UpdateSubresource(buffer->resource_DX11, 0, nullptr, data, 0, 0);
deviceContexts[threadID]->UpdateSubresource(buffer->resource_DX11[buffer->activeBuffer], 0, nullptr, data, 0, 0);
}
}
}
+5 -5
View File
@@ -92,7 +92,7 @@ void wiHairParticle::SetUpStatic(){
LoadShaders();
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(ConstantBuffer);
@@ -104,7 +104,7 @@ void wiHairParticle::SetUpStatic(){
RasterizerDesc rsd;
RasterizerStateDesc rsd;
rsd.FillMode=FILL_SOLID;
rsd.CullMode=CULL_BACK;
rsd.FrontCounterClockwise=true;
@@ -132,7 +132,7 @@ void wiHairParticle::SetUpStatic(){
wiRenderer::GetDevice()->CreateRasterizerState(&rsd,ncrs);
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = true;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ALL;
dsd.DepthFunc = COMPARISON_LESS;
@@ -153,7 +153,7 @@ void wiHairParticle::SetUpStatic(){
wiRenderer::GetDevice()->CreateDepthStencilState(&dsd, dss);
BlendDesc bld;
BlendStateDesc bld;
ZeroMemory(&bld, sizeof(bld));
bld.RenderTarget[0].BlendEnable=false;
bld.RenderTarget[0].SrcBlend = BLEND_SRC_ALPHA;
@@ -183,7 +183,7 @@ struct PatchHolder:public Cullable
void wiHairParticle::SetUpPatches()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(Point)*MAX_PARTICLES;
+4 -4
View File
@@ -31,7 +31,7 @@ wiImage::wiImage()
void wiImage::LoadBuffers()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(ImageCB);
@@ -79,7 +79,7 @@ void wiImage::LoadShaders()
void wiImage::SetUpStates()
{
RasterizerDesc rs;
RasterizerStateDesc rs;
rs.FillMode=FILL_SOLID;
rs.CullMode=CULL_BACK;
rs.FrontCounterClockwise=false;
@@ -97,7 +97,7 @@ void wiImage::SetUpStates()
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = false;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ZERO;
dsd.DepthFunc = COMPARISON_LESS;
@@ -142,7 +142,7 @@ void wiImage::SetUpStates()
wiRenderer::GetDevice()->CreateDepthStencilState(&dsd, depthNoStencilState);
BlendDesc bd;
BlendStateDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.RenderTarget[0].BlendEnable=true;
bd.RenderTarget[0].SrcBlend = BLEND_SRC_ALPHA;
+4 -4
View File
@@ -84,7 +84,7 @@ void wiLensFlare::LoadShaders(){
}
void wiLensFlare::SetUpCB()
{
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(ConstantBuffer);
@@ -96,7 +96,7 @@ void wiLensFlare::SetUpCB()
}
void wiLensFlare::SetUpStates()
{
RasterizerDesc rs;
RasterizerStateDesc rs;
rs.FillMode=FILL_SOLID;
rs.CullMode=CULL_NONE;
rs.FrontCounterClockwise=true;
@@ -114,7 +114,7 @@ void wiLensFlare::SetUpStates()
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = false;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ZERO;
dsd.DepthFunc = COMPARISON_LESS;
@@ -141,7 +141,7 @@ void wiLensFlare::SetUpStates()
BlendDesc bd;
BlendStateDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.RenderTarget[0].BlendEnable=true;
bd.RenderTarget[0].SrcBlend = BLEND_ONE;
+2 -2
View File
@@ -35,7 +35,7 @@ Lines::Lines(const XMFLOAT3& a, const XMFLOAT3& b, const XMFLOAT4& c)
verts[0].pos = XMFLOAT3(a.x,a.y,a.z);
verts[1].pos = XMFLOAT3(b.x,b.y,b.z);
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DEFAULT;
bd.ByteWidth = sizeof( Vertex ) * 2;
@@ -68,7 +68,7 @@ void Lines::SetUpVertices()
verts[0].pos = XMFLOAT3(0,0,0);
verts[1].pos = XMFLOAT3(0,0,desc.length);
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DEFAULT;
bd.ByteWidth = sizeof( Vertex ) * 2;
+5 -5
View File
@@ -480,7 +480,7 @@ void LoadWiObjects(const string& directory, const string& name, const string& id
// if(objects[i]->mesh){
// if(objects[i]->mesh->trailInfo.base>=0 && objects[i]->mesh->trailInfo.tip>=0){
// //objects[i]->trail.resize(MAX_RIBBONTRAILS);
// BufferDesc bd;
// GPUBufferDesc bd;
// ZeroMemory( &bd, sizeof(bd) );
// bd.Usage = USAGE_DYNAMIC;
// bd.ByteWidth = sizeof( RibbonVertex ) * 1000;
@@ -946,7 +946,7 @@ void LoadWiLights(const string& directory, const string& name, const string& ide
//for(MeshCollection::iterator iter=lightGwiRenderer.begin(); iter!=lightGwiRenderer.end(); ++iter){
// Mesh* iMesh = iter->second;
// BufferDesc bd;
// GPUBufferDesc bd;
// ZeroMemory( &bd, sizeof(bd) );
// bd.Usage = USAGE_DYNAMIC;
// bd.ByteWidth = sizeof( Instance )*iMesh->usedBy.size();
@@ -1674,7 +1674,7 @@ void Mesh::Optimize()
void Mesh::CreateBuffers(Object* object) {
if (!buffersComplete) {
BufferDesc bd;
GPUBufferDesc bd;
if (!meshInstanceBuffer.IsValid())
{
ZeroMemory(&bd, sizeof(bd));
@@ -1926,7 +1926,7 @@ void Model::LoadFromDisk(const string& dir, const string& name, const string& id
{
// Ribbon trails
if (x->mesh->trailInfo.base >= 0 && x->mesh->trailInfo.tip >= 0) {
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.Usage = USAGE_DYNAMIC;
bd.ByteWidth = sizeof(RibbonVertex) * 1000;
@@ -2162,7 +2162,7 @@ void HitSphere::SetUpStatic()
verts.push_back(XMFLOAT3A(XMFLOAT3A(0,0,0)));
}
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_IMMUTABLE;
bd.ByteWidth = sizeof( XMFLOAT3A )*verts.size();
+1 -1
View File
@@ -41,7 +41,7 @@ public:
//void Restore();
wiGraphicsTypes::Texture2D* GetTexture(int viewID = 0) const{ return (isCube ? renderTargets_Cube[viewID] : renderTargets[viewID]); }
wiGraphicsTypes::Texture2DDesc GetDesc(int viewID = 0) const { assert(viewID < numViews); return GetTexture(viewID)->desc; }
wiGraphicsTypes::Texture2DDesc GetDesc(int viewID = 0) const { assert(viewID < numViews); return GetTexture(viewID)->GetDesc(); }
UINT GetMipCount();
bool IsInitialized() { return (numViews > 0 || depth != nullptr); }
};
+4 -4
View File
@@ -494,7 +494,7 @@ void wiRenderer::LoadBuffers()
constantBuffers[i] = new GPUBuffer;
}
BufferDesc bd;
GPUBufferDesc bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = USAGE_DYNAMIC;
bd.BindFlags = BIND_CONSTANT_BUFFER;
@@ -822,7 +822,7 @@ void wiRenderer::SetUpStates()
rasterizers[i] = new RasterizerState;
}
RasterizerDesc rs;
RasterizerStateDesc rs;
rs.FillMode=FILL_SOLID;
rs.CullMode=CULL_BACK;
rs.FrontCounterClockwise=true;
@@ -913,7 +913,7 @@ void wiRenderer::SetUpStates()
depthStencils[i] = new DepthStencilState;
}
DepthStencilDesc dsd;
DepthStencilStateDesc dsd;
dsd.DepthEnable = true;
dsd.DepthWriteMask = DEPTH_WRITE_MASK_ALL;
dsd.DepthFunc = COMPARISON_LESS_EQUAL;
@@ -981,7 +981,7 @@ void wiRenderer::SetUpStates()
blendStates[i] = new BlendState;
}
BlendDesc bd;
BlendStateDesc bd;
ZeroMemory(&bd, sizeof(bd));
bd.RenderTarget[0].BlendEnable=false;
bd.RenderTarget[0].SrcBlend = BLEND_SRC_ALPHA;
+1 -1
View File
@@ -7,7 +7,7 @@ namespace wiVersion
// minor features, major bug fixes
const int minor = 7;
// minor bug fixes, alterations, refactors
const int revision = 0;
const int revision = 1;
long GetVersion()