Hash :
dadd1986
Author :
Date :
2020-04-21T01:50:00
Implement GL_APPLE_clip_distance - Built-in variable gl_ClipDistance has been added to compiler. - Desktop GL: gl_ClipDistance is supported since GL 3.0. Enable/Disable each gl_ClipDistances[i] works out of the box via glEnable(). - Vulkan/Metal: Use uniform variable to control writing to each gl_ClipDistance. One bit flag controls one element in the gl_ClipDistance array. The writing to the disabled element in vertex shader will be ignored, and turned into zero assignment instead. - Direct3D/Mobile GL: Not implemented yet. - Added ClipDistanceTest to gl_tests and compiler unittests. - GL_APPLE_clip_distance is a subset of GL_EXT_clip_cull_distance, so GL_EXT_clip_cull_distance could be implemented in future if needed. Bug: angleproject:4452 Change-Id: I571ac8b56826989808a680226a04bec4cf59988e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2084324 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
OpenGL GLSL’s gl_ClipDistance is equivalent to [[clip_distance]] attribute in the Metal Shading
Language. However, OpenGL supports disabling/enabling individual gl_ClipDistance[i] on the API
level side. Writing to gl_ClipDistance[i] in shader will be ignored if it is disabled. Metal
doesn’t have any equivalent API to disable/enable the writing, though writing to a clip_distance
variable automatically enables it.
To emulate this enabling/disabling API, the Metal back-end uses a similar implementation as what Vulkan back-end does. Please refer to that document for more details.
# gl_ClipDistance extension support in Metal back-end
OpenGL GLSL's `gl_ClipDistance` is equivalent to `[[clip_distance]]` attribute in the Metal Shading
Language. However, OpenGL supports disabling/enabling individual `gl_ClipDistance[i]` on the API
level side. Writing to `gl_ClipDistance[i]` in shader will be ignored if it is disabled. Metal
doesn't have any equivalent API to disable/enable the writing, though writing to a `clip_distance`
variable automatically enables it.
To emulate this enabling/disabling API, the Metal back-end uses a similar implementation as what
[Vulkan back-end does](../../vulkan/doc/APPLE_clip_distance.md). Please refer to that document for
more details.