Name NV_internalformat_sample_query Name Strings GL_NV_internalformat_sample_query Contact Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) Contributors Piers Daniell, NVIDIA Weiwan Liu, NVIDIA Status Complete Version Last Modified Date: October 10, 2014 Revision: 2 Number OpenGL Extension #475 OpenGL ES Extension #196 Dependencies This specification is written against the OpenGL 4.5 (Core Profile) Specification (September 19, 2014). OpenGL 4.2 or ARB_internalformat_query are required for an OpenGL implementation. OpenGL ES 3.0 is required for an OpenGL ES implementation. This extension interacts with OpenGL ES 3.1. This extension interacts with KHR_debug and OpenGL 4.3. This extension interacts with OES_texture_storage_multisample_2d_array. Overview Some OpenGL implementations support modes of multisampling which have properties which are non-obvious to applications and/or which may not be standards conformant. The idea of non-conformant AA modes is not new, and is exposed in both GLX and EGL with config caveats and the GLX_NON_CONFORMANT_CONFIG for GLX and EGL_NON_CONFORMANT_CONFIG for EGL, or by querying the EGL_CONFORMANT attribute in newer versions of EGL. Both of these mechanisms operate on a per-config basis, which works as intended for window-based configs. However, with the advent of application-created FBOs, it is now possible to do all the multisample operations in an application-created FBO and never use a multisample window. This extension further extends the internalformat query mechanism (first introduced by ARB_internalformat_query and extended in ARB_internalformat_query2) and introduces a mechanism for a implementation to report properties of formats that may also be dependent on the number of samples. This includes information such as whether the combination of format and samples should be considered conformant. This enables an implementation to report caveats which might apply to both window and FBO-based rendering configurations. Some NVIDIA drivers support multisample modes which are internally implemented as a combination of multisampling and automatic supersampling in order to obtain a higher level of anti-aliasing than can be directly supported by hardware. This extension allows those properties to be queried by an application with the MULTISAMPLES_NV, SUPERSAMPLE_SCALE_X_NV and SUPERSAMPLE_SCALE_Y_NV properties. For example, a 16xAA mode might be implemented by using 4 samples and up-scaling by a factor of 2 in each of the x- and y-dimensions. In this example, the driver might report MULTSAMPLES_NV of 4, SUPERSAMPLE_SCALE_X_NV of 2, SUPERSAMPLE_SCALE_Y_NV of 2 and CONFORMANT_NV of FALSE. New Procedures and Functions void GetInternalformatSampleivNV(enum target, enum internalformat, sizei samples, enum pname, sizei bufSize, int *params); New Types None. New Tokens Accepted by the parameter of GetInternalformatSampleivNV: RENDERBUFFER TEXTURE_2D_MULTISAMPLE TEXTURE_2D_MULTISAMPLE_ARRAY Accepted by the parameter of GetInternalformatSampleivNV: MULTISAMPLES_NV 0x9371 SUPERSAMPLE_SCALE_X_NV 0x9372 SUPERSAMPLE_SCALE_Y_NV 0x9373 CONFORMANT_NV 0x9374 Additions to Chapter 22 of the OpenGL 4.5 (Core Profile) Specification (Context State Queries) Add a new section 22.3.ifsq "Internal Format Sample Queries": Information about implementation-dependent support for sample related properties of internal formats can be queried with the command void GetInternalformatSampleivNV(enum target, enum internalformat, sizei samples, enum pname, sizei bufSize, int *params); must be color-renderable, depth-renderable, or stencil-renderable (as defined in section 9.4). indicates the usage of the , and must be one of the targets that can be used for multisample resources, that is one of RENDERBUFFER, TEXTURE_2D_MULTISAMPLE, or TEXTURE_2D_MULTISAMPLE_ARRAY. indicates the number of samples of the for which properties are being queried. It is an error if the requested are not supported for requested and . GetInternalformativ with the SAMPLES property can be used to determine if is supported. No more than integers will be written into . If more data are available, they will be ignored and no error will be generated. indicates the information to query, and it is one of the following values. When a known property is queried, the associated value is written into , otherwise is unmodified. - MULTISAMPLES_NV: returns the number of multisamples used when a resource of the requested type and the specified is created. - SUPERSAMPLE_SCALE_X_NV: returns the super-sample scaling factor that is used in the X-dimension when a resource of the requested type and the specified is created. - SUPERSAMPLE_SCALE_Y_NV: returns the super-sample scaling factor that is used in the Y-dimension when a resource of the requested type and the specified is created. - CONFORMANT_NV: returns the conformance-compliance of a resource created with the requested type and the specified . TRUE is returned if the format/sample combination is supported in a compliant manner. FALSE is returned if the requested format/sample combination is not conformant. If this query reports non-conformant status and the debug output functionality is enabled, the GL will generate a debug output message describing the caveats. The message has the source DEBUG_SOURCE_API, the type DEBUG_TYPE_UNDEFINED_BEHAVIOR, and an implementation-dependent ID. Errors: The INVALID_ENUM error is generated if is not one of RENDERBUFFER, TEXTURE_2D_MULTISAMPLE, or TEXTURE_2D_MULTISAMPLE_ARRAY. The INVALID_ENUM error is generated if is not color-, depth-, or stencil-renderable. The INVALID_ENUM error is generated if is not one of MULTISAMPLES_NV, SUPERSAMPLE_SCALE_X_NV, SUPERSAMPLE_SCALE_Y_NV, or CONFORMANT_NV. The INVALID_VALUE error is generated if is negative. The INVALID_OPERATION error is generated if a resource of the requested type and samples is not supported by the implementation. Additions to the WGL/GLX/EGL Specification None. Dependencies on OpenGL ES 3.1 If OpenGL ES 3.1 is not supported in an OpenGL ES implementation, ignore references to TEXTURE_2D_MULTISAMPLE and resources. Dependencies on OES_texture_storage_multisample_2d_array. If OES_texture_storage_multisample_2d_array is not supported in an OpenGL ES implementation, ignore references to TEXTURE_2D_MULTISAMPLE_ARRAY. If the extension is supported, replace references to TEXTURE_2D_MULTISAMPLE_ARRAY with references to TEXTURE_2D_MULTISAMPLE_ARRAY_OES. Dependencies on KHR_debug If KHR_debug or OpenGL 4.3 are not supported, ignore references to debug output functionality. If KHR_debug is supported in an OpenGL ES context, append the _KHR suffix onto associated types. New State None. Sample Code // Obtain supported sample count for a format: GLint num_sample_counts = 0; GLenum ifmt = GL_RGBA8; GLenum target = GL_TEXTURE_2D_MULTISAMPLE; glGetInternalformativ(target, ifmt, NUM_SAMPLE_COUNTS, 1, &num_sample_counts); // get the list of supported samples for this format GLint samples[num_sample_counts]; glGetInternalformativ(target, ifmt, SAMPLES, num_sample_counts, samples); // loop over the supported formats and get per-sample properties for (int i=0; i