Files
godot-angle-static/extensions/EGL_ANGLE_experimental_present_path.txt
Austin Kinross 2a63b3f860 Re-land "Implement EGL_experimental_present_path_angle"
- Re-land with clang fix.

This allows ANGLE to render directly onto a D3D swapchain in the correct
orientation when using the D3D11 renderer.

The trick is to add an extra uniform to each shader which takes either
the value +1.0 or -1.0. When rendering to a texture, ANGLE sets this
value to -1.0. When rendering to the default framebuffer, ANGLE sets
this value to +1.0. ANGLE multiplies vertex positions by this value in
the VS to invert rendering when appropriate. It also corrects other
state (e.g. viewport/scissor rect) and shader built-in values
(e.g. gl_FragCoord).

This saves a substantial amount of GPU time and lowers power
consumption. For example, the old method (where ANGLE renders all
content onto an offscreen texture, and then copies/inverts this onto the
swapchain at eglSwapBuffers() time) uses about 20% of the GPU each frame
on a Lumia 630.

Verification:
+ dEQP GL ES2 tests pass when "present path fast" is enabled
+ all ANGLE_end2end_tests pass when "present path fast" is enabled

BUG=angleproject:1219

Change-Id: I56b339897828753a616d7bae837a2f354dba9c63
Reviewed-on: https://chromium-review.googlesource.com/326730
Tryjob-Request: Austin Kinross <aukinros@microsoft.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
2016-02-08 21:05:16 +00:00

106 lines
2.5 KiB
Plaintext

Name
ANGLE_experimental_present_path
Name Strings
EGL_ANGLE_experimental_present_path
Contributors
Austin Kinross
Contacts
Austin Kinross (aukinros 'at' microsoft 'dot' com)
Status
Experimental
Version
Version 1, Jan 22 2016
Number
EGL Extension #XXX
Extension Type
EGL display extension
Dependencies
Requires ANGLE_platform_angle_d3d.
Written against the wording of EGL 1.4 as modified by
ANGLE_platform_angle_d3d.
Overview
This extension exposes an optimized, but potentially non-conformant,
rendering path for ANGLE's D3D11 renderer on Windows.
New Types
None
New Procedures and Functions
None
New Tokens
Accepted as an attribute name in the <attrib_list> argument of
eglGetPlatformDisplayEXT:
EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE 0x33A4
Accepted as values for the EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE attribute:
EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE 0x33A9
EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE 0x33AA
Additions to the EGL Specification
None.
New Behavior
To request a display that enables this optimized rendering path,
the value of EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE should be set to
EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE. Setting this value may impact
OpenGL ES conformance (see Issue 1 below).
The only valid values for the attribute
EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE are
EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE and
EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE. If any other value is specified
then an EGL_BAD_ATTRIBUTE error is generated and EGL_NO_DISPLAY is
returned.
If a value for EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE is specified and
EGL_PLATFORM_ANGLE_TYPE_ANGLE is not set to
EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE then an EGL_BAD_ATTRIBUTE error is
generated and EGL_NO_DISPLAY is returned.
If the attribute EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE
is unspecified then it is implicitly set to
EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE.
Issues
1) Does setting EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE to be
EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE maintain OpenGL ES
conformance?
RESOLVED: Not necessarily, that is implementation-specific. Check then
EGL_CONFORMANT attribute to see if the implementation supports any
conformant EGL configs when EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE
is specified.
Revision History
Version 1, Jan 22 2016 (Austin Kinross)
- Initial draft