mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-25 00:58:30 -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)
|
||||
{
|
||||
m_maxDrawPerBatch = _maxDrawPerBatch;
|
||||
m_minIndirect = 64;
|
||||
m_flushPerBatch = _maxDrawPerBatch;
|
||||
setSeqMode(false);
|
||||
setIndirectMode(true);
|
||||
|
||||
ID3D12Device* device = s_renderD3D12->m_device;
|
||||
ID3D12RootSignature* rootSignature = s_renderD3D12->m_rootSignature;
|
||||
|
@ -4222,21 +4222,6 @@ data.NumQualityLevels = 0;
|
|||
m_batch.flush(m_commandList, true);
|
||||
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;
|
||||
currentPso = NULL;
|
||||
|
||||
|
@ -4281,7 +4266,15 @@ data.NumQualityLevels = 0;
|
|||
if (!wasCompute)
|
||||
{
|
||||
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;
|
||||
|
||||
bool constantsChanged = compute.m_constBegin < compute.m_constEnd;
|
||||
|
@ -4395,10 +4388,25 @@ data.NumQualityLevels = 0;
|
|||
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) )
|
||||
{
|
||||
BX_UNUSED(s_viewNameW);
|
||||
|
@ -4408,8 +4416,6 @@ data.NumQualityLevels = 0;
|
|||
// PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), viewNameW);
|
||||
}
|
||||
|
||||
wasCompute = false;
|
||||
|
||||
m_currentProgram = NULL;
|
||||
currentSamplerStateIdx = invalidHandle;
|
||||
|
||||
|
@ -4420,21 +4426,6 @@ data.NumQualityLevels = 0;
|
|||
};
|
||||
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.m_scissor = !draw.m_scissor;
|
||||
changedFlags = BGFX_STATE_MASK;
|
||||
|
@ -4451,13 +4442,39 @@ data.NumQualityLevels = 0;
|
|||
|
||||
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) )
|
||||
; currentBindHash != bindHash
|
||||
; currentBindHash = bindHash
|
||||
)
|
||||
{
|
||||
m_batch.flush(m_commandList);
|
||||
|
||||
D3D12_GPU_DESCRIPTOR_HANDLE* srv = bindLru.find(bindHash);
|
||||
if (NULL == srv)
|
||||
{
|
||||
|
@ -4509,24 +4526,14 @@ data.NumQualityLevels = 0;
|
|||
|
||||
if (0 != changedStencil)
|
||||
{
|
||||
m_batch.flush(m_commandList);
|
||||
|
||||
const uint32_t fstencil = unpackStencil(0, draw.m_stencil);
|
||||
const uint32_t ref = (fstencil&BGFX_STENCIL_FUNC_REF_MASK)>>BGFX_STENCIL_FUNC_REF_SHIFT;
|
||||
m_commandList->OMSetStencilRef(ref);
|
||||
}
|
||||
|
||||
const uint64_t state = draw.m_flags;
|
||||
bool hasFactor = 0
|
||||
|| f0 == (state & f0)
|
||||
|| f1 == (state & f1)
|
||||
;
|
||||
|
||||
if (hasFactor
|
||||
&& blendFactor != draw.m_rgba)
|
||||
{
|
||||
m_batch.flush(m_commandList);
|
||||
|
||||
blendFactor = draw.m_rgba;
|
||||
|
||||
float bf[4];
|
||||
|
@ -4540,28 +4547,14 @@ data.NumQualityLevels = 0;
|
|||
if (0 != (BGFX_STATE_PT_MASK & changedFlags)
|
||||
|| prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
|
||||
{
|
||||
m_batch.flush(m_commandList);
|
||||
|
||||
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
|
||||
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
|
||||
prim = s_primInfo[primIndex];
|
||||
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)
|
||||
{
|
||||
m_batch.flush(m_commandList);
|
||||
|
||||
currentPso = pso;
|
||||
m_commandList->SetPipelineState(pso);
|
||||
}
|
||||
|
@ -4595,8 +4588,7 @@ data.NumQualityLevels = 0;
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t numIndices = 0;
|
||||
numIndices = m_batch.draw(m_commandList, gpuAddress, draw);
|
||||
uint32_t numIndices = m_batch.draw(m_commandList, gpuAddress, draw);
|
||||
uint32_t numPrimsSubmitted = numIndices / prim.m_div - prim.m_sub;
|
||||
uint32_t numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
||||
|
||||
|
|
|
@ -394,6 +394,11 @@ namespace bgfx { namespace d3d12
|
|||
m_flushPerBatch = _enabled ? 1 : m_maxDrawPerBatch;
|
||||
}
|
||||
|
||||
void setIndirectMode(bool _enabled)
|
||||
{
|
||||
m_minIndirect = _enabled ? 64 : UINT32_MAX;
|
||||
}
|
||||
|
||||
ID3D12CommandSignature* m_commandSignature[Count];
|
||||
uint32_t m_num[Count];
|
||||
void* m_cmds[Count];
|
||||
|
|
Loading…
Reference in a new issue