diff options
| author | Michael Pohoreski <ptolemy@lindenlab.com> | 2021-09-22 00:47:17 +0000 | 
|---|---|---|
| committer | Michael Pohoreski <ptolemy@lindenlab.com> | 2021-09-22 00:47:17 +0000 | 
| commit | b1c32db37f74de715b4d6f9e98653f482e05df51 (patch) | |
| tree | a058633fae18cfff9bb3e0688ccbdea8fb558a1d /indra | |
| parent | 7fe2856516d9e0de0fda6ff389ad3cc977b2d309 (diff) | |
| parent | d03ade68d36525a8b7abc0a783636cebda006ef4 (diff) | |
Merged in SL-16027_Tracy_OpenGL (pull request #697)
SL-16027: Add Tracy OpenGL support
Approved-by: Euclid Linden
Approved-by: Dave Parks
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/linden_common.h | 4 | ||||
| -rw-r--r-- | indra/llcommon/llprofiler.h | 3 | ||||
| -rw-r--r-- | indra/llrender/llglheaders.h | 19 | ||||
| -rw-r--r-- | indra/llrender/llrendertarget.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 5 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llappviewerwin32.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llface.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 1 | 
10 files changed, 49 insertions, 5 deletions
| diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h index b2c5be6b76..a228fd22be 100644 --- a/indra/llcommon/linden_common.h +++ b/indra/llcommon/linden_common.h @@ -28,7 +28,7 @@  #define LL_LINDEN_COMMON_H  #include "llprofiler.h" -#if (TRACY_ENABLE)  // hooks for memory profiling +#if TRACY_ENABLE && !defined(LL_PROFILER_ENABLE_TRACY_OPENGL)  // hooks for memory profiling  void *tracy_aligned_malloc(size_t size, size_t alignment);  void  tracy_aligned_free(void *memblock);  #define _aligned_malloc(X, Y) tracy_aligned_malloc((X), (Y)) @@ -68,6 +68,4 @@ void  tracy_aligned_free(void *memblock);  #include "llerror.h"  #include "llfile.h" -#include "llprofiler.h" // must be before fast timer; needed due to LLThreads potentially needing access to tracy -  #endif diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h index 62e649913b..62ec20fa44 100644 --- a/indra/llcommon/llprofiler.h +++ b/indra/llcommon/llprofiler.h @@ -45,6 +45,9 @@  //      #define TRACY_ONLY_LOCALHOST 1          #define TRACY_ONLY_IPV4      1          #include "Tracy.hpp" + +        // Mutually exclusive with detailed memory tracing +        #define LL_PROFILER_ENABLE_TRACY_OPENGL 0      #endif      #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index 6bca3623e0..3d93cc0762 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -812,4 +812,23 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);  #define GL_RENDERBUFFER_FREE_MEMORY_ATI            0x87FD  #endif +#if defined(TRACY_ENABLE) && LL_PROFILER_ENABLE_TRACY_OPENGL +    // Tracy uses the following: +    //    glGenQueries +    //    glGetQueryiv +    //    glGetQueryObjectiv +    #define glGenQueries        glGenQueriesARB +    #define glGetQueryiv        glGetQueryivARB +    #define glGetQueryObjectiv  glGetQueryObjectivARB +    #include <tracy/TracyOpenGL.hpp> + +    #define LL_PROFILER_GPU_ZONEC(name,color) TracyGpuZoneC(name,color); +    #define LL_PROFILER_GPU_COLLECT           TracyGpuCollect +    #define LL_PROFILER_GPU_CONTEXT           TracyGpuContext +#else +    #define LL_PROFILER_GPU_ZONEC(name,color) (void)name;(void)color; +    #define LL_PROFILER_GPU_COLLECT +    #define LL_PROFILER_GPU_CONTEXT +#endif +  #endif // LL_LLGLHEADERS_H diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index e3c0255290..401085a00b 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -437,11 +437,13 @@ void LLRenderTarget::bindTarget()  									GL_COLOR_ATTACHMENT1,  									GL_COLOR_ATTACHMENT2,  									GL_COLOR_ATTACHMENT3}; +			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffersARB", 0x4000FF )  			glDrawBuffersARB(mTex.size(), drawbuffers);  		}  		if (mTex.empty())  		{ //no color buffer to draw to +			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffer", 0x0000FF )  			glDrawBuffer(GL_NONE);  			glReadBuffer(GL_NONE);  		} diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 7d2b09ca4a..b69b644ebc 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -615,6 +615,7 @@ void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, con  		glNormalPointer(GL_FLOAT, 0, norm[0].mV);  	}  	LLGLSLShader::startProfile(); +	LL_PROFILER_GPU_ZONEC( "gl.DrawArrays", 0xFF0000 )  	glDrawArrays(sGLMode[mode], 0, count);  	LLGLSLShader::stopProfile(count, mode);  } @@ -654,6 +655,7 @@ void LLVertexBuffer::drawElements(U32 mode, const LLVector4a* pos, const LLVecto  	}  	LLGLSLShader::startProfile(); +    LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0x80FF80 )  	glDrawElements(sGLMode[mode], num_indices, GL_UNSIGNED_SHORT, indicesp);  	LLGLSLShader::stopProfile(num_indices, mode);  } @@ -763,6 +765,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi  	stop_glerror();  	LLGLSLShader::startProfile(); +    LL_PROFILER_GPU_ZONEC( "gl.DrawRangeElements", 0xFFFF00 )  	glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT,   		idx);  	LLGLSLShader::stopProfile(count, mode); @@ -814,6 +817,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const  	stop_glerror();  	LLGLSLShader::startProfile(); +    LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0xA0FFA0 )  	glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT,  		((U16*) getIndicesPointer()) + indices_offset);  	LLGLSLShader::stopProfile(count, mode); @@ -861,6 +865,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  		stop_glerror();  		LLGLSLShader::startProfile();  		stop_glerror(); +        LL_PROFILER_GPU_ZONEC( "gl.DrawArrays", 0xFF4040 )  		glDrawArrays(sGLMode[mode], first, count);  		stop_glerror();  		LLGLSLShader::stopProfile(count, mode); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index b2b123f0da..1b8881cc86 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1748,6 +1748,8 @@ const	S32   max_format  = (S32)num_formats - 1;  		return FALSE;  	} +	LL_PROFILER_GPU_CONTEXT +  	if (!gGLManager.initGL())  	{  		close(); @@ -3474,6 +3476,8 @@ BOOL LLWindowWin32::resetDisplayResolution()  void LLWindowWin32::swapBuffers()  {  	SwapBuffers(mhDC); + +    LL_PROFILER_GPU_COLLECT  } diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 9daea515e5..fb53a7648d 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -323,6 +323,10 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,                       PWSTR     pCmdLine,                       int       nCmdShow)  { +    // Call Tracy first thing to have it allocate memory +    // https://github.com/wolfpld/tracy/issues/196 +    LL_PROFILER_FRAME_END +  	const S32 MAX_HEAPS = 255;  	DWORD heap_enable_lfh_error[MAX_HEAPS];  	S32 num_heaps = 0; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 4a802ad9aa..6e55d8f66a 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -585,6 +585,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)  						glTexCoordPointer(2, GL_FLOAT, 8, vol_face.mTexCoords);  					}  					gGL.syncMatrices(); +					LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0x00FF00 );  					glDrawElements(GL_TRIANGLES, vol_face.mNumIndices, GL_UNSIGNED_SHORT, vol_face.mIndices);  					glDisableClientState(GL_TEXTURE_COORD_ARRAY);  				} diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index efa4a7fd66..0adf58a0bf 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2700,11 +2700,17 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  			glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);  			gGL.diffuseColor4fv(line_color.mV);  			gGL.syncMatrices(); -			glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); +			{ +				LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0x20FF20 ) +				glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); +			}  			gGL.diffuseColor4fv(color.mV);  			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -			glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);			 +			{ +				LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0x40FF40 ) +				glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); +			}  		}  		else  		{ @@ -3222,6 +3228,7 @@ void renderRaycast(LLDrawable* drawablep)  						gGL.diffuseColor4f(0,1,1,0.5f);  						glVertexPointer(3, GL_FLOAT, sizeof(LLVector4a), face.mPositions);  						gGL.syncMatrices(); +						LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0x60FF60 );  						glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices);  					} diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e7c2d4db39..4e28c8c493 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -11146,6 +11146,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  		if (LLPipeline::sRenderDeferred)  		{  			GLuint buff = GL_COLOR_ATTACHMENT0; +			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffersARB", 0x8000FF );  			glDrawBuffersARB(1, &buff);  		} | 
