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.