mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Cleanup.
This commit is contained in:
parent
7e7c4cc696
commit
ea88ba93fb
2 changed files with 61 additions and 64 deletions
|
@ -2934,8 +2934,8 @@ data.NumQualityLevels = 0;
|
||||||
void BatchD3D12::create(uint32_t _maxDrawPerBatch)
|
void BatchD3D12::create(uint32_t _maxDrawPerBatch)
|
||||||
{
|
{
|
||||||
m_maxDrawPerBatch = _maxDrawPerBatch;
|
m_maxDrawPerBatch = _maxDrawPerBatch;
|
||||||
m_minIndirect = 64;
|
setSeqMode(false);
|
||||||
m_flushPerBatch = _maxDrawPerBatch;
|
setIndirectMode(true);
|
||||||
|
|
||||||
ID3D12Device* device = s_renderD3D12->m_device;
|
ID3D12Device* device = s_renderD3D12->m_device;
|
||||||
ID3D12RootSignature* rootSignature = s_renderD3D12->m_rootSignature;
|
ID3D12RootSignature* rootSignature = s_renderD3D12->m_rootSignature;
|
||||||
|
@ -4222,21 +4222,6 @@ data.NumQualityLevels = 0;
|
||||||
m_batch.flush(m_commandList, true);
|
m_batch.flush(m_commandList, true);
|
||||||
kick();
|
kick();
|
||||||
|
|
||||||
if (isCompute)
|
|
||||||
{
|
|
||||||
m_commandList->SetComputeRootSignature(m_rootSignature);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_commandList->SetGraphicsRootSignature(m_rootSignature);
|
|
||||||
}
|
|
||||||
|
|
||||||
ID3D12DescriptorHeap* heaps[] = {
|
|
||||||
m_samplerAllocator.getHeap(),
|
|
||||||
scratchBuffer.getHeap(),
|
|
||||||
};
|
|
||||||
m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps);
|
|
||||||
|
|
||||||
view = key.m_view;
|
view = key.m_view;
|
||||||
currentPso = NULL;
|
currentPso = NULL;
|
||||||
|
|
||||||
|
@ -4281,7 +4266,15 @@ data.NumQualityLevels = 0;
|
||||||
if (!wasCompute)
|
if (!wasCompute)
|
||||||
{
|
{
|
||||||
wasCompute = true;
|
wasCompute = true;
|
||||||
|
|
||||||
|
m_commandList->SetComputeRootSignature(m_rootSignature);
|
||||||
|
ID3D12DescriptorHeap* heaps[] = {
|
||||||
|
m_samplerAllocator.getHeap(),
|
||||||
|
scratchBuffer.getHeap(),
|
||||||
|
};
|
||||||
|
m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
const RenderCompute& compute = renderItem.compute;
|
const RenderCompute& compute = renderItem.compute;
|
||||||
|
|
||||||
bool constantsChanged = compute.m_constBegin < compute.m_constEnd;
|
bool constantsChanged = compute.m_constBegin < compute.m_constEnd;
|
||||||
|
@ -4395,10 +4388,25 @@ data.NumQualityLevels = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool resetState = viewChanged || wasCompute;
|
const RenderDraw& draw = renderItem.draw;
|
||||||
|
|
||||||
if (wasCompute)
|
const uint64_t newFlags = draw.m_flags;
|
||||||
|
uint64_t changedFlags = currentState.m_flags ^ draw.m_flags;
|
||||||
|
currentState.m_flags = newFlags;
|
||||||
|
|
||||||
|
const uint64_t newStencil = draw.m_stencil;
|
||||||
|
uint64_t changedStencil = (currentState.m_stencil ^ draw.m_stencil) & BGFX_STENCIL_FUNC_REF_MASK;
|
||||||
|
currentState.m_stencil = newStencil;
|
||||||
|
|
||||||
|
if (viewChanged
|
||||||
|
|| wasCompute)
|
||||||
{
|
{
|
||||||
|
if (wasCompute)
|
||||||
|
{
|
||||||
|
wasCompute = false;
|
||||||
|
kick();
|
||||||
|
}
|
||||||
|
|
||||||
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
|
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
|
||||||
{
|
{
|
||||||
BX_UNUSED(s_viewNameW);
|
BX_UNUSED(s_viewNameW);
|
||||||
|
@ -4408,8 +4416,6 @@ data.NumQualityLevels = 0;
|
||||||
// PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), viewNameW);
|
// PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), viewNameW);
|
||||||
}
|
}
|
||||||
|
|
||||||
wasCompute = false;
|
|
||||||
|
|
||||||
m_currentProgram = NULL;
|
m_currentProgram = NULL;
|
||||||
currentSamplerStateIdx = invalidHandle;
|
currentSamplerStateIdx = invalidHandle;
|
||||||
|
|
||||||
|
@ -4420,21 +4426,6 @@ data.NumQualityLevels = 0;
|
||||||
};
|
};
|
||||||
m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps);
|
m_commandList->SetDescriptorHeaps(BX_COUNTOF(heaps), heaps);
|
||||||
|
|
||||||
// invalidateCompute();
|
|
||||||
}
|
|
||||||
|
|
||||||
const RenderDraw& draw = renderItem.draw;
|
|
||||||
|
|
||||||
const uint64_t newFlags = draw.m_flags;
|
|
||||||
uint64_t changedFlags = currentState.m_flags ^ draw.m_flags;
|
|
||||||
currentState.m_flags = newFlags;
|
|
||||||
|
|
||||||
const uint64_t newStencil = draw.m_stencil;
|
|
||||||
uint64_t changedStencil = (currentState.m_stencil ^ draw.m_stencil) & BGFX_STENCIL_FUNC_REF_MASK;
|
|
||||||
currentState.m_stencil = newStencil;
|
|
||||||
|
|
||||||
if (resetState)
|
|
||||||
{
|
|
||||||
currentState.clear();
|
currentState.clear();
|
||||||
currentState.m_scissor = !draw.m_scissor;
|
currentState.m_scissor = !draw.m_scissor;
|
||||||
changedFlags = BGFX_STATE_MASK;
|
changedFlags = BGFX_STATE_MASK;
|
||||||
|
@ -4451,13 +4442,39 @@ data.NumQualityLevels = 0;
|
||||||
|
|
||||||
if (isValid(draw.m_vertexBuffer) )
|
if (isValid(draw.m_vertexBuffer) )
|
||||||
{
|
{
|
||||||
|
const uint64_t state = draw.m_flags;
|
||||||
|
bool hasFactor = 0
|
||||||
|
|| f0 == (state & f0)
|
||||||
|
|| f1 == (state & f1)
|
||||||
|
;
|
||||||
|
|
||||||
|
const VertexBufferD3D12& vb = m_vertexBuffers[draw.m_vertexBuffer.idx];
|
||||||
|
uint16_t declIdx = !isValid(vb.m_decl) ? draw.m_vertexDecl.idx : vb.m_decl.idx;
|
||||||
|
|
||||||
|
ID3D12PipelineState* pso =
|
||||||
|
getPipelineState(state
|
||||||
|
, draw.m_stencil
|
||||||
|
, declIdx
|
||||||
|
, key.m_program
|
||||||
|
, uint8_t(draw.m_instanceDataStride/16)
|
||||||
|
);
|
||||||
|
|
||||||
|
uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) );
|
||||||
|
if (currentBindHash != bindHash
|
||||||
|
|| 0 != changedStencil
|
||||||
|
|| (hasFactor && blendFactor != draw.m_rgba)
|
||||||
|
|| (0 != (BGFX_STATE_PT_MASK & changedFlags)
|
||||||
|
|| prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
|
||||||
|
|| pso != currentPso)
|
||||||
|
{
|
||||||
|
m_batch.flush(m_commandList);
|
||||||
|
}
|
||||||
|
|
||||||
for (uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) )
|
for (uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) )
|
||||||
; currentBindHash != bindHash
|
; currentBindHash != bindHash
|
||||||
; currentBindHash = bindHash
|
; currentBindHash = bindHash
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
m_batch.flush(m_commandList);
|
|
||||||
|
|
||||||
D3D12_GPU_DESCRIPTOR_HANDLE* srv = bindLru.find(bindHash);
|
D3D12_GPU_DESCRIPTOR_HANDLE* srv = bindLru.find(bindHash);
|
||||||
if (NULL == srv)
|
if (NULL == srv)
|
||||||
{
|
{
|
||||||
|
@ -4509,24 +4526,14 @@ data.NumQualityLevels = 0;
|
||||||
|
|
||||||
if (0 != changedStencil)
|
if (0 != changedStencil)
|
||||||
{
|
{
|
||||||
m_batch.flush(m_commandList);
|
|
||||||
|
|
||||||
const uint32_t fstencil = unpackStencil(0, draw.m_stencil);
|
const uint32_t fstencil = unpackStencil(0, draw.m_stencil);
|
||||||
const uint32_t ref = (fstencil&BGFX_STENCIL_FUNC_REF_MASK)>>BGFX_STENCIL_FUNC_REF_SHIFT;
|
const uint32_t ref = (fstencil&BGFX_STENCIL_FUNC_REF_MASK)>>BGFX_STENCIL_FUNC_REF_SHIFT;
|
||||||
m_commandList->OMSetStencilRef(ref);
|
m_commandList->OMSetStencilRef(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint64_t state = draw.m_flags;
|
|
||||||
bool hasFactor = 0
|
|
||||||
|| f0 == (state & f0)
|
|
||||||
|| f1 == (state & f1)
|
|
||||||
;
|
|
||||||
|
|
||||||
if (hasFactor
|
if (hasFactor
|
||||||
&& blendFactor != draw.m_rgba)
|
&& blendFactor != draw.m_rgba)
|
||||||
{
|
{
|
||||||
m_batch.flush(m_commandList);
|
|
||||||
|
|
||||||
blendFactor = draw.m_rgba;
|
blendFactor = draw.m_rgba;
|
||||||
|
|
||||||
float bf[4];
|
float bf[4];
|
||||||
|
@ -4540,28 +4547,14 @@ data.NumQualityLevels = 0;
|
||||||
if (0 != (BGFX_STATE_PT_MASK & changedFlags)
|
if (0 != (BGFX_STATE_PT_MASK & changedFlags)
|
||||||
|| prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
|
|| prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
|
||||||
{
|
{
|
||||||
m_batch.flush(m_commandList);
|
|
||||||
|
|
||||||
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
|
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
|
||||||
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
|
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
|
||||||
prim = s_primInfo[primIndex];
|
prim = s_primInfo[primIndex];
|
||||||
m_commandList->IASetPrimitiveTopology(prim.m_toplogy);
|
m_commandList->IASetPrimitiveTopology(prim.m_toplogy);
|
||||||
}
|
}
|
||||||
|
|
||||||
const VertexBufferD3D12& vb = m_vertexBuffers[draw.m_vertexBuffer.idx];
|
|
||||||
uint16_t declIdx = !isValid(vb.m_decl) ? draw.m_vertexDecl.idx : vb.m_decl.idx;
|
|
||||||
|
|
||||||
ID3D12PipelineState* pso =
|
|
||||||
getPipelineState(state
|
|
||||||
, draw.m_stencil
|
|
||||||
, declIdx
|
|
||||||
, key.m_program
|
|
||||||
, uint8_t(draw.m_instanceDataStride/16)
|
|
||||||
);
|
|
||||||
if (pso != currentPso)
|
if (pso != currentPso)
|
||||||
{
|
{
|
||||||
m_batch.flush(m_commandList);
|
|
||||||
|
|
||||||
currentPso = pso;
|
currentPso = pso;
|
||||||
m_commandList->SetPipelineState(pso);
|
m_commandList->SetPipelineState(pso);
|
||||||
}
|
}
|
||||||
|
@ -4595,8 +4588,7 @@ data.NumQualityLevels = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t numIndices = 0;
|
uint32_t numIndices = m_batch.draw(m_commandList, gpuAddress, draw);
|
||||||
numIndices = m_batch.draw(m_commandList, gpuAddress, draw);
|
|
||||||
uint32_t numPrimsSubmitted = numIndices / prim.m_div - prim.m_sub;
|
uint32_t numPrimsSubmitted = numIndices / prim.m_div - prim.m_sub;
|
||||||
uint32_t numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
uint32_t numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
||||||
|
|
||||||
|
|
|
@ -394,6 +394,11 @@ namespace bgfx { namespace d3d12
|
||||||
m_flushPerBatch = _enabled ? 1 : m_maxDrawPerBatch;
|
m_flushPerBatch = _enabled ? 1 : m_maxDrawPerBatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setIndirectMode(bool _enabled)
|
||||||
|
{
|
||||||
|
m_minIndirect = _enabled ? 64 : UINT32_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
ID3D12CommandSignature* m_commandSignature[Count];
|
ID3D12CommandSignature* m_commandSignature[Count];
|
||||||
uint32_t m_num[Count];
|
uint32_t m_num[Count];
|
||||||
void* m_cmds[Count];
|
void* m_cmds[Count];
|
||||||
|
|
Loading…
Reference in a new issue