|
|
@@ -1543,14 +1543,17 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
|
|
|
BX_ALIGN_DECL_CACHE_LINE(struct) RenderBind
|
|
|
{
|
|
|
- void clear()
|
|
|
+ void clear(uint64_t flags)
|
|
|
{
|
|
|
- for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++ii)
|
|
|
+ if (flags & BGFX_STATE_DISCARD_TEXTURE_SAMPLERS)
|
|
|
{
|
|
|
- Binding& bind = m_bind[ii];
|
|
|
- bind.m_idx = kInvalidHandle;
|
|
|
- bind.m_type = 0;
|
|
|
- bind.m_samplerFlags = 0;
|
|
|
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++ii)
|
|
|
+ {
|
|
|
+ Binding& bind = m_bind[ii];
|
|
|
+ bind.m_idx = kInvalidHandle;
|
|
|
+ bind.m_type = 0;
|
|
|
+ bind.m_samplerFlags = 0;
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -1559,32 +1562,42 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
|
|
|
BX_ALIGN_DECL_CACHE_LINE(struct) RenderDraw
|
|
|
{
|
|
|
- void clear()
|
|
|
+ void clear(uint64_t flags)
|
|
|
{
|
|
|
- m_uniformBegin = 0;
|
|
|
- m_uniformEnd = 0;
|
|
|
- m_stateFlags = BGFX_STATE_DEFAULT;
|
|
|
- m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
|
|
|
- m_rgba = 0;
|
|
|
- m_startMatrix = 0;
|
|
|
- m_startIndex = 0;
|
|
|
- m_numIndices = UINT32_MAX;
|
|
|
- m_numVertices = UINT32_MAX;
|
|
|
- m_instanceDataOffset = 0;
|
|
|
- m_instanceDataStride = 0;
|
|
|
- m_numInstances = 1;
|
|
|
- m_startIndirect = 0;
|
|
|
- m_numIndirect = UINT16_MAX;
|
|
|
- m_numMatrices = 1;
|
|
|
- m_submitFlags = 0;
|
|
|
- m_scissor = UINT16_MAX;
|
|
|
- m_streamMask = 0;
|
|
|
- m_stream[0].clear();
|
|
|
- m_indexBuffer.idx = kInvalidHandle;
|
|
|
- m_instanceDataBuffer.idx = kInvalidHandle;
|
|
|
- m_indirectBuffer.idx = kInvalidHandle;
|
|
|
- m_occlusionQuery.idx = kInvalidHandle;
|
|
|
- m_uniformIdx = UINT8_MAX;
|
|
|
+ if (flags & BGFX_STATE_DISCARD_STATE)
|
|
|
+ {
|
|
|
+ m_uniformBegin = 0;
|
|
|
+ m_uniformEnd = 0;
|
|
|
+ m_stateFlags = BGFX_STATE_DEFAULT;
|
|
|
+ m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
|
|
|
+ m_rgba = 0;
|
|
|
+ m_startMatrix = 0;
|
|
|
+ m_startIndex = 0;
|
|
|
+ m_numIndices = UINT32_MAX;
|
|
|
+ m_numVertices = UINT32_MAX;
|
|
|
+ m_instanceDataOffset = 0;
|
|
|
+ m_instanceDataStride = 0;
|
|
|
+ m_numInstances = 1;
|
|
|
+ m_startIndirect = 0;
|
|
|
+ m_numIndirect = UINT16_MAX;
|
|
|
+ m_numMatrices = 1;
|
|
|
+ m_submitFlags = 0;
|
|
|
+ m_scissor = UINT16_MAX;
|
|
|
+
|
|
|
+ m_instanceDataBuffer.idx = kInvalidHandle;
|
|
|
+ m_indirectBuffer.idx = kInvalidHandle;
|
|
|
+ m_occlusionQuery.idx = kInvalidHandle;
|
|
|
+ m_uniformIdx = UINT8_MAX;
|
|
|
+ }
|
|
|
+ if (flags & BGFX_STATE_DISCARD_VERTEX_STREAMS)
|
|
|
+ {
|
|
|
+ m_streamMask = 0;
|
|
|
+ m_stream[0].clear();
|
|
|
+ }
|
|
|
+ if (flags & BGFX_STATE_DISCARD_INDEX_BUFFER)
|
|
|
+ {
|
|
|
+ m_indexBuffer.idx = kInvalidHandle;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool setStreamBit(uint8_t _stream, VertexBufferHandle _handle)
|
|
|
@@ -1625,21 +1638,24 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
|
|
|
BX_ALIGN_DECL_CACHE_LINE(struct) RenderCompute
|
|
|
{
|
|
|
- void clear()
|
|
|
+ void clear(uint64_t flags)
|
|
|
{
|
|
|
- m_uniformBegin = 0;
|
|
|
- m_uniformEnd = 0;
|
|
|
- m_startMatrix = 0;
|
|
|
- m_numX = 0;
|
|
|
- m_numY = 0;
|
|
|
- m_numZ = 0;
|
|
|
- m_numMatrices = 0;
|
|
|
- m_submitFlags = 0;
|
|
|
- m_uniformIdx = UINT8_MAX;
|
|
|
+ if (flags & BGFX_STATE_DISCARD_COMPUTE)
|
|
|
+ {
|
|
|
+ m_uniformBegin = 0;
|
|
|
+ m_uniformEnd = 0;
|
|
|
+ m_startMatrix = 0;
|
|
|
+ m_numX = 0;
|
|
|
+ m_numY = 0;
|
|
|
+ m_numZ = 0;
|
|
|
+ m_numMatrices = 0;
|
|
|
+ m_submitFlags = 0;
|
|
|
+ m_uniformIdx = UINT8_MAX;
|
|
|
|
|
|
- m_indirectBuffer.idx = kInvalidHandle;
|
|
|
- m_startIndirect = 0;
|
|
|
- m_numIndirect = UINT16_MAX;
|
|
|
+ m_indirectBuffer.idx = kInvalidHandle;
|
|
|
+ m_startIndirect = 0;
|
|
|
+ m_numIndirect = UINT16_MAX;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
uint32_t m_uniformBegin;
|
|
|
@@ -2183,7 +2199,7 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
{
|
|
|
EncoderImpl()
|
|
|
{
|
|
|
- discard();
|
|
|
+ discard(BGFX_STATE_DISCARD_ALL);
|
|
|
}
|
|
|
|
|
|
void begin(Frame* _frame, uint8_t _idx)
|
|
|
@@ -2478,7 +2494,7 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
bind.m_mip = _mip;
|
|
|
}
|
|
|
|
|
|
- void discard()
|
|
|
+ void discard(uint64_t flags)
|
|
|
{
|
|
|
if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
|
|
|
{
|
|
|
@@ -2486,9 +2502,9 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
|
|
|
}
|
|
|
|
|
|
m_discard = false;
|
|
|
- m_draw.clear();
|
|
|
- m_compute.clear();
|
|
|
- m_bind.clear();
|
|
|
+ m_draw.clear(flags);
|
|
|
+ m_compute.clear(flags);
|
|
|
+ m_bind.clear(flags);
|
|
|
}
|
|
|
|
|
|
void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, bool _preserveState);
|