Skip to content

Commit a363f73

Browse files
committed
Took care of mess with update stamps
1 parent cc9e1b3 commit a363f73

File tree

1 file changed

+7
-41
lines changed

1 file changed

+7
-41
lines changed

src/nbl/video/COpenGLRenderpassIndependentPipeline.h

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -104,51 +104,17 @@ class COpenGLRenderpassIndependentPipeline final : public IGPURenderpassIndepend
104104
core::smart_refctd_ptr<const COpenGLPipelineLayout> layout;
105105
std::atomic_uint32_t stageUpdateStamps[IGPURenderpassIndependentPipeline::SHADER_STAGE_COUNT] = { 0u };
106106

107-
inline std::atomic_uint32_t& getStamp(IGPUSpecializedShader::E_SHADER_STAGE _stage)
108-
{
109-
return const_cast<std::atomic_uint32_t&>(
110-
const_cast<const PushConstantsState*>(this)->getStamp(_stage)
111-
);
112-
}
113-
inline const std::atomic_uint32_t& getStamp(IGPUSpecializedShader::E_SHADER_STAGE _stage) const
107+
inline uint32_t getStamp(IGPUSpecializedShader::E_SHADER_STAGE _stage) const
114108
{
115-
// this creates warnings
116-
//return const_cast<typename std::decay<decltype(*this)>::type*>(this)->getStamp(_stage);
117-
switch (_stage)
118-
{
119-
case IGPUSpecializedShader::ESS_VERTEX:
120-
return *(stageUpdateStamps+0u);
121-
break;
122-
case IGPUSpecializedShader::ESS_TESSELATION_CONTROL:
123-
return *(stageUpdateStamps+1u);
124-
break;
125-
case IGPUSpecializedShader::ESS_TESSELATION_EVALUATION:
126-
return *(stageUpdateStamps+2u);
127-
break;
128-
case IGPUSpecializedShader::ESS_GEOMETRY:
129-
return *(stageUpdateStamps+3u);
130-
break;
131-
case IGPUSpecializedShader::ESS_FRAGMENT:
132-
return *(stageUpdateStamps+4u);
133-
break;
134-
default:
135-
break;
136-
}
137-
assert(false);
138-
return *(stageUpdateStamps+IGPURenderpassIndependentPipeline::SHADER_STAGE_COUNT);
109+
const uint32_t ix = core::findLSB<std::underlying_type_t<IGPUSpecializedShader::E_SHADER_STAGE>>(_stage);
110+
assert(ix < IGPURenderpassIndependentPipeline::SHADER_STAGE_COUNT);
111+
return stageUpdateStamps[ix];
139112
}
140113
inline void incrementStamps(uint32_t _stages)
141114
{
142-
if (_stages & IGPUSpecializedShader::ESS_VERTEX)
143-
getStamp(IGPUSpecializedShader::ESS_VERTEX)++;
144-
if (_stages & IGPUSpecializedShader::ESS_TESSELATION_CONTROL)
145-
getStamp(IGPUSpecializedShader::ESS_TESSELATION_CONTROL)++;
146-
if (_stages & IGPUSpecializedShader::ESS_TESSELATION_EVALUATION)
147-
getStamp(IGPUSpecializedShader::ESS_TESSELATION_EVALUATION)++;
148-
if (_stages & IGPUSpecializedShader::ESS_GEOMETRY)
149-
getStamp(IGPUSpecializedShader::ESS_GEOMETRY)++;
150-
if (_stages & IGPUSpecializedShader::ESS_FRAGMENT)
151-
getStamp(IGPUSpecializedShader::ESS_FRAGMENT)++;
115+
for (uint32_t i = 0u; i < IGPURenderpassIndependentPipeline::SHADER_STAGE_COUNT; ++i)
116+
if ((_stages >> i) & 1u)
117+
++stageUpdateStamps[i];
152118
}
153119
};
154120
inline void setUniformsImitatingPushConstants(uint32_t _ctxID, const PushConstantsState& _pcState) const

0 commit comments

Comments
 (0)