blob: 593c9aa05962833cf4fd519a310d4c23d06cfa05 [file] [log] [blame]
Name
NV_query_resource
Name Strings
GL_NV_query_resource
Contact
Kevin Lefebvre, NVIDIA (klefebvre 'at' nvidia.com)
Contributors
Status
Under review. Target release in NVIDIA 387.00 drivers.
NVIDIA's Tegra drivers will not expose this extensions.
Version
Last Modified Date: May 4, 2017
Author Revision: 0.1
Number
OpenGL Extension #511
Dependencies
OpenGL 2.0 is required.
The extension is written against the OpenGL 2.0 Specification.
Overview
OpenGL implementations manage the residence of textures, shaders, and
other graphical objects in GPU accessible memory (whether in on-board
video memory or addressable system memory is implementation dependent).
With more insight into OpenGL's memory usage 1) applications could make
educated decisions on better utilizing the limited GPU resources,
2) users could better optimize their workflow when working with multiple
tools, and 3) administrators can make better decisions regarding resource
allocation and system configurations.
The purpose of this extension is to return a more detailed breakdown
of memory usage in terms of the OpenGL objects residing in memory
(textures, render buffers, buffer objects, system reserved objects, ...).
This extension differs from GL_NVX_gpu_memory_info in that this extension
returns detailed memory usage at the object level for video memory while
the other extension only reports total vidmem usage.
For the purposes of this specification the term vidmem refers to video
memory resident on the graphics card that is directly accessible to the
GPU at the highest performance level.
New Procedures and Functions
int QueryResourceNV(enum queryType, int pname, unsigned int bufSize,
int *buffer);
New Tokens
Accepted by the <queryType> parameter of QueryResource:
QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540
New enums defined:
QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542
QUERY_RESOURCE_SYS_RESERVED_NV 0x9544
QUERY_RESOURCE_TEXTURE_NV 0x9545
QUERY_RESOURCE_RENDERBUFFER_NV 0x9546
QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547
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 Query Resource
The command QueryResourceNV returns GL object usage of video memory in the
application provided buffer. Both a summary of the total vidmen allocated
by the driver is written along with a more detailed breakdown of memory
used by the GL objects created by the application (textures, render buffers
buffer objects, ...). Memory sizes reported are in kilobytes.
Due to various factors with the OpenGL driver the amount of memory in use
by GL objects may not equal the amount of memory actually allocated.
Alignment issues, freed but not released objects, or memory block
sub-allocation options may result in the driver holding more memory than
what can be accounted for by the total memory used by the GL objects. This
command will report both the memory used by GL objects and the amount of
memory free but allocated by the driver.
Currently the queryType parameter only accepts the type VIDMEM_ALLOC_NV
leaving future extensions possible. The param parameter is reserved for
future usage. The bufSize parameter indicates the size of the application
provided buffer in ints where the query results are returned. The buffer
parameter points to this return buffer. The commands return value is the
number of ints written in the return buffer. If the return value is
negative then the buffer is too small to hold the returned data. If the
buffer pointer is NULL then the return value specifies the size of buffer
needed to hold the results from the query call.
The format of the returned data from a query is a series of int's of the
form:
fixedHeader
size - size of fixed header(in int's)
version - data stream version number (version = 1 at this time)
devCount - count of devices
deviceBlk[i from 0 to devCount - 1]
size - size of per device info including detail blocks (in int's)
numAllocs - number of GL object allocations
vidmem - size of vidmem in use by GL objects
vidmemFree - size of vidmem allocated but not in use
detailCount - number of detail blocks
detailBlk[j from 0 to detailCount - 1]
size - size of single detail block (in int's)
memType - only vidmem at this time
objType - GL object type
numAllocs - number of objects of this objType
vidmem - amount of memory used for this objType
For decoding the detail blocks the following constants are defined:
memType:
QUERY_RESOURCE_MEMTYPE_VIDMEM_NV
objType:
QUERY_RESOURCE_SYS_RESERVED_NV
QUERY_RESOURCE_TEXTURE_NV
QUERY_RESOURCE_RENDERBUFFER_NV
QUERY_RESOURCE_BUFFEROBJECT_NV
Errors
None
New State
None
Issues
1) With Windows 10 comes additional capabilities with respect to how much
vidmem an applicaiton can really gain access to and what happens when
the application comes under memory pressure. These capabilities include
OS vidmem budget levels, application setting a vidmem reservation as a
hint to the OS in an attempt to reduce memory thrashing, and what
allocations will be forced out of vidmem (into sysmem if the allocation
permits it). Should this extension try to report some of this
information?
PROPOSED RESOLUTION: This extension as written currently describes the
mem usage at a point in time that is only valid at the time of
calling. If this level of information is not sufficient to meet the
ISV and User needs then we should consider adding some of the Window 10
capabilities (abstracted for other OS/s if possible) in a follow-on
extension.
Revision History
Rev. Date Author Changes
---- -------- --------- ------------------------------------------------
1 05/04/17 klefebvre First draft
Changes from NVX version of extension:
- fix function prototype of QueryResourceNV
- remove queryType SUMMARY, default to DETAILED, leave queryType
parameter for future extension
- add size entries to each return record to support future
addition of data and have backwards compatability to decoder
- rework format of buffer return data