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