Name
NVX_gpu_memory_info
Name Strings
GL_NVX_gpu_memory_info
Contact
Howard Stroyan, NVIDIA Corporation (hstroyan 'at' nvidia.com)
Contributors
Eric Werness
Evan Hart
Mark Kilgard
Status
Complete. Shipping in NVIDIA 195.XX drivers
NVIDIA's Tegra drivers will not expose this extensions.
Version
Last Modified Date: October 3, 2013
Author Revision: 1.4
Number
438
Dependencies
OpenGL 2.0 is required.
The extension is written against the OpenGL 2.0 Specification.
Overview
Most graphics systems offer a limited amount of onboard
high-performance memory for storing textures, geometric
primitives, and other data used for rendering.
OpenGL implementations are expected to manage the residence of
objects (that is, the memory pools in which objects are placed)
automatically. This is simple for applications to use, and the
high level of abstraction allows many different underlying
hardware implementations. However performance sensitive
applications that are willing to adjust their usage of these memory
resources in order to maintain their desired performance are unable
to determine when the limited onboard memory resources are
approaching full utilization and swapping (with its related
performance impact) is imminent.
GL_NVX_gpu_memory_info provides applications visibility into GPU
hardware memory utilization in order to allow the application to
effectively manage its resource allocations in the scope of the
current available GPU memory. This information is made available
to the applications in the form of the total available resource
size (after initial system allocations) and the current available
resource (e.g. free memory) as well as a count of the number and
total size of evictions of data from GPU memory since the last time
this information was queried from this context using this extension.
New Procedures and Functions
none
New Tokens
Accepted by the parameter of GetIntegerv:
GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
Additions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL Operation)
none
Additions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)
none
Additions to Chapter 4 of the OpenGL 2.0 Specification (Per-Fragment
Operations and the Frame Buffer)
none
Additions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions)
none
Additions to Chapter 6 of the OpenGL 2.0 Specification (State and
State Requests)
Section 6.1.x, GPU Memory Information Query
Inserted between sections 6.1.14 and 6.1.15
Information on GPU memory resources available can be queried
by specifying one of:
GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX
GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
GPU_MEMORY_INFO_EVICTION_COUNT_NVX
GPU_MEMORY_INFO_EVICTED_MEMORY_NVX
as the value parameter to GetIntegerv.
These will return the memory status of the context's associated GPU memory.
The status returned is not intended as an exact measurement of the
system's current status. It will provide a approximate indicator of
the overall GPU memory utilization so that an application can determine
when the resource usage is approaching the full capacity of the GPU memory
and it may need to adjust its usage pattern to avoid performance limiting
swapping. Each query returns a integer where the values have the
following meanings:
GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
- dedicated video memory, total size (in kb) of the GPU memory
GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX
- total available memory, total size (in Kb) of the memory
available for allocations
GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
- current available dedicated video memory (in kb),
currently unused GPU memory
GPU_MEMORY_INFO_EVICTION_COUNT_NVX
- count of total evictions seen by system
GPU_MEMORY_INFO_EVICTED_MEMORY_NVX
- size of total video memory evicted (in kb)
The values reported are subject to change and cannot be used as a
guarantee of successful future allocations. The current available
dedicated memory will be less than the total GPU memory size since
system allocations for shared resources (i.e. desktop surfaces) will
be accounted for. The reported current available GPU memory will be
influenced by the current binding state of resources such as
textures and object buffers that can potentially migrate between
system and dedicated GPU memory based on their usage. The eviction
count indicates that number of eviction events that caused
an allocation to be removed from dedicated video memory to free GPU
video memory to make room for other allocations. The eviction size
is the total size of memory released as a result of these evictions.
These eviction values are running counters and may not start at zero
on the first query. This extension does not attempt to account for
any potential fragmentation issues that may limit full utilization
of the GPU memory resource depending on implementation.
Additions to Appendix A of the OpenGL 2.0 Specification (Invariance)
none
Additions to the AGL/GLX/WGL Specifications
None
Errors
None
Issues
1) Implementing the eviction information is OS dependent.
For XP and Linux the eviction information is specific to the current process/state
since eviction is determined in the individual client.
For Vista it is system wide since eviction is determined by the OS.
2) Should Tegra advertise and support this extension?
RESOLVED: No. Tegra's unified memory architecture doesn't sensibly
map to the queries of this extensions.
A future extension is needed to address this.
Revision History
1.2 Added eviction count and size information.
1.3 Changed to separate enums / GetIntegerv calls for each value.
Removed reset of eviction data on query.
1.4 Document Tegra will not support this extension.