mirror of https://github.com/bkaradzic/bgfx
Cleanup.
This commit is contained in:
parent
fba9727f8e
commit
095188a533
|
@ -1162,9 +1162,9 @@ namespace bgfx
|
|||
UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
|
||||
m_uniformEnd = uniformBuffer->getPos();
|
||||
|
||||
m_key.m_program = kInvalidHandle == _program.idx
|
||||
? 0
|
||||
: _program.idx
|
||||
m_key.m_program = isValid(_program)
|
||||
? _program
|
||||
: ProgramHandle{0}
|
||||
;
|
||||
|
||||
m_key.m_view = _id;
|
||||
|
@ -1257,7 +1257,7 @@ namespace bgfx
|
|||
m_compute.m_numZ = bx::max(_numZ, 1u);
|
||||
m_compute.m_submitFlags = _flags;
|
||||
|
||||
m_key.m_program = _handle.idx;
|
||||
m_key.m_program = _handle;
|
||||
m_key.m_depth = 0;
|
||||
m_key.m_view = _id;
|
||||
m_key.m_seq = s_ctx->getSeqIncr(_id);
|
||||
|
|
94
src/bgfx_p.h
94
src/bgfx_p.h
|
@ -1034,46 +1034,58 @@ namespace bgfx
|
|||
|
||||
uint64_t encodeDraw(Enum _type)
|
||||
{
|
||||
if (SortDepth == _type)
|
||||
switch (_type)
|
||||
{
|
||||
const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_1_DEPTH_SHIFT ) & SORT_KEY_DRAW_1_DEPTH_MASK;
|
||||
const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_1_PROGRAM_SHIFT) & SORT_KEY_DRAW_1_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_1_TRANS_SHIFT ) & SORT_KEY_DRAW_1_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_DEPTH|depth|trans|program;
|
||||
case SortProgram:
|
||||
{
|
||||
const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_0_DEPTH_SHIFT ) & SORT_KEY_DRAW_0_DEPTH_MASK;
|
||||
const uint64_t program = (uint64_t(m_program.idx) << SORT_KEY_DRAW_0_PROGRAM_SHIFT) & SORT_KEY_DRAW_0_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_0_TRANS_SHIFT ) & SORT_KEY_DRAW_0_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_PROGRAM|trans|program|depth;
|
||||
|
||||
return key;
|
||||
}
|
||||
else if (SortSequence == _type)
|
||||
{
|
||||
const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_DRAW_2_SEQ_SHIFT ) & SORT_KEY_DRAW_2_SEQ_MASK;
|
||||
const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_2_PROGRAM_SHIFT) & SORT_KEY_DRAW_2_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_2_TRANS_SHIFT ) & SORT_KEY_DRAW_2_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_SEQUENCE|seq|trans|program;
|
||||
return key;
|
||||
}
|
||||
break;
|
||||
|
||||
BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_DRAW_2_SEQ_SHIFT)
|
||||
, "SortKey error, sequence is truncated (m_seq: %d)."
|
||||
, m_seq
|
||||
);
|
||||
case SortDepth:
|
||||
{
|
||||
const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_1_DEPTH_SHIFT ) & SORT_KEY_DRAW_1_DEPTH_MASK;
|
||||
const uint64_t program = (uint64_t(m_program.idx) << SORT_KEY_DRAW_1_PROGRAM_SHIFT) & SORT_KEY_DRAW_1_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_1_TRANS_SHIFT ) & SORT_KEY_DRAW_1_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_DEPTH|depth|trans|program;
|
||||
return key;
|
||||
}
|
||||
break;
|
||||
|
||||
return key;
|
||||
case SortSequence:
|
||||
{
|
||||
const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_DRAW_2_SEQ_SHIFT ) & SORT_KEY_DRAW_2_SEQ_MASK;
|
||||
const uint64_t program = (uint64_t(m_program.idx) << SORT_KEY_DRAW_2_PROGRAM_SHIFT) & SORT_KEY_DRAW_2_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_2_TRANS_SHIFT ) & SORT_KEY_DRAW_2_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_SEQUENCE|seq|trans|program;
|
||||
|
||||
BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_DRAW_2_SEQ_SHIFT)
|
||||
, "SortKey error, sequence is truncated (m_seq: %d)."
|
||||
, m_seq
|
||||
);
|
||||
|
||||
return key;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_0_DEPTH_SHIFT ) & SORT_KEY_DRAW_0_DEPTH_MASK;
|
||||
const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_0_PROGRAM_SHIFT) & SORT_KEY_DRAW_0_PROGRAM_MASK;
|
||||
const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_0_TRANS_SHIFT ) & SORT_KEY_DRAW_0_TRANS_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_PROGRAM|trans|program|depth;
|
||||
|
||||
return key;
|
||||
BX_CHECK(false, "You should not be here.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t encodeCompute()
|
||||
{
|
||||
const uint64_t program = (uint64_t(m_program) << SORT_KEY_COMPUTE_PROGRAM_SHIFT) & SORT_KEY_COMPUTE_PROGRAM_MASK;
|
||||
const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_COMPUTE_SEQ_SHIFT ) & SORT_KEY_COMPUTE_SEQ_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t program = (uint64_t(m_program.idx) << SORT_KEY_COMPUTE_PROGRAM_SHIFT) & SORT_KEY_COMPUTE_PROGRAM_MASK;
|
||||
const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_COMPUTE_SEQ_SHIFT ) & SORT_KEY_COMPUTE_SEQ_MASK;
|
||||
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
|
||||
const uint64_t key = program|seq|view;
|
||||
|
||||
BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_COMPUTE_SEQ_SHIFT)
|
||||
|
@ -1093,20 +1105,20 @@ namespace bgfx
|
|||
uint64_t type = _key & SORT_KEY_DRAW_TYPE_MASK;
|
||||
if (type == SORT_KEY_DRAW_TYPE_DEPTH)
|
||||
{
|
||||
m_program = uint16_t( (_key & SORT_KEY_DRAW_1_PROGRAM_MASK) >> SORT_KEY_DRAW_1_PROGRAM_SHIFT);
|
||||
m_program.idx = uint16_t( (_key & SORT_KEY_DRAW_1_PROGRAM_MASK) >> SORT_KEY_DRAW_1_PROGRAM_SHIFT);
|
||||
return false;
|
||||
}
|
||||
else if (type == SORT_KEY_DRAW_TYPE_SEQUENCE)
|
||||
{
|
||||
m_program = uint16_t( (_key & SORT_KEY_DRAW_2_PROGRAM_MASK) >> SORT_KEY_DRAW_2_PROGRAM_SHIFT);
|
||||
m_program.idx = uint16_t( (_key & SORT_KEY_DRAW_2_PROGRAM_MASK) >> SORT_KEY_DRAW_2_PROGRAM_SHIFT);
|
||||
return false;
|
||||
}
|
||||
|
||||
m_program = uint16_t( (_key & SORT_KEY_DRAW_0_PROGRAM_MASK) >> SORT_KEY_DRAW_0_PROGRAM_SHIFT);
|
||||
m_program.idx = uint16_t( (_key & SORT_KEY_DRAW_0_PROGRAM_MASK) >> SORT_KEY_DRAW_0_PROGRAM_SHIFT);
|
||||
return false; // draw
|
||||
}
|
||||
|
||||
m_program = uint16_t( (_key & SORT_KEY_COMPUTE_PROGRAM_MASK) >> SORT_KEY_COMPUTE_PROGRAM_SHIFT);
|
||||
m_program.idx = uint16_t( (_key & SORT_KEY_COMPUTE_PROGRAM_MASK) >> SORT_KEY_COMPUTE_PROGRAM_SHIFT);
|
||||
return true; // compute
|
||||
}
|
||||
|
||||
|
@ -1127,16 +1139,16 @@ namespace bgfx
|
|||
{
|
||||
m_depth = 0;
|
||||
m_seq = 0;
|
||||
m_program = 0;
|
||||
m_program = {0};
|
||||
m_view = 0;
|
||||
m_trans = 0;
|
||||
}
|
||||
|
||||
uint32_t m_depth;
|
||||
uint32_t m_seq;
|
||||
uint16_t m_program;
|
||||
ViewId m_view;
|
||||
uint8_t m_trans;
|
||||
uint32_t m_depth;
|
||||
uint32_t m_seq;
|
||||
ProgramHandle m_program;
|
||||
ViewId m_view;
|
||||
uint8_t m_trans;
|
||||
};
|
||||
#undef SORT_KEY_RENDER_DRAW
|
||||
|
||||
|
@ -1796,7 +1808,7 @@ namespace bgfx
|
|||
{
|
||||
SortKey term;
|
||||
term.reset();
|
||||
term.m_program = kInvalidHandle;
|
||||
term.m_program = BGFX_INVALID_HANDLE;
|
||||
m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS] = term.encodeDraw(SortKey::SortProgram);
|
||||
m_sortValues[BGFX_CONFIG_MAX_DRAW_CALLS] = BGFX_CONFIG_MAX_DRAW_CALLS;
|
||||
bx::memSet(m_occlusion, 0xff, sizeof(m_occlusion) );
|
||||
|
|
|
@ -5257,7 +5257,7 @@ namespace bgfx { namespace d3d11
|
|||
bool scissorEnabled = false;
|
||||
setDebugWireframe(wireframe);
|
||||
|
||||
uint16_t programIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
SortKey key;
|
||||
uint16_t view = UINT16_MAX;
|
||||
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
|
||||
|
@ -5333,7 +5333,7 @@ namespace bgfx { namespace d3d11
|
|||
}
|
||||
|
||||
view = key.m_view;
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
|
||||
if (_render->m_view[view].m_fbh.idx != fbh.idx)
|
||||
{
|
||||
|
@ -5454,11 +5454,11 @@ namespace bgfx { namespace d3d11
|
|||
bool constantsChanged = compute.m_uniformBegin < compute.m_uniformEnd;
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
|
||||
|
||||
if (key.m_program != programIdx)
|
||||
if (key.m_program.idx != currentProgram.idx)
|
||||
{
|
||||
programIdx = key.m_program;
|
||||
currentProgram = key.m_program;
|
||||
|
||||
ProgramD3D11& program = m_program[key.m_program];
|
||||
ProgramD3D11& program = m_program[currentProgram.idx];
|
||||
m_currentProgram = &program;
|
||||
|
||||
deviceCtx->CSSetShader(program.m_vsh->m_computeShader, NULL, 0);
|
||||
|
@ -5468,9 +5468,9 @@ namespace bgfx { namespace d3d11
|
|||
constantsChanged = true;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramD3D11& program = m_program[programIdx];
|
||||
ProgramD3D11& program = m_program[currentProgram.idx];
|
||||
|
||||
if (constantsChanged)
|
||||
{
|
||||
|
@ -5597,7 +5597,7 @@ namespace bgfx { namespace d3d11
|
|||
PIX_BEGINEVENT(D3DCOLOR_DRAW, viewNameW);
|
||||
}
|
||||
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
m_currentProgram = NULL;
|
||||
|
||||
invalidateCompute();
|
||||
|
@ -5748,11 +5748,11 @@ namespace bgfx { namespace d3d11
|
|||
bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
|
||||
|
||||
if (key.m_program != programIdx)
|
||||
if (key.m_program.idx != currentProgram.idx)
|
||||
{
|
||||
programIdx = key.m_program;
|
||||
currentProgram = key.m_program;
|
||||
|
||||
if (kInvalidHandle == programIdx)
|
||||
if (!isValid(currentProgram) )
|
||||
{
|
||||
m_currentProgram = NULL;
|
||||
|
||||
|
@ -5761,7 +5761,7 @@ namespace bgfx { namespace d3d11
|
|||
}
|
||||
else
|
||||
{
|
||||
ProgramD3D11& program = m_program[programIdx];
|
||||
ProgramD3D11& program = m_program[currentProgram.idx];
|
||||
m_currentProgram = &program;
|
||||
|
||||
const ShaderD3D11* vsh = program.m_vsh;
|
||||
|
@ -5785,9 +5785,9 @@ namespace bgfx { namespace d3d11
|
|||
constantsChanged = true;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramD3D11& program = m_program[programIdx];
|
||||
ProgramD3D11& program = m_program[currentProgram.idx];
|
||||
|
||||
if (constantsChanged)
|
||||
{
|
||||
|
@ -5931,12 +5931,12 @@ namespace bgfx { namespace d3d11
|
|||
const VertexBufferD3D11& inst = m_vertexBuffers[draw.m_instanceDataBuffer.idx];
|
||||
const uint32_t instStride = draw.m_instanceDataStride;
|
||||
deviceCtx->IASetVertexBuffers(numStreams, 1, &inst.m_ptr, &instStride, &draw.m_instanceDataOffset);
|
||||
setInputLayout(numStreams, decls, m_program[programIdx], uint16_t(instStride/16) );
|
||||
setInputLayout(numStreams, decls, m_program[currentProgram.idx], uint16_t(instStride/16) );
|
||||
}
|
||||
else
|
||||
{
|
||||
deviceCtx->IASetVertexBuffers(numStreams, 1, s_zero.m_buffer, s_zero.m_zero, s_zero.m_zero);
|
||||
setInputLayout(numStreams, decls, m_program[programIdx], 0);
|
||||
setInputLayout(numStreams, decls, m_program[currentProgram.idx], 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -5948,7 +5948,7 @@ namespace bgfx { namespace d3d11
|
|||
const VertexBufferD3D11& inst = m_vertexBuffers[draw.m_instanceDataBuffer.idx];
|
||||
const uint32_t instStride = draw.m_instanceDataStride;
|
||||
deviceCtx->IASetVertexBuffers(0, 1, &inst.m_ptr, &instStride, &draw.m_instanceDataOffset);
|
||||
setInputLayout(0, NULL, m_program[programIdx], uint16_t(instStride/16) );
|
||||
setInputLayout(0, NULL, m_program[currentProgram.idx], uint16_t(instStride/16) );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1928,7 +1928,7 @@ namespace bgfx { namespace d3d12
|
|||
, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT)
|
||||
, 1
|
||||
, decls
|
||||
, _blitter.m_program.idx
|
||||
, _blitter.m_program
|
||||
, 0
|
||||
);
|
||||
m_commandList->SetPipelineState(pso);
|
||||
|
@ -1942,7 +1942,7 @@ namespace bgfx { namespace d3d12
|
|||
setShaderUniform(flags, predefined.m_loc, proj, 4);
|
||||
|
||||
D3D12_GPU_VIRTUAL_ADDRESS gpuAddress;
|
||||
commitShaderConstants(_blitter.m_program.idx, gpuAddress);
|
||||
commitShaderConstants(_blitter.m_program, gpuAddress);
|
||||
|
||||
ScratchBufferD3D12& scratchBuffer = m_scratchBuffer[m_backBufferColorIdx];
|
||||
ID3D12DescriptorHeap* heaps[] =
|
||||
|
@ -2292,9 +2292,9 @@ namespace bgfx { namespace d3d12
|
|||
setShaderUniform(_flags, _regIndex, _val, _numRegs);
|
||||
}
|
||||
|
||||
void commitShaderConstants(uint16_t _programIdx, D3D12_GPU_VIRTUAL_ADDRESS& _gpuAddress)
|
||||
void commitShaderConstants(ProgramHandle _program, D3D12_GPU_VIRTUAL_ADDRESS& _gpuAddress)
|
||||
{
|
||||
const ProgramD3D12& program = m_program[_programIdx];
|
||||
const ProgramD3D12& program = m_program[_program.idx];
|
||||
uint32_t total = bx::strideAlign(0
|
||||
+ program.m_vsh->m_size
|
||||
+ (NULL != program.m_fsh ? program.m_fsh->m_size : 0)
|
||||
|
@ -2677,9 +2677,9 @@ namespace bgfx { namespace d3d12
|
|||
}
|
||||
}
|
||||
|
||||
ID3D12PipelineState* getPipelineState(uint16_t _programIdx)
|
||||
ID3D12PipelineState* getPipelineState(ProgramHandle _program)
|
||||
{
|
||||
ProgramD3D12& program = m_program[_programIdx];
|
||||
ProgramD3D12& program = m_program[_program.idx];
|
||||
|
||||
const uint32_t hash = program.m_vsh->m_hash;
|
||||
|
||||
|
@ -2712,11 +2712,11 @@ namespace bgfx { namespace d3d12
|
|||
, uint64_t _stencil
|
||||
, uint8_t _numStreams
|
||||
, const VertexDecl** _vertexDecls
|
||||
, uint16_t _programIdx
|
||||
, ProgramHandle _program
|
||||
, uint8_t _numInstanceData
|
||||
)
|
||||
{
|
||||
ProgramD3D12& program = m_program[_programIdx];
|
||||
ProgramD3D12& program = m_program[_program.idx];
|
||||
|
||||
_state &= 0
|
||||
| BGFX_STATE_WRITE_RGB
|
||||
|
@ -5661,7 +5661,7 @@ namespace bgfx { namespace d3d12
|
|||
// setDebugWireframe(wireframe);
|
||||
|
||||
uint16_t currentSamplerStateIdx = kInvalidHandle;
|
||||
uint16_t currentProgramIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
uint32_t currentBindHash = 0;
|
||||
bool hasPredefined = false;
|
||||
bool commandListChanged = false;
|
||||
|
@ -5784,7 +5784,7 @@ namespace bgfx { namespace d3d12
|
|||
view = key.m_view;
|
||||
currentPso = NULL;
|
||||
currentSamplerStateIdx = kInvalidHandle;
|
||||
currentProgramIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
hasPredefined = false;
|
||||
|
||||
fbh = _render->m_view[view].m_fbh;
|
||||
|
@ -5980,12 +5980,12 @@ namespace bgfx { namespace d3d12
|
|||
|
||||
bool constantsChanged = false;
|
||||
if (compute.m_uniformBegin < compute.m_uniformEnd
|
||||
|| currentProgramIdx != key.m_program)
|
||||
|| currentProgram.idx != key.m_program.idx)
|
||||
{
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
|
||||
|
||||
currentProgramIdx = key.m_program;
|
||||
ProgramD3D12& program = m_program[currentProgramIdx];
|
||||
currentProgram = key.m_program;
|
||||
ProgramD3D12& program = m_program[currentProgram.idx];
|
||||
|
||||
UniformBuffer* vcb = program.m_vsh->m_constantBuffer;
|
||||
if (NULL != vcb)
|
||||
|
@ -6000,7 +6000,7 @@ namespace bgfx { namespace d3d12
|
|||
if (constantsChanged
|
||||
|| hasPredefined)
|
||||
{
|
||||
ProgramD3D12& program = m_program[currentProgramIdx];
|
||||
ProgramD3D12& program = m_program[currentProgram.idx];
|
||||
viewState.setPredefined<4>(this, view, 0, program, _render, compute);
|
||||
commitShaderConstants(key.m_program, gpuAddress);
|
||||
m_commandList->SetComputeRootConstantBufferView(Rdt::CBV, gpuAddress);
|
||||
|
@ -6113,7 +6113,7 @@ namespace bgfx { namespace d3d12
|
|||
currentPso = NULL;
|
||||
currentBindHash = 0;
|
||||
currentSamplerStateIdx = kInvalidHandle;
|
||||
currentProgramIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
currentState.clear();
|
||||
currentState.m_scissor = !draw.m_scissor;
|
||||
changedFlags = BGFX_STATE_MASK;
|
||||
|
@ -6366,11 +6366,11 @@ namespace bgfx { namespace d3d12
|
|||
}
|
||||
|
||||
if (constantsChanged
|
||||
|| currentProgramIdx != key.m_program
|
||||
|| currentProgram.idx != key.m_program.idx
|
||||
|| BGFX_STATE_ALPHA_REF_MASK & changedFlags)
|
||||
{
|
||||
currentProgramIdx = key.m_program;
|
||||
ProgramD3D12& program = m_program[currentProgramIdx];
|
||||
currentProgram = key.m_program;
|
||||
ProgramD3D12& program = m_program[currentProgram.idx];
|
||||
|
||||
UniformBuffer* vcb = program.m_vsh->m_constantBuffer;
|
||||
if (NULL != vcb)
|
||||
|
@ -6394,7 +6394,7 @@ namespace bgfx { namespace d3d12
|
|||
if (constantsChanged
|
||||
|| hasPredefined)
|
||||
{
|
||||
ProgramD3D12& program = m_program[currentProgramIdx];
|
||||
ProgramD3D12& program = m_program[currentProgram.idx];
|
||||
uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT;
|
||||
viewState.m_alphaRef = ref/255.0f;
|
||||
viewState.setPredefined<4>(this, view, 0, program, _render, draw);
|
||||
|
|
|
@ -3748,7 +3748,7 @@ namespace bgfx { namespace d3d9
|
|||
ViewState viewState(_render, false);
|
||||
|
||||
DX_CHECK(device->SetRenderState(D3DRS_FILLMODE, _render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) );
|
||||
uint16_t programIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
SortKey key;
|
||||
uint16_t view = UINT16_MAX;
|
||||
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
|
||||
|
@ -3838,7 +3838,7 @@ namespace bgfx { namespace d3d9
|
|||
currentState.m_stencil = newStencil;
|
||||
|
||||
view = key.m_view;
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
|
||||
if (_render->m_view[view].m_fbh.idx != fbh.idx)
|
||||
{
|
||||
|
@ -4114,18 +4114,18 @@ namespace bgfx { namespace d3d9
|
|||
bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
|
||||
|
||||
if (key.m_program != programIdx)
|
||||
if (key.m_program.idx != currentProgram.idx)
|
||||
{
|
||||
programIdx = key.m_program;
|
||||
currentProgram = key.m_program;
|
||||
|
||||
if (kInvalidHandle == programIdx)
|
||||
if (!isValid(currentProgram) )
|
||||
{
|
||||
device->SetVertexShader(NULL);
|
||||
device->SetPixelShader(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgramD3D9& program = m_program[programIdx];
|
||||
ProgramD3D9& program = m_program[currentProgram.idx];
|
||||
device->SetVertexShader(program.m_vsh->m_vertexShader);
|
||||
device->SetPixelShader(NULL == program.m_fsh
|
||||
? NULL
|
||||
|
@ -4137,9 +4137,9 @@ namespace bgfx { namespace d3d9
|
|||
constantsChanged = true;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramD3D9& program = m_program[programIdx];
|
||||
ProgramD3D9& program = m_program[currentProgram.idx];
|
||||
|
||||
if (constantsChanged)
|
||||
{
|
||||
|
|
|
@ -6354,8 +6354,8 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
static ViewState viewState;
|
||||
viewState.reset(_render, hmdEnabled);
|
||||
|
||||
uint16_t programIdx = kInvalidHandle;
|
||||
uint16_t boundProgramIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
ProgramHandle boundProgram = BGFX_INVALID_HANDLE;
|
||||
SortKey key;
|
||||
uint16_t view = UINT16_MAX;
|
||||
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
|
||||
|
@ -6448,7 +6448,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
}
|
||||
|
||||
view = key.m_view;
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
|
||||
if (_render->m_view[view].m_fbh.idx != fbh.idx)
|
||||
{
|
||||
|
@ -6552,7 +6552,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
{
|
||||
const RenderCompute& compute = renderItem.compute;
|
||||
|
||||
ProgramGL& program = m_program[key.m_program];
|
||||
ProgramGL& program = m_program[key.m_program.idx];
|
||||
GL_CHECK(glUseProgram(program.m_id) );
|
||||
|
||||
GLbitfield barrier = 0;
|
||||
|
@ -7036,13 +7036,13 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
bool bindAttribs = false;
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
|
||||
|
||||
if (key.m_program != programIdx)
|
||||
if (key.m_program.idx != currentProgram.idx)
|
||||
{
|
||||
programIdx = key.m_program;
|
||||
GLuint id = kInvalidHandle == programIdx ? 0 : m_program[programIdx].m_id;
|
||||
currentProgram = key.m_program;
|
||||
GLuint id = isValid(currentProgram) ? m_program[currentProgram.idx].m_id : 0;
|
||||
|
||||
// Skip rendering if program index is valid, but program is invalid.
|
||||
programIdx = 0 == id ? kInvalidHandle : programIdx;
|
||||
currentProgram = 0 == id ? ProgramHandle{kInvalidHandle} : currentProgram;
|
||||
|
||||
GL_CHECK(glUseProgram(id) );
|
||||
programChanged =
|
||||
|
@ -7050,9 +7050,9 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
bindAttribs = true;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramGL& program = m_program[programIdx];
|
||||
ProgramGL& program = m_program[currentProgram.idx];
|
||||
|
||||
if (constantsChanged
|
||||
&& NULL != program.m_constantBuffer)
|
||||
|
@ -7183,13 +7183,13 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
|
||||
if (bindAttribs || diffStartVertex)
|
||||
{
|
||||
if(kInvalidHandle != boundProgramIdx)
|
||||
if (isValid(boundProgram) )
|
||||
{
|
||||
ProgramGL& boundProgram = m_program[boundProgramIdx];
|
||||
boundProgram.unbindAttributes();
|
||||
m_program[boundProgram.idx].unbindAttributes();
|
||||
boundProgram = BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
boundProgramIdx = programIdx;
|
||||
boundProgram = currentProgram;
|
||||
|
||||
program.bindAttributesBegin();
|
||||
|
||||
|
@ -7379,10 +7379,10 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
|||
}
|
||||
}
|
||||
|
||||
if(kInvalidHandle != boundProgramIdx)
|
||||
if (isValid(boundProgram) )
|
||||
{
|
||||
ProgramGL& boundProgram = m_program[boundProgramIdx];
|
||||
boundProgram.unbindAttributes();
|
||||
m_program[boundProgram.idx].unbindAttributes();
|
||||
boundProgram = BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
|
||||
|
|
|
@ -1058,7 +1058,7 @@ namespace bgfx { namespace mtl
|
|||
, 0
|
||||
, fbh
|
||||
, _blitter.m_vb->decl
|
||||
, _blitter.m_program.idx
|
||||
, _blitter.m_program
|
||||
, 0
|
||||
);
|
||||
rce.setRenderPipelineState(pso);
|
||||
|
@ -1425,7 +1425,7 @@ namespace bgfx { namespace mtl
|
|||
, 0
|
||||
, fbh
|
||||
, _clearQuad.m_vb->decl
|
||||
, _clearQuad.m_program[numMrt-1].idx
|
||||
, _clearQuad.m_program[numMrt-1]
|
||||
, 0
|
||||
);
|
||||
m_renderCommandEncoder.setRenderPipelineState(pso);
|
||||
|
@ -1666,7 +1666,7 @@ namespace bgfx { namespace mtl
|
|||
, FrameBufferHandle _fbh
|
||||
, uint8_t _numStreams
|
||||
, const VertexDecl** _vertexDecls
|
||||
, uint16_t _programIdx
|
||||
, ProgramHandle _program
|
||||
, uint8_t _numInstanceData
|
||||
)
|
||||
{
|
||||
|
@ -1681,7 +1681,7 @@ namespace bgfx { namespace mtl
|
|||
);
|
||||
|
||||
const bool independentBlendEnable = !!(BGFX_STATE_BLEND_INDEPENDENT & _state);
|
||||
ProgramMtl& program = m_program[_programIdx];
|
||||
ProgramMtl& program = m_program[_program.idx];
|
||||
|
||||
bx::HashMurmur2A murmur;
|
||||
murmur.begin();
|
||||
|
@ -2040,7 +2040,7 @@ namespace bgfx { namespace mtl
|
|||
, uint32_t _rgba
|
||||
, FrameBufferHandle _fbh
|
||||
, VertexDeclHandle _declHandle
|
||||
, uint16_t _programIdx
|
||||
, ProgramHandle _program
|
||||
, uint16_t _numInstanceData
|
||||
)
|
||||
{
|
||||
|
@ -2051,7 +2051,7 @@ namespace bgfx { namespace mtl
|
|||
, _fbh
|
||||
, 1
|
||||
, &decl
|
||||
, _programIdx
|
||||
, _program
|
||||
, _numInstanceData
|
||||
);
|
||||
}
|
||||
|
@ -3421,7 +3421,7 @@ namespace bgfx { namespace mtl
|
|||
|
||||
bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
|
||||
|
||||
uint16_t programIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
SortKey key;
|
||||
uint16_t view = UINT16_MAX;
|
||||
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
|
||||
|
@ -3484,7 +3484,7 @@ namespace bgfx { namespace mtl
|
|||
}
|
||||
|
||||
view = key.m_view;
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
|
||||
viewRestart = BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO);
|
||||
viewRestart &= hmdEnabled;
|
||||
|
@ -3687,10 +3687,7 @@ namespace bgfx { namespace mtl
|
|||
if (wasCompute)
|
||||
{
|
||||
wasCompute = false;
|
||||
|
||||
programIdx = kInvalidHandle;
|
||||
|
||||
//invalidateCompute();
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
const RenderDraw& draw = renderItem.draw;
|
||||
|
@ -3736,7 +3733,7 @@ namespace bgfx { namespace mtl
|
|||
|
||||
currentBind.clear();
|
||||
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT) );
|
||||
|
||||
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
|
||||
|
@ -3840,7 +3837,7 @@ namespace bgfx { namespace mtl
|
|||
|
||||
bool vertexStreamChanged = hasVertexStreamChanged(currentState, draw);
|
||||
|
||||
if (key.m_program != programIdx
|
||||
if (key.m_program.idx != currentProgram.idx
|
||||
|| vertexStreamChanged
|
||||
|| (0
|
||||
| BGFX_STATE_BLEND_MASK
|
||||
|
@ -3853,7 +3850,7 @@ namespace bgfx { namespace mtl
|
|||
) & changedFlags
|
||||
|| ( (blendFactor != draw.m_rgba) && !!(newFlags & BGFX_STATE_BLEND_INDEPENDENT) ) )
|
||||
{
|
||||
programIdx = key.m_program;
|
||||
currentProgram = key.m_program;
|
||||
|
||||
currentState.m_streamMask = draw.m_streamMask;
|
||||
currentState.m_instanceDataBuffer.idx = draw.m_instanceDataBuffer.idx;
|
||||
|
@ -3896,7 +3893,7 @@ namespace bgfx { namespace mtl
|
|||
|
||||
currentState.m_numVertices = numVertices;
|
||||
|
||||
if (kInvalidHandle == programIdx)
|
||||
if (!isValid(currentProgram) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -3912,14 +3909,14 @@ namespace bgfx { namespace mtl
|
|||
, fbh
|
||||
, numStreams
|
||||
, decls
|
||||
, programIdx
|
||||
, currentProgram
|
||||
, draw.m_instanceDataStride/16
|
||||
);
|
||||
}
|
||||
|
||||
if (NULL == pso)
|
||||
{
|
||||
programIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -3936,9 +3933,9 @@ namespace bgfx { namespace mtl
|
|||
constantsChanged = true;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramMtl& program = m_program[programIdx];
|
||||
ProgramMtl& program = m_program[currentProgram.idx];
|
||||
|
||||
uint32_t vertexUniformBufferSize = program.m_vshConstantBufferSize;
|
||||
uint32_t fragmentUniformBufferSize = program.m_fshConstantBufferSize;
|
||||
|
@ -3977,9 +3974,9 @@ namespace bgfx { namespace mtl
|
|||
m_uniformBufferVertexOffset = m_uniformBufferFragmentOffset;
|
||||
}
|
||||
|
||||
if (kInvalidHandle != programIdx)
|
||||
if (isValid(currentProgram) )
|
||||
{
|
||||
ProgramMtl& program = m_program[programIdx];
|
||||
ProgramMtl& program = m_program[currentProgram.idx];
|
||||
|
||||
for (uint32_t sampler = 0; sampler < program.m_samplerCount; ++sampler)
|
||||
{
|
||||
|
|
|
@ -2278,9 +2278,9 @@ VK_IMPORT_DEVICE
|
|||
setShaderUniform(_flags, _regIndex, _val, _numRegs);
|
||||
}
|
||||
|
||||
void commitShaderUniforms(VkCommandBuffer _commandBuffer, uint16_t _programIdx)
|
||||
void commitShaderUniforms(VkCommandBuffer _commandBuffer, ProgramHandle _program)
|
||||
{
|
||||
const ProgramVK& program = m_program[_programIdx];
|
||||
const ProgramVK& program = m_program[_program.idx];
|
||||
VkDescriptorBufferInfo descriptorBufferInfo;
|
||||
uint32_t total = 0
|
||||
+ program.m_vsh->m_size
|
||||
|
@ -2590,16 +2590,16 @@ VK_IMPORT_DEVICE
|
|||
return num;
|
||||
}
|
||||
|
||||
VkPipeline getPipeline(uint16_t _programIdx)
|
||||
VkPipeline getPipeline(ProgramHandle _program)
|
||||
{
|
||||
BX_UNUSED(_programIdx);
|
||||
BX_UNUSED(_program);
|
||||
// vkCreateComputePipelines
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
VkPipeline getPipeline(uint64_t _state, uint64_t _stencil, uint16_t _declIdx, uint16_t _programIdx, uint8_t _numInstanceData)
|
||||
VkPipeline getPipeline(uint64_t _state, uint64_t _stencil, uint16_t _declIdx, ProgramHandle _program, uint8_t _numInstanceData)
|
||||
{
|
||||
ProgramVK& program = m_program[_programIdx];
|
||||
ProgramVK& program = m_program[_program.idx];
|
||||
|
||||
_state &= 0
|
||||
| BGFX_STATE_WRITE_RGB
|
||||
|
@ -3687,7 +3687,7 @@ VK_DESTROY
|
|||
// setDebugWireframe(wireframe);
|
||||
|
||||
uint16_t currentSamplerStateIdx = kInvalidHandle;
|
||||
uint16_t currentProgramIdx = kInvalidHandle;
|
||||
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
|
||||
uint32_t currentBindHash = 0;
|
||||
bool hasPredefined = false;
|
||||
bool commandListChanged = false;
|
||||
|
@ -3811,7 +3811,7 @@ finishAll();
|
|||
currentPipeline = VK_NULL_HANDLE;
|
||||
currentSamplerStateIdx = kInvalidHandle;
|
||||
BX_UNUSED(currentSamplerStateIdx);
|
||||
currentProgramIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
hasPredefined = false;
|
||||
|
||||
fbh = _render->m_view[view].m_fbh;
|
||||
|
@ -3976,12 +3976,12 @@ BX_UNUSED(currentSamplerStateIdx);
|
|||
|
||||
bool constantsChanged = false;
|
||||
if (compute.m_uniformBegin < compute.m_uniformEnd
|
||||
|| currentProgramIdx != key.m_program)
|
||||
|| currentProgram.idx != key.m_program.idx)
|
||||
{
|
||||
rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
|
||||
|
||||
currentProgramIdx = key.m_program;
|
||||
ProgramVK& program = m_program[currentProgramIdx];
|
||||
currentProgram = key.m_program;
|
||||
ProgramVK& program = m_program[currentProgram.idx];
|
||||
|
||||
UniformBuffer* vcb = program.m_vsh->m_constantBuffer;
|
||||
if (NULL != vcb)
|
||||
|
@ -3996,7 +3996,7 @@ BX_UNUSED(currentSamplerStateIdx);
|
|||
if (constantsChanged
|
||||
|| hasPredefined)
|
||||
{
|
||||
ProgramVK& program = m_program[currentProgramIdx];
|
||||
ProgramVK& program = m_program[currentProgram.idx];
|
||||
viewState.setPredefined<4>(this, view, 0, program, _render, compute);
|
||||
// commitShaderConstants(key.m_program, gpuAddress);
|
||||
// m_commandList->SetComputeRootConstantBufferView(Rdt::CBV, gpuAddress);
|
||||
|
@ -4092,7 +4092,7 @@ BX_UNUSED(currentSamplerStateIdx);
|
|||
currentPipeline = VK_NULL_HANDLE;
|
||||
currentBindHash = 0;
|
||||
currentSamplerStateIdx = kInvalidHandle;
|
||||
currentProgramIdx = kInvalidHandle;
|
||||
currentProgram = BGFX_INVALID_HANDLE;
|
||||
currentState.clear();
|
||||
currentState.m_scissor = !draw.m_scissor;
|
||||
changedFlags = BGFX_STATE_MASK;
|
||||
|
@ -4272,11 +4272,11 @@ BX_UNUSED(currentSamplerStateIdx);
|
|||
|
||||
bool constantsChanged = false;
|
||||
if (draw.m_uniformBegin < draw.m_uniformEnd
|
||||
|| currentProgramIdx != key.m_program
|
||||
|| currentProgram.idx != key.m_program.idx
|
||||
|| BGFX_STATE_ALPHA_REF_MASK & changedFlags)
|
||||
{
|
||||
currentProgramIdx = key.m_program;
|
||||
ProgramVK& program = m_program[currentProgramIdx];
|
||||
currentProgram = key.m_program;
|
||||
ProgramVK& program = m_program[currentProgram.idx];
|
||||
|
||||
UniformBuffer* vcb = program.m_vsh->m_constantBuffer;
|
||||
if (NULL != vcb)
|
||||
|
@ -4297,7 +4297,7 @@ BX_UNUSED(currentSamplerStateIdx);
|
|||
if (constantsChanged
|
||||
|| hasPredefined)
|
||||
{
|
||||
ProgramVK& program = m_program[currentProgramIdx];
|
||||
ProgramVK& program = m_program[currentProgram.idx];
|
||||
uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT;
|
||||
viewState.m_alphaRef = ref/255.0f;
|
||||
viewState.setPredefined<4>(this, view, 0, program, _render, draw);
|
||||
|
|
Loading…
Reference in New Issue