diff options
Diffstat (limited to 'source/blender/gpu/opengl')
-rw-r--r-- | source/blender/gpu/opengl/gl_backend.cc | 1 | ||||
-rw-r--r-- | source/blender/gpu/opengl/gl_context.cc | 27 | ||||
-rw-r--r-- | source/blender/gpu/opengl/gl_context.hh | 1 |
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() { |