diff options
| author | Geenz <geenz@lindenlab.com> | 2022-10-05 09:48:18 -0700 | 
|---|---|---|
| committer | Geenz <geenz@lindenlab.com> | 2022-10-05 09:48:18 -0700 | 
| commit | be1cdc1aaa67eca71fee8cbbc16b4c85bcbdb258 (patch) | |
| tree | 42bf8c3d8ff049c55b7609a934ef35fc3aac8616 | |
| parent | 1a437cbedf94de90d749f426dde09f2466693de2 (diff) | |
Initial pass at adding KHR_debug support
This still needs some work - I'm not super satisfied with the overall structure of the code.  Will continue to iterate as I add in proper RenderDoc support.
| -rw-r--r-- | indra/llcommon/llprofiler.h | 4 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 11 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.h | 9 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 7 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.h | 9 | ||||
| -rw-r--r-- | indra/newview/lldrawpool.h | 136 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 2 | 
7 files changed, 177 insertions, 1 deletions
| diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h index c0f5868db3..ac20209062 100644 --- a/indra/llcommon/llprofiler.h +++ b/indra/llcommon/llprofiler.h @@ -153,12 +153,16 @@ extern thread_local bool gProfilerEnabled;  // disable memory tracking (incompatible with GPU tracing  #define LL_PROFILE_ALLOC(ptr, size)             (void)(ptr); (void)(size);  #define LL_PROFILE_FREE(ptr)                    (void)(ptr); + +#define LL_LABEL_OBJECT_GL(type, name, length, label) glObjectLabel(type, name, length, label)  #else  #define LL_PROFILE_GPU_ZONE(name)        (void)name;  #define LL_PROFILE_GPU_ZONEC(name,color) (void)name;(void)color;  #define LL_PROFILER_GPU_COLLECT  #define LL_PROFILER_GPU_CONTEXT +#define LL_LABEL_OBJECT_GL(type, name, length, label) +  #if LL_PROFILER_CONFIG > 1  #define LL_PROFILE_ALLOC(ptr, size)             TracyAlloc(ptr, size)  #define LL_PROFILE_FREE(ptr)                    TracyFree(ptr) diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 55713eea80..f424a01541 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -504,6 +504,10 @@ BOOL LLGLSLShader::createShader(std::vector<LLStaticHashedString> * attributes,          unbind();      } +#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +    setLabel(mName); +#endif +      return success;  } @@ -1786,3 +1790,10 @@ void LLShaderUniforms::apply(LLGLSLShader* shader)          shader->uniform3fv(uniform.mUniform, 1, uniform.mValue.mV);      }  } + +#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +void LLGLSLShader::setLabel(std::string label) { +    LL_LABEL_OBJECT_GL(GL_PROGRAM, mProgramObject, label.length(), label.c_str()); +} + +#endif diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index c26ee014cb..01eca7ebfe 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -294,6 +294,10 @@ public:      // this pointer should be set to whichever shader represents this shader's rigged variant      LLGLSLShader* mRiggedVariant = nullptr; +	#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +    void setLabel(std::string label); +	#endif +  private:  	void unloadInternal();  }; @@ -305,5 +309,10 @@ extern LLGLSLShader			gSolidColorProgram;  //Alpha mask shader (declared here so llappearance can access properly)  extern LLGLSLShader			gAlphaMaskProgram; +#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +#define LL_SET_SHADER_LABEL(shader) shader.setLabel(#shader) +#else +#define LL_SET_SHADER_LABEL(shader, label) +#endif  #endif diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 981175d845..4ce04c17f6 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -175,7 +175,7 @@ U8* LLVBOPool::allocate(U32& name, U32 size, bool for_seed)  	{  		//make a new buffer  		name = genBuffer(); -		 +  		glBindBuffer(mType, name);  		if (!for_seed && i < LL_VBO_POOL_SEED_COUNT) @@ -574,6 +574,10 @@ void LLVertexBuffer::validateRange(U32 start, U32 end, U32 count, U32 indices_of  	}  } +void LLVertexBuffer::setLabel(std::string label) { +	LL_LABEL_OBJECT_GL(GL_BUFFER, mGLBuffer, label.length(), label.c_str()); +} +  void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indices_offset) const  {  	validateRange(start, end, count, indices_offset); @@ -1068,6 +1072,7 @@ bool LLVertexBuffer::createGLBuffer(U32 size)  	{  		static int gl_buffer_idx = 0;  		mGLBuffer = ++gl_buffer_idx; +  		mMappedData = (U8*)ll_aligned_malloc_16(size);  		mSize = size;  	} diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index a7907f9cae..a7e5fddf8c 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -300,6 +300,9 @@ public:  	//for debugging, validate data in given range is valid  	void validateRange(U32 start, U32 end, U32 count, U32 offset) const; +	#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +	void setLabel(std::string label); +	#endif  protected:	 @@ -370,5 +373,11 @@ public:  	static U32 sSetCount;  }; +#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +#define LL_LABEL_VERTEX_BUFFER(buf, name) buf->setLabel(name) +#else +#define LL_LABEL_VERTEX_BUFFER(buf, name) +#endif +  #endif // LL_LLVERTEXBUFFER_H diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index f7fc2d2061..e664208154 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -198,6 +198,142 @@ public:  		NUM_RENDER_TYPES,  	}; +	#ifdef LL_PROFILER_ENABLE_TRACY_OPENGL +    static std::string lookupPassName(U32 pass) +    { +        switch (pass) +        { +            case PASS_SIMPLE: +                return "PASS_SIMPLE"; +            case PASS_SIMPLE_RIGGED: +                return "PASS_SIMPLE_RIGGED"; +            case PASS_GRASS: +                return "PASS_GRASS"; +            case PASS_FULLBRIGHT: +                return "PASS_FULLBRIGHT"; +            case PASS_FULLBRIGHT_RIGGED: +                return "PASS_FULLBRIGHT_RIGGED"; +            case PASS_INVISIBLE: +                return "PASS_INVISIBLE"; +            case PASS_INVISIBLE_RIGGED: +                return "PASS_INVISIBLE_RIGGED"; +            case PASS_INVISI_SHINY: +                return "PASS_INVISI_SHINY"; +            case PASS_INVISI_SHINY_RIGGED: +                return "PASS_INVISI_SHINY_RIGGED"; +            case PASS_FULLBRIGHT_SHINY: +                return "PASS_FULLBRIGHT_SHINY"; +            case PASS_FULLBRIGHT_SHINY_RIGGED: +                return "PASS_FULLBRIGHT_SHINY_RIGGED"; +            case PASS_SHINY: +                return "PASS_SHINY"; +            case PASS_SHINY_RIGGED: +                return "PASS_SHINY_RIGGED"; +            case PASS_BUMP: +                return "PASS_BUMP"; +            case PASS_BUMP_RIGGED: +                return "PASS_BUMP_RIGGED"; +            case PASS_POST_BUMP: +                return "PASS_POST_BUMP"; +            case PASS_POST_BUMP_RIGGED: +                return "PASS_POST_BUMP_RIGGED"; +            case PASS_MATERIAL: +                return "PASS_MATERIAL"; +            case PASS_MATERIAL_RIGGED: +                return "PASS_MATERIAL_RIGGED"; +            case PASS_MATERIAL_ALPHA: +                return "PASS_MATERIAL_ALPHA"; +            case PASS_MATERIAL_ALPHA_RIGGED: +                return "PASS_MATERIAL_ALPHA_RIGGED"; +            case PASS_MATERIAL_ALPHA_MASK: +                return "PASS_MATERIAL_ALPHA_MASK"; +            case PASS_MATERIAL_ALPHA_MASK_RIGGED: +                return "PASS_MATERIAL_ALPHA_MASK_RIGGED"; +            case PASS_MATERIAL_ALPHA_EMISSIVE: +                return "PASS_MATERIAL_ALPHA_EMISSIVE"; +            case PASS_MATERIAL_ALPHA_EMISSIVE_RIGGED: +                return "PASS_MATERIAL_ALPHA_EMISSIVE_RIGGED"; +            case PASS_SPECMAP: +                return "PASS_SPECMAP"; +            case PASS_SPECMAP_RIGGED: +                return "PASS_SPECMAP_RIGGED"; +            case PASS_SPECMAP_BLEND: +                return "PASS_SPECMAP_BLEND"; +            case PASS_SPECMAP_BLEND_RIGGED: +                return "PASS_SPECMAP_BLEND_RIGGED"; +            case PASS_SPECMAP_MASK: +                return "PASS_SPECMAP_MASK"; +            case PASS_SPECMAP_MASK_RIGGED: +                return "PASS_SPECMAP_MASK_RIGGED"; +            case PASS_SPECMAP_EMISSIVE: +                return "PASS_SPECMAP_EMISSIVE"; +            case PASS_SPECMAP_EMISSIVE_RIGGED: +                return "PASS_SPECMAP_EMISSIVE_RIGGED"; +            case PASS_NORMMAP: +                return "PASS_NORMAMAP"; +            case PASS_NORMMAP_RIGGED: +                return "PASS_NORMMAP_RIGGED"; +            case PASS_NORMMAP_BLEND: +                return "PASS_NORMMAP_BLEND"; +            case PASS_NORMMAP_BLEND_RIGGED: +                return "PASS_NORMMAP_BLEND_RIGGED"; +            case PASS_NORMMAP_MASK: +                return "PASS_NORMMAP_MASK"; +            case PASS_NORMMAP_MASK_RIGGED: +                return "PASS_NORMMAP_MASK_RIGGED"; +            case PASS_NORMMAP_EMISSIVE: +                return "PASS_NORMMAP_EMISSIVE"; +            case PASS_NORMMAP_EMISSIVE_RIGGED: +                return "PASS_NORMMAP_EMISSIVE_RIGGED"; +            case PASS_NORMSPEC: +                return "PASS_NORMSPEC"; +            case PASS_NORMSPEC_RIGGED: +                return "PASS_NORMSPEC_RIGGED"; +            case PASS_NORMSPEC_BLEND: +                return "PASS_NORMSPEC_BLEND"; +            case PASS_NORMSPEC_BLEND_RIGGED: +                return "PASS_NORMSPEC_BLEND_RIGGED"; +            case PASS_NORMSPEC_MASK: +                return "PASS_NORMSPEC_MASK"; +            case PASS_NORMSPEC_MASK_RIGGED: +                return "PASS_NORMSPEC_MASK_RIGGED"; +            case PASS_NORMSPEC_EMISSIVE: +                return "PASS_NORMSPEC_EMISSIVE"; +            case PASS_NORMSPEC_EMISSIVE_RIGGED: +                return "PASS_NORMSPEC_EMISSIVE_RIGGED"; +            case PASS_GLOW: +                return "PASS_GLOW"; +            case PASS_GLOW_RIGGED: +                return "PASS_GLOW_RIGGED"; +            case PASS_ALPHA: +                return "PASS_ALPHA"; +            case PASS_ALPHA_RIGGED: +                return "PASS_ALPHA_RIGGED"; +            case PASS_ALPHA_MASK: +                return "PASS_ALPHA_MASK"; +            case PASS_ALPHA_MASK_RIGGED: +                return "PASS_ALPHA_MASK_RIGGED"; +            case PASS_FULLBRIGHT_ALPHA_MASK: +                return "PASS_FULLBRIGHT_ALPHA_MASK"; +            case PASS_FULLBRIGHT_ALPHA_MASK_RIGGED: +                return "PASS_FULLBRIGHT_ALPHA_MASK_RIGGED"; +            case PASS_ALPHA_INVISIBLE: +                return "PASS_ALPHA_INVISIBLE"; +            case PASS_ALPHA_INVISIBLE_RIGGED: +                return "PASS_ALPHA_INVISIBLE_RIGGED"; +            case PASS_PBR_OPAQUE: +                return "PASS_PBR_OPAQUE"; +            case PASS_PBR_OPAQUE_RIGGED: +                return "PASS_PBR_OPAQUE_RIGGED"; + +            default: +                return "Unknown pass"; +        } +	} +	#else +    static std::string lookupPass(U32 pass) { return ""; } +	#endif +  	LLRenderPass(const U32 type);  	virtual ~LLRenderPass();  	/*virtual*/ LLViewerTexture* getDebugTexture() { return NULL; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d18997b780..d312bb75d1 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5319,6 +5319,8 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  		return;  	} +	LL_LABEL_VERTEX_BUFFER(facep->getVertexBuffer(), LLRenderPass::lookupPassName(type)); +      U32 passType = type;      bool rigged = facep->isState(LLFace::RIGGED); | 
