@@ -104,51 +104,17 @@ class COpenGLRenderpassIndependentPipeline final : public IGPURenderpassIndepend
104
104
core::smart_refctd_ptr<const COpenGLPipelineLayout> layout;
105
105
std::atomic_uint32_t stageUpdateStamps[IGPURenderpassIndependentPipeline::SHADER_STAGE_COUNT] = { 0u };
106
106
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
114
108
{
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];
139
112
}
140
113
inline void incrementStamps (uint32_t _stages)
141
114
{
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];
152
118
}
153
119
};
154
120
inline void setUniformsImitatingPushConstants (uint32_t _ctxID, const PushConstantsState& _pcState) const
0 commit comments