blob: cfd99c15a6dcc2bb51f08ff4e0b79d964f108564 [file] [log] [blame]
Name
EXT_texture_shadow_lod
Name Strings
GL_EXT_texture_shadow_lod
Contact
Billy Clack, NVIDIA Corporation (bclack 'at' nvidia.com)
Contributors
Ashwin Lele, NVIDIA Corporation
Daniel Koch, NVIDIA Corporation
Graeme Leese, Broadcom Corporation
Pyarelal Knowles, NVIDIA Corporation
Sagar Ghuge, Intel Corporation
Mark Janes, Intel Corporation
Status
Complete.
Version
Last Modified Date: June 3, 2019
Revision: 2
Number
OpenGL Extension #539
OpenGL ES Extension #320
Dependencies
OpenGL 2.0 or OpenGL ES 3.0 is required.
This extension is written against the OpenGL Shading Language
Specification, version 4.60.5 dated July 14, 2018.
The same shading language modifications should also be applied to the
OpenGL ES Shading Language Specification, version 3.20.4 under the
corresponding sections.
This extension interacts with ARB_texture_cube_map_array and OpenGL 4.0.
This extension interacts with OES_texture_cube_map_array and OpenGL ES 3.2.
This extension interacts with EXT_texture_cube_map_array and OpenGL ES 3.2.
This extension requires EXT_gpu_shader4 or equivalent functionality.
Overview
This extension adds support for various shadow sampler types with texture
functions having interactions with the LOD of texture lookups. Modern
shading languages support LOD queries for shadow sampler types, but until
now the OpenGL Shading Language Specification has excluded multiple texture
function overloads involving LOD calculations with various shadow samplers.
Shading languages for other APIs do support the equivalent LOD-based
texture sampling functions for these types which has made porting between
those shading languages to GLSL cumbersome and has required the usage of
sub-optimal workarounds.
New Procedures and Functions
None
New Tokens
None
Modification to the OpenGL Shading Language Specification, Version 4.60.5
Including the following line in a shader can be used to control
the language features described in this extension:
#extension GL_EXT_texture_shadow_lod : <behavior>
where <behavior> is specified in section 3.3.
New preprocessor #defines are added to the OpenGL Shading Language:
#define GL_EXT_texture_shadow_lod 1
Add to section 8.9.2 "Texel Lookup Functions" (p. 170):
(Add variants of the texture lookup functions with supplied bias p. 170)
float texture(sampler2DArrayShadow sampler, vec4 P [, float bias])
float texture(samplerCubeArrayShadow sampler, vec4 P, float compare [, float bias])
(Add variant of the texture lookup function with supplied offset and optional supplied bias p. 170)
float textureOffset(sampler2DArrayShadow sampler, vec4 P, ivec2 offset [, float bias])
(Add new functions to the set of allowed texture LOD lookup functions p. 170)
float textureLod(sampler2DArrayShadow sampler, vec4 P, float lod)
float textureLod(samplerCubeShadow sampler, vec4 P, float lod)
float textureLod(samplerCubeArrayShadow sampler, vec4 P, float compare, float lod)
float textureLodOffset(sampler2DArrayShadow sampler, vec4 P, float lod, ivec2 offset)
Dependencies on ARB_texture_cube_map_array and OpenGL 4.0
If neither ARB_texture_cube_map_array nor OpenGL 4.0 are supported for
OpenGL contexts, ignore references to samplerCubeArrayShadow.
Dependencies on OES_texture_cube_map_array, EXT_texture_cube_map_array and OpenGL ES 3.2
If neither OES_texture_cube_map_array, EXT_texture_cube_map_array, nor OpenGL ES 3.2 are supported for
OpenGL ES contexts, ignore references to samplerCubeArrayShadow.
Issues
(1) Are there any other texture function and sampler combinations that are
missing from the specifications that might be valid combinations?
RESOLVED: Yes, as of GLSL 4.60.5 and ESSL 3.20.4, there are other
missing texture functions and sampler combinations that might be valid
but this extension does not add support for.
There is no support for Cube samplers and textureOffset family of
functions, and no support for Array samplers with textureProj family
of functions. This extension does not add support for these functions
since they are 1) not related to shadow samplers and thus outside the
scope of this extension, 2) not yet clear if these combinations should
be supported at all, and 3) if support should be added then each
family of missing functions is deserving of its own extension.
textureGrad() is missing support for samplerCubeArrayShadow in both
the GLSL and ESSL specifications, and is also missing support for
gsampler2DArray variants only in the ESSL specification. The
samplerCubeArrayShadow variant is not included in this extension
because not all vendors can easily support the additional parameter
beyond the gradients. The missing gsampler2DArray variants in ESSL
are not added because they are unrelated to shadow types and thus
outside the scope of this extension.
(2) The GLSL specification already contains a definition for
textureOffset() with sampler2DArrayShadow; does this mean only the optional
bias variant of this function is needed?
RESOLVED: Yes for GLSL, but the ESSL specification does
not have either the non-bias or bias variants of this function so both
variants should be defined according to this extension.
Revision History
Revision 2
- Minor correction on contributor name.
Revision 1
- Initial version.