diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.h | 21 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/utils.h | 22 |
4 files changed, 48 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index f9d97d928..24a540258 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -501,6 +501,9 @@ CachedSurface::CachedSurface(const SurfaceParams& params) | |||
| 501 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 501 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 502 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 502 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 503 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 503 | glTexParameteri(SurfaceTargetToGL(params.target), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| 504 | |||
| 505 | VideoCore::LabelGLObject(GL_TEXTURE, texture.handle, params.addr, | ||
| 506 | SurfaceParams::SurfaceTargetName(params.target)); | ||
| 504 | } | 507 | } |
| 505 | 508 | ||
| 506 | static void ConvertS8Z24ToZ24S8(std::vector<u8>& data, u32 width, u32 height) { | 509 | static void ConvertS8Z24ToZ24S8(std::vector<u8>& data, u32 width, u32 height) { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index d7a4bc37f..80c5f324b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h | |||
| @@ -137,6 +137,27 @@ struct SurfaceParams { | |||
| 137 | } | 137 | } |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | static std::string SurfaceTargetName(SurfaceTarget target) { | ||
| 141 | switch (target) { | ||
| 142 | case SurfaceTarget::Texture1D: | ||
| 143 | return "Texture1D"; | ||
| 144 | case SurfaceTarget::Texture2D: | ||
| 145 | return "Texture2D"; | ||
| 146 | case SurfaceTarget::Texture3D: | ||
| 147 | return "Texture3D"; | ||
| 148 | case SurfaceTarget::Texture1DArray: | ||
| 149 | return "Texture1DArray"; | ||
| 150 | case SurfaceTarget::Texture2DArray: | ||
| 151 | return "Texture2DArray"; | ||
| 152 | case SurfaceTarget::TextureCubemap: | ||
| 153 | return "TextureCubemap"; | ||
| 154 | default: | ||
| 155 | LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target)); | ||
| 156 | UNREACHABLE(); | ||
| 157 | return fmt::format("TextureUnknown({})", static_cast<u32>(target)); | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 140 | /** | 161 | /** |
| 141 | * Gets the compression factor for the specified PixelFormat. This applies to just the | 162 | * Gets the compression factor for the specified PixelFormat. This applies to just the |
| 142 | * "compressed width" and "compressed height", not the overall compression factor of a | 163 | * "compressed width" and "compressed height", not the overall compression factor of a |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 894fe6eae..7cd8f91e4 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "video_core/engines/maxwell_3d.h" | 8 | #include "video_core/engines/maxwell_3d.h" |
| 9 | #include "video_core/renderer_opengl/gl_shader_cache.h" | 9 | #include "video_core/renderer_opengl/gl_shader_cache.h" |
| 10 | #include "video_core/renderer_opengl/gl_shader_manager.h" | 10 | #include "video_core/renderer_opengl/gl_shader_manager.h" |
| 11 | #include "video_core/utils.h" | ||
| 11 | 12 | ||
| 12 | namespace OpenGL { | 13 | namespace OpenGL { |
| 13 | 14 | ||
| @@ -83,6 +84,7 @@ CachedShader::CachedShader(VAddr addr, Maxwell::ShaderProgram program_type) | |||
| 83 | shader.Create(program_result.first.c_str(), gl_type); | 84 | shader.Create(program_result.first.c_str(), gl_type); |
| 84 | program.Create(true, shader.handle); | 85 | program.Create(true, shader.handle); |
| 85 | SetShaderUniformBlockBindings(program.handle); | 86 | SetShaderUniformBlockBindings(program.handle); |
| 87 | VideoCore::LabelGLObject(GL_PROGRAM, program.handle, addr); | ||
| 86 | } | 88 | } |
| 87 | 89 | ||
| 88 | GLuint CachedShader::GetProgramResourceIndex(const GLShader::ConstBufferEntry& buffer) { | 90 | GLuint CachedShader::GetProgramResourceIndex(const GLShader::ConstBufferEntry& buffer) { |
diff --git a/src/video_core/utils.h b/src/video_core/utils.h index e0a14d48f..681919ae3 100644 --- a/src/video_core/utils.h +++ b/src/video_core/utils.h | |||
| @@ -161,4 +161,26 @@ static inline void MortonCopyPixels128(u32 width, u32 height, u32 bytes_per_pixe | |||
| 161 | } | 161 | } |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | static void LabelGLObject(GLenum identifier, GLuint handle, VAddr addr, | ||
| 165 | std::string extra_info = "") { | ||
| 166 | if (!GLAD_GL_KHR_debug) { | ||
| 167 | return; // We don't need to throw an error as this is just for debugging | ||
| 168 | } | ||
| 169 | const std::string nice_addr = fmt::format("0x{:016x}", addr); | ||
| 170 | std::string object_label; | ||
| 171 | |||
| 172 | switch (identifier) { | ||
| 173 | case GL_TEXTURE: | ||
| 174 | object_label = extra_info + "@" + nice_addr; | ||
| 175 | break; | ||
| 176 | case GL_PROGRAM: | ||
| 177 | object_label = "ShaderProgram@" + nice_addr; | ||
| 178 | break; | ||
| 179 | default: | ||
| 180 | object_label = fmt::format("Object(0x{:x})@{}", identifier, nice_addr); | ||
| 181 | break; | ||
| 182 | } | ||
| 183 | glObjectLabel(identifier, handle, -1, static_cast<const GLchar*>(object_label.c_str())); | ||
| 184 | } | ||
| 185 | |||
| 164 | } // namespace VideoCore | 186 | } // namespace VideoCore |