Name ARB_shader_image_size Name Strings GL_ARB_shader_image_size Contact Christophe Riccio, AMD (christophe.riccio@amd.com) Contributors Jeannot Breton, NVIDIA Notice Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at http://www.khronos.org/registry/speccopyright.html Specification Update Policy Khronos-approved extension specifications are updated in response to issues and bugs prioritized by the Khronos OpenGL Working Group. For extensions which have been promoted to a core Specification, fixes will first appear in the latest version of that core Specification, and will eventually be backported to the extension document. This policy is described in more detail at https://www.khronos.org/registry/OpenGL/docs/update_policy.php Status Complete. Approved by the ARB on 2012/06/12. Version Last Modified Date: July 19, 2012 Revision: 3 Number ARB Extension #136 Dependencies OpenGL 4.2 is required. OpenGL Shading Language 4.20 is required This extension is written against the OpenGL 4.2 specification and version 4.20 of the OpenGL Shading Language Specification. This extension interacts with NV_gpu_program5 and EXT_shader_image_load_store. Overview This extension provides GLSL built-in functions allowing shaders to query the size of an image. New Procedures and Functions None. New Tokens None. Additions to Chapter 2 of the OpenGL 4.2 (Core Profile) Specification (OpenGL Operation) None. Additions to Chapter 3 of the OpenGL 4.2 (Core Profile) Specification (Rasterization) None. Additions to Chapter 4 of the OpenGL 4.2 (Core Profile) Specification (Per-Fragment Operations and the Frame Buffer) None. Additions to Chapter 5 of the OpenGL 4.2 (Core Profile) Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL 4.2 (Core Profile) Specification (State and State Requests) None. Errors None. New State None. New Implementation Dependent State None. Modifications to The OpenGL Shading Language Specification, Version 4.20.11 Including the following line in a shader can be used to control the language features described in this extension: #extension GL_ARB_shader_image_size A new preprocessor #define is added to the OpenGL Shading Language: #define GL_ARB_shader_image_size 1 Add to section 8.11 "Image Functions" Syntax: int imageSize(gimage1D image) ivec2 imageSize(gimage2D image) ivec3 imageSize(gimage3D image) ivec2 imageSize(gimageCube image) ivec3 imageSize(gimageCubeArray image) ivec2 imageSize(gimageRect image) ivec2 imageSize(gimage1DArray image) ivec3 imageSize(gimage2DArray image) int imageSize(gimageBuffer image) ivec2 imageSize(gimage2DMS image) ivec3 imageSize(gimage2DMSArray image) Description: Returns the dimensions of the image or images bound to . For arrayed images, the last component of the return value will hold the size of the array. Cube images return the dimensions of one face, and number of cubes in the cube map array, if arrayed. Dependencies on NV_gpu_program5 and EXT_shader_image_load_store If NV_gpu_program5 and EXT_shader_image_load_store are supported and "OPTION ARB_shader_image_size" is specified in an assembly program, the following edits are made to extend the assembly programming model documented in the NV_gpu_program4 extension and extended by NV_gpu_program5 and EXT_shader_image_load_store. If NV_gpu_program5 and EXT_shader_image_load_store are not supported, or if "OPTION ARB_shader_image_size" is not specified in an assembly program, the contents of this dependencies section should be ignored. Section 2.X.2, Program Grammar (add the following rules to the grammar) : ::= ::= "," ::= "IMQ" Modify Section 2.X.4, Program Execution Environment Instr- Modifiers uction V F I C S H D Out Inputs Description ------- -- - - - - - - --- -------- -------------------------------- IMQ 50 - - - - - S vs i image size query (Add to "Section 2.X.6, Program Options" of the NV_gpu_program4 extension, as extended by NV_gpu_program5) + Image size query (ARB_shader_image_size) If a program specifies the "ARB_shader_image_size" option, it may use the IMQ instruction. If this option is not specified, a program will fail to compile if it uses this instruction. Section 2.X.8.Z, IMQ: Image size query The IMQ instruction returns the dimensions of the image unit specified by . Eleven image targets are supported: 1D, 2D, 3D, RECT, CUBE, BUFFER, ARRAY1D, ARRAY2D, ARRAYCUBE, 2DMS, and ARRAY2DMS. For one-dimensional, one-dimensional array and buffer textures, the "x" component of the result vector is filled with the width of the image(s). For two-dimensional, rectangle, cube map, two-dimensional array, cube map array, three-dimensional, two-dimensional multisample and two-dimensional multisample array textures, the "x" and "y" components are filled with the width and height of the image(s). Additionally, when the entire one-dimensional array texture level is bound, the "y" component of the result vector is filled with the number of layers in the image(s). When the entire two-dimensional array or two-dimensional multisample array texture level is bound, the "z" component of the result vector is filled with the number of layers in the image(s). When the entire cube map array texture level is bound, the "z" component of the result vector is filled with the number of cubes in the cube map array. When the entire three-dimensional texture level is bound, the "z" component of the result vector is filled with the depth of the image(s). All other components of the result vector are undefined. IMQ supports no storage modifier, since the image size is independent of the image unit format. It supports no data type modifiers; the result vector is interpreted as signed integers. Conformance Tests Issues none Revision History Revision 3, 2012/7/19 (JBreton) - Add interaction with NV_gpu_program5 and EXT_shader_image_load_store, providing a new image size query instruction to the assembly program. Revision 2, 2012/5/12 (JohnK) - Expand description to include details consistent with textureSize(). Revision 1, 2012/03/30 (criccio) - First draft