Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-09-07 20:53:48 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-09-07 21:17:45 +0300
commit58353834f441b8b4ca91dcd4ec94ac49bbbf5ab0 (patch)
tree86d507e7ea388fde34cdc4ae7d874cc1c6f99d46 /source/blender/gpu/opengl
parentc5c6b5ddb31c8a79667d6dcd689808efd3dadd8a (diff)
GPUCapabilities: Isolate GL memory statistics
This is part of the Vulkan task T68990 This is a simple cleanup.
Diffstat (limited to 'source/blender/gpu/opengl')
-rw-r--r--source/blender/gpu/opengl/gl_backend.cc1
-rw-r--r--source/blender/gpu/opengl/gl_context.cc27
-rw-r--r--source/blender/gpu/opengl/gl_context.hh1
3 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/gpu/opengl/gl_backend.cc b/source/blender/gpu/opengl/gl_backend.cc
index fedc03f5787..3dfe0e1e412 100644
--- a/source/blender/gpu/opengl/gl_backend.cc
+++ b/source/blender/gpu/opengl/gl_backend.cc
@@ -339,6 +339,7 @@ void GLBackend::capabilities_init(void)
glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &GCaps.max_textures_vert);
glGetIntegerv(GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, &GCaps.max_textures_geom);
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &GCaps.max_textures);
+ GCaps.mem_stats_support = GLEW_NVX_gpu_memory_info || GLEW_ATI_meminfo;
/* GL specific capabilities. */
glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &GLContext::max_texture_3d_size);
glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &GLContext::max_cubemap_size);
diff --git a/source/blender/gpu/opengl/gl_context.cc b/source/blender/gpu/opengl/gl_context.cc
index ec6cc9e6159..ecf74a1993d 100644
--- a/source/blender/gpu/opengl/gl_context.cc
+++ b/source/blender/gpu/opengl/gl_context.cc
@@ -277,3 +277,30 @@ void GLContext::vao_cache_unregister(GLVaoCache *cache)
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Memory statistics
+ * \{ */
+
+void GLContext::memory_statistics_get(int *r_total_mem, int *r_free_mem)
+{
+ /* TODO(merwin): use Apple's platform API to get this info. */
+ if (GLEW_NVX_gpu_memory_info) {
+ /* Teturned value in Kb. */
+ glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, r_total_mem);
+ glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, r_free_mem);
+ }
+ else if (GLEW_ATI_meminfo) {
+ int stats[4];
+ glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, stats);
+
+ *r_total_mem = 0;
+ *r_free_mem = stats[0]; /* Total memory free in the pool. */
+ }
+ else {
+ *r_total_mem = 0;
+ *r_free_mem = 0;
+ }
+}
+
+/** \} */
diff --git a/source/blender/gpu/opengl/gl_context.hh b/source/blender/gpu/opengl/gl_context.hh
index e2ae8bf24b2..06e59724f4a 100644
--- a/source/blender/gpu/opengl/gl_context.hh
+++ b/source/blender/gpu/opengl/gl_context.hh
@@ -97,6 +97,7 @@ class GLContext : public GPUContext {
void activate(void) override;
void deactivate(void) override;
+ void memory_statistics_get(int *total_mem, int *free_mem) override;
static inline GLStateManager *state_manager_active_get()
{