blob: 1fd28bbb6b4b05cbed1c3e2d53b5c763681f998c [file] [log] [blame]
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 <image>. 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)
<ImageInstruction>: ::= <IMQop_instruction>
<IMQop_instruction:> ::= <IMQop> <opModifiers> <instResult> ","
<imageAccess>
<IMQop> ::= "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
<imageUnit>. 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
<TBD>
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