From 986dece4ec20dec669e9e84550a95392d7a0f94e Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 14 Sep 2018 20:24:22 -0700 Subject: [PATCH] Add name of the batch during tracing and introduce detailed tracing if needed and one error message in the case the materialMap is detected in an fst file but not understood --- libraries/fbx/src/FBXReader_Material.cpp | 6 +- .../gpu-gl-common/src/gpu/gl/GLBackend.cpp | 95 +++++++++++++++++++ libraries/gpu/src/gpu/Batch.h | 1 + 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/libraries/fbx/src/FBXReader_Material.cpp b/libraries/fbx/src/FBXReader_Material.cpp index 4aa3044934..d5902962e5 100644 --- a/libraries/fbx/src/FBXReader_Material.cpp +++ b/libraries/fbx/src/FBXReader_Material.cpp @@ -128,7 +128,11 @@ void FBXReader::consolidateFBXMaterials(const QVariantHash& mapping) { QString materialMapString = mapping.value("materialMap").toString(); QJsonDocument materialMapDocument = QJsonDocument::fromJson(materialMapString.toUtf8()); QJsonObject materialMap = materialMapDocument.object(); - + if (!materialMapString.isEmpty()) { + if (materialMapDocument.isEmpty() || materialMap.isEmpty()) { + qCDebug(modelformat) << "fbx Material Map found but did not produce valid JSON:" << materialMapString; + } + } for (QHash::iterator it = _fbxMaterials.begin(); it != _fbxMaterials.end(); it++) { FBXMaterial& material = (*it); diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp index 4fea4f2dc5..68fe38fc72 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp @@ -20,6 +20,9 @@ #include "nvToolsExt.h" #endif +// Define the GPU_BATCH_DETAILED_TRACING to get detailed tracing of the commands during the batch executions +// #define GPU_BATCH_DETAILED_TRACING + #include #include "GLTexture.h" @@ -271,6 +274,8 @@ void GLBackend::renderPassDraw(const Batch& batch) { case Batch::COMMAND_drawIndexedInstanced: case Batch::COMMAND_multiDrawIndirect: case Batch::COMMAND_multiDrawIndexedIndirect: { + PROFILE_RANGE(render_gpu_gl_detail, "drawcall"); + // updates for draw calls ++_currentDraw; updateInput(); @@ -281,6 +286,94 @@ void GLBackend::renderPassDraw(const Batch& batch) { (this->*(call))(batch, *offset); break; } +#ifdef GPU_BATCH_DETAILED_TRACING + //case Batch::COMMAND_setModelTransform: + //case Batch::COMMAND_setViewTransform: + //case Batch::COMMAND_setProjectionTransform: + case Batch::COMMAND_setProjectionJitter: + case Batch::COMMAND_setViewportTransform: + case Batch::COMMAND_setDepthRangeTransform: + { + PROFILE_RANGE(render_gpu_gl_detail, "transform"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_clearFramebuffer: + { + PROFILE_RANGE(render_gpu_gl_detail, "clear"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_blit: + { + PROFILE_RANGE(render_gpu_gl_detail, "blit"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_setInputFormat: + case Batch::COMMAND_setInputBuffer: + case Batch::COMMAND_setIndexBuffer: + case Batch::COMMAND_setIndirectBuffer: { + PROFILE_RANGE(render_gpu_gl_detail, "input"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_setStateBlendFactor: + case Batch::COMMAND_setStateScissorRect: + case Batch::COMMAND_setPipeline: { + PROFILE_RANGE(render_gpu_gl_detail, "pipeline"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_setUniformBuffer: + { + PROFILE_RANGE(render_gpu_gl_detail, "ubo"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_setResourceBuffer: + case Batch::COMMAND_setResourceTexture: + case Batch::COMMAND_setResourceTextureTable: + { + PROFILE_RANGE(render_gpu_gl_detail, "resource"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + + case Batch::COMMAND_setResourceFramebufferSwapChainTexture: + case Batch::COMMAND_setFramebuffer: + case Batch::COMMAND_setFramebufferSwapChain: + { + PROFILE_RANGE(render_gpu_gl_detail, "framebuffer"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_generateTextureMips: + { + PROFILE_RANGE(render_gpu_gl_detail, "genMipMaps"); + + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } + case Batch::COMMAND_beginQuery: + case Batch::COMMAND_endQuery: + case Batch::COMMAND_getQuery: + { + PROFILE_RANGE(render_gpu_gl_detail, "query"); + CommandCall call = _commandCalls[(*command)]; + (this->*(call))(batch, *offset); + break; + } +#endif default: { CommandCall call = _commandCalls[(*command)]; (this->*(call))(batch, *offset); @@ -294,6 +387,8 @@ void GLBackend::renderPassDraw(const Batch& batch) { } void GLBackend::render(const Batch& batch) { + PROFILE_RANGE(render_gpu_gl, batch.getName()); + _transform._skybox = _stereo._skybox = batch.isSkyboxEnabled(); // Allow the batch to override the rendering stereo settings // for things like full framebuffer copy operations (deferred lighting passes) diff --git a/libraries/gpu/src/gpu/Batch.h b/libraries/gpu/src/gpu/Batch.h index 8e607a189e..c68a04fa62 100644 --- a/libraries/gpu/src/gpu/Batch.h +++ b/libraries/gpu/src/gpu/Batch.h @@ -95,6 +95,7 @@ public: ~Batch(); void setName(const char* name); + const char* getName() const { return _name; } void clear(); // Batches may need to override the context level stereo settings