blob: 3d7b948d13bf988d30cb7c0a5afe82903a417d92 [file] [log] [blame]
Name
ATI_meminfo
Name Strings
GL_ATI_meminfo
Contributors
Roy Blackmer, ATI Technologies
Bruno Stefanizzi, ATI Technologies
Andreas Wolf, ATI Technologies
Evan Hart, ATI Technologies
Contact
Bruno Stefanizzi, AMD (bruno.stefanizzi 'at' amd.com)
Status
???
Version
Date: March 2, 2009
Revision: 0.2
Number
359
Dependencies
OpenGL 1.1 is required
ARB_vertex_buffer_object affects the defintion of this extension
EXT_framebuffer_object affects the definition of this extension
This extension is written against the 2.0 version of the OpenGL
Specification, modified with EXT_framebuffer_object.
Overview
Traditionally, OpenGL has treated resource management as a task of hardware
virtualization hidden from applications. While providing great portability,
this shielding of information can prevent applications from making
intelligent decisions on the management of resources they create. For
instance, an application may be better served by choosing a different
rendering method if there is not sufficient resources to efficiently
utilize its preferred method.
Issues
1) Revealing the management of memory directly is somewhat controversial,
is this really desirable?
The intent of this extension is to provide insight into the consumption
of memory. It does not require that exact values be returned. The
information is intended to be a hint to the application about the
status at a particular moment in time. As such, the value returned does
not need to reveal the exact information, but instead it could return
a conservative value of 80% of actual availability. In any case, it is
highly reccommended that the information be returned in kilobytes.
2) Memory can come from different pools that may interact. How should this
be dealt with?
The queries will enumerate different classes of memory based on modern
OpenGL paradigms. The classes defined so far are texture, vertex
buffer, an render buffer. These correspond to API visible capabilities
such as readable, writable, and mapable. The memory between these pools
may often be shared, so allocations in one pool may reduce all pools.
3) Are the abreviations and names correct?
Probably not.
4) How should the values be returned?
Returning all information about a memory type in a single query is
most optimal. Values are returned as 4 integers: total pool available,
largest pool available, total auxilliary pool available, and largest
auxilliary pool available. Auxilliary pool are for remote memory.
New Functions and Procedures
None
New Tokens
Accepted by the <value> parameter of GetIntegerv:
VBO_FREE_MEMORY_ATI 0x87FB
TEXTURE_FREE_MEMORY_ATI 0x87FC
RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
Additions to Chapter 2 of the 2.0 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 2.0 Specification (Rasterization)
None
Additions to Chapter 4 of the 2.0 Specification (Per-Fragment Operations
and the Frame Buffer)
None
Additions to Chapter 5 of the 2.0 Specification (Special Functions)
None
Additions to Chapter 6 of the 2.0 Specification (State and State Requests)
Section 6.1.x, Memory Information Queries
Inserted between sections 6.1.14 and 6.1.15
Information on the current memory resources available can be queried
by specifying VBO_FREE_MEMORY_ATI, TEXTURE_FREE_MEMORY_ATI, or
RENDERBUFFER_FREE_MEMORY_ATI as the value parameter to GetIntergerv.
These return the memory status for pools of memory used for vertex
buffer objects, textures, and render buffers respectively. The
memory status is not meant to be an exact measurement of the system's
current status (though it may be in some implementations), but it is
instead meant to represent the present load such that an application
can make decisions on how aggressive it can be on the allocation of
resources without overloading the system. The query returns a 4-tuple
integer where the values are in Kbyte and have the following meanings:
param[0] - total memory free in the pool
param[1] - largest available free block in the pool
param[2] - total auxiliary memory free
param[3] - largest auxiliary free block
These values are only useful as a hint as the implementation cannot
guarantee the lack of allocations between commands, and the
information may have changed before the attempt to use it. Auxiliary
memory is memory that an implementation may use as a backup to its
primary pool for a certain type of allocation. The pools are not
guaranteed to be either independent or shared, as this is an
implementation choice.
Additions to the OpenGL Shading Language specification
None
Additions to the GLX Specification
None
Dependencies on ARB_vertex_buffer_object or OpenGL version 1.5
If ARB_vertex_buffer_object or OpenGL version 1.5 is supportedd, then
the query for VBO_FREE_MEMORY_ATI is available.
Dependencies on EXT_framebuffer_object
If EXT_framebuffer_object is implemented, then the query for
RENDERBUFFER_FREE_MEMORY_ATI is available.
Errors
None
GLX protocol
None
Revision History
2009/03/02 (Jon Leech) - format version 0.2 received from ATI
to remove GL_ prefix, assign extension number.