Add private start/stopNamedCall batch commands

This commit is contained in:
Atlante45 2016-01-13 18:31:45 -08:00
parent 753fc44c12
commit 4d6931c5a8
4 changed files with 41 additions and 3 deletions

View file

@ -344,6 +344,15 @@ void Batch::runLambda(std::function<void()> f) {
_params.push_back(_lambdas.cache(f)); _params.push_back(_lambdas.cache(f));
} }
void Batch::startNamedCall(const std::string& name) {
ADD_COMMAND(startNamedCall);
_params.push_back(_names.cache(name));
}
void Batch::stopNamedCall() {
ADD_COMMAND(stopNamedCall);
}
void Batch::enableStereo(bool enable) { void Batch::enableStereo(bool enable) {
_enableStereo = enable; _enableStereo = enable;
} }
@ -383,8 +392,14 @@ BufferPointer Batch::getNamedBuffer(const std::string& instanceName, uint8_t ind
void Batch::preExecute() { void Batch::preExecute() {
for (auto& mapItem : _namedData) { for (auto& mapItem : _namedData) {
mapItem.second.process(*this); auto& name = mapItem.first;
auto& instance = mapItem.second;
startNamedCall(name);
instance.process(*this);
stopNamedCall();
} }
_namedData.clear(); _namedData.clear();
} }

View file

@ -304,6 +304,9 @@ public:
COMMAND_runLambda, COMMAND_runLambda,
COMMAND_startNamedCall,
COMMAND_stopNamedCall,
// TODO: As long as we have gl calls explicitely issued from interface // TODO: As long as we have gl calls explicitely issued from interface
// code, we need to be able to record and batch these calls. THe long // code, we need to be able to record and batch these calls. THe long
// term strategy is to get rid of any GL calls in favor of the HIFI GPU API // term strategy is to get rid of any GL calls in favor of the HIFI GPU API
@ -395,7 +398,7 @@ public:
typedef Cache<PipelinePointer>::Vector PipelineCaches; typedef Cache<PipelinePointer>::Vector PipelineCaches;
typedef Cache<FramebufferPointer>::Vector FramebufferCaches; typedef Cache<FramebufferPointer>::Vector FramebufferCaches;
typedef Cache<QueryPointer>::Vector QueryCaches; typedef Cache<QueryPointer>::Vector QueryCaches;
typedef Cache<std::string>::Vector ProfileRangeCaches; typedef Cache<std::string>::Vector StringCaches;
typedef Cache<std::function<void()>>::Vector LambdaCache; typedef Cache<std::function<void()>>::Vector LambdaCache;
// Cache Data in a byte array if too big to fit in Param // Cache Data in a byte array if too big to fit in Param
@ -423,7 +426,8 @@ public:
FramebufferCaches _framebuffers; FramebufferCaches _framebuffers;
QueryCaches _queries; QueryCaches _queries;
LambdaCache _lambdas; LambdaCache _lambdas;
ProfileRangeCaches _profileRanges; StringCaches _profileRanges;
StringCaches _names;
NamedBatchDataMap _namedData; NamedBatchDataMap _namedData;
@ -431,6 +435,9 @@ public:
bool _enableSkybox{ false }; bool _enableSkybox{ false };
protected: protected:
void startNamedCall(const std::string& name);
void stopNamedCall();
// Maybe useful but shoudln't be public. Please convince me otherwise // Maybe useful but shoudln't be public. Please convince me otherwise
void runLambda(std::function<void()> f); void runLambda(std::function<void()> f);
}; };

View file

@ -62,6 +62,9 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] =
(&::gpu::GLBackend::do_runLambda), (&::gpu::GLBackend::do_runLambda),
(&::gpu::GLBackend::do_startNamedCall),
(&::gpu::GLBackend::do_stopNamedCall),
(&::gpu::GLBackend::do_glActiveBindTexture), (&::gpu::GLBackend::do_glActiveBindTexture),
(&::gpu::GLBackend::do_glUniform1i), (&::gpu::GLBackend::do_glUniform1i),
@ -423,6 +426,14 @@ void GLBackend::do_runLambda(Batch& batch, size_t paramOffset) {
f(); f();
} }
void GLBackend::do_startNamedCall(Batch& batch, size_t paramOffset) {
_currentNamedCall = batch._names.get(batch._params[paramOffset]._uint);
}
void GLBackend::do_stopNamedCall(Batch& batch, size_t paramOffset) {
_currentNamedCall.clear();
}
void GLBackend::resetStages() { void GLBackend::resetStages() {
resetInputStage(); resetInputStage();
resetPipelineStage(); resetPipelineStage();

View file

@ -245,6 +245,8 @@ protected:
void renderPassTransfer(Batch& batch); void renderPassTransfer(Batch& batch);
void renderPassDraw(Batch& batch); void renderPassDraw(Batch& batch);
std::string _currentNamedCall;
Stats _stats; Stats _stats;
// Draw Stage // Draw Stage
@ -465,6 +467,9 @@ protected:
void do_runLambda(Batch& batch, size_t paramOffset); void do_runLambda(Batch& batch, size_t paramOffset);
void do_startNamedCall(Batch& batch, size_t paramOffset);
void do_stopNamedCall(Batch& batch, size_t paramOffset);
void resetStages(); void resetStages();
// TODO: As long as we have gl calls explicitely issued from interface // TODO: As long as we have gl calls explicitely issued from interface