зеркало из https://github.com/AvaloniaUI/angle.git
258 строки
10 KiB
Plaintext
258 строки
10 KiB
Plaintext
Name
|
|
|
|
ANGLE_d3d_texture_client_buffer
|
|
|
|
Name Strings
|
|
|
|
EGL_ANGLE_d3d_texture_client_buffer
|
|
|
|
Contributors
|
|
|
|
Geoff Lang
|
|
Olli Etuaho
|
|
Sunny Sachanandani
|
|
|
|
Contacts
|
|
|
|
Geoff Lang, Google Inc. (geofflang 'at' google.com)
|
|
|
|
Status
|
|
|
|
Draft
|
|
|
|
Version
|
|
|
|
Version 6, May 12, 2020
|
|
|
|
Number
|
|
|
|
EGL Extension #??
|
|
|
|
Dependencies
|
|
|
|
This extension is written against the wording of the EGL 1.2
|
|
Specification.
|
|
|
|
References the EGL_ANGLE_device_d3d and EGL_KHR_image_base extensions.
|
|
|
|
Overview
|
|
|
|
This extension allows creating EGL surfaces and EGL images from D3D texture
|
|
objects.
|
|
|
|
New Types
|
|
|
|
None
|
|
|
|
New Procedures and Functions
|
|
|
|
None
|
|
|
|
New Tokens
|
|
|
|
Accepted by the <target> parameter of eglCreateImageKHR and <buftype>
|
|
parameter of eglCreatePbufferFromClientBuffer:
|
|
|
|
EGL_D3D_TEXTURE_ANGLE 0x33A3
|
|
|
|
Additions to Chapter 2 of the EGL 1.2 Specification (EGL Operation)
|
|
|
|
Add to section 2.5.1 "EGLImage Specification" (as defined by the
|
|
EGL_KHR_image_base specification), in the description of
|
|
eglCreateImageKHR:
|
|
|
|
"Values accepted for <target> are listed in Table aaa, below.
|
|
|
|
+----------------------------+-----------------------------------------+
|
|
| <target> | Notes |
|
|
+----------------------------+-----------------------------------------+
|
|
| EGL_D3D_TEXTURE_ANGLE | Used for Direct3D11 texture objects |
|
|
+----------------------------+-----------------------------------------+
|
|
Table aaa. Legal values for eglCreateImageKHR <target> parameter
|
|
|
|
...
|
|
|
|
If <target> is EGL_D3D_TEXTURE_ANGLE, <dpy> must be a valid display, <ctx>
|
|
must be EGL_NO_CONTEXT, <buffer> must be a pointer to a valid D3D11 texture
|
|
object (cast into the type EGLClientBuffer), and attributes other than
|
|
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE, EGL_TEXTURE_OFFSET_X_ANGLE, or
|
|
EGL_TEXTURE_OFFSET_Y_ANGLE are ignored. The width and height of the pbuffer
|
|
are determined by the width and height of <buffer>.
|
|
|
|
If EGL_TEXTURE_INTERNAL_FORMAT_ANGLE is specified, it is used to interpret
|
|
<buffer> according to the provided internal format. See table
|
|
egl.restrictions for acceptable texture object types and formats.
|
|
|
|
If EGL_D3D11_TEXTURE_PLANE_ANGLE is specified, it is used to access the
|
|
specified plane of <buffer>. See table egl.restrictions for acceptable
|
|
values.
|
|
|
|
If EGL_D3D11_TEXTURE_ARRAY_SLICE_ANGLE is specified, it is used to access
|
|
the specified array slice of the texture array <buffer>.
|
|
|
|
If EGL_TEXTURE_OFFSET_X_ANGLE or EGL_TEXTURE_OFFSET_Y_ANGLE are specified,
|
|
they must be non-negative and are used to offset all rendering into the
|
|
surface including blits, clears and draws.
|
|
|
|
If the EGL_ANGLE_device_d3d extension is present, the provided D3D11 texture
|
|
object must have been created by the same D3D11 device queried from the
|
|
display. If these requirements are not met, an EGL_BAD_PARAMETER error is
|
|
generated."
|
|
|
|
Additions to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)
|
|
|
|
Replace the last sentence of paragraph 1 of Section 3.5.3 with the
|
|
following text.
|
|
"Currently, the only client API resources which may be bound in this
|
|
fashion are OpenVG VGImage objects and Direct3D texture objects."
|
|
|
|
Replace the last sentence of paragraph 2 ("To bind a client API...") of
|
|
Section 3.5.3 with the following text.
|
|
"When <buftype> is EGL_OPENVG_IMAGE or EGL_D3D_TEXTURE_ANGLE, the width and
|
|
height of the pbuffer are determined by the width and height of <buffer>."
|
|
|
|
Replace the third paragraph of Section 3.5.3 with the following text.
|
|
"<buftype> specifies the type of buffer to be bound. The only allowed values
|
|
of <buftype> are EGL_OPENVG_IMAGE and EGL_D3D_TEXTURE_ANGLE".
|
|
|
|
Append the following text to the fourth paragraph of Section 3.5.3.
|
|
"When <buftype> is EGL_D3D_TEXTURE_ANGLE, <buffer> must be
|
|
a valid D3D texture object, cast into the type EGLClientBuffer. See table
|
|
egl.restrictions for acceptable texture object types and formats. If the
|
|
EGL_ANGLE_device_d3d extension is present, the provided D3D texture object
|
|
must have been created by the same D3D device queried from the display.
|
|
If these requirements are not met, an EGL_BAD_PARAMETER error is
|
|
generated."
|
|
|
|
---------------------------------------------------------------------------
|
|
Resource Type Resource Restrictions
|
|
---------------------------------------------------------------------------
|
|
IDirect3DTexture9 Memory pool must be D3DPOOL_DEFAULT.
|
|
|
|
Format must be D3DFMT_R8G8B8, D3DFMT_A8R8G8B8,
|
|
D3DFMT_A16B16G16R16F or D3DFMT_A32B32G32R32F.
|
|
|
|
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE is not supported.
|
|
|
|
EGL_TEXTURE_OFFSET_X_ANGLE and EGL_TEXTURE_OFFSET_Y_ANGLE
|
|
are not supported.
|
|
|
|
ID3D11Texture2D Usage flags must be D3D11_USAGE_DEFAULT.
|
|
|
|
Format must be
|
|
DXGI_FORMAT_R8G8B8A8_UNORM,
|
|
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
|
|
DXGI_FORMAT_B8G8R8A8_UNORM,
|
|
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB (support is optional),
|
|
DXGI_FORMAT_R8G8B8A8_TYPELESS (support is optional),
|
|
DXGI_FORMAT_B8G8R8A8_TYPELESS (support is optional),
|
|
DXGI_FORMAT_R16G16B16A16_FLOAT,
|
|
DXGI_FORMAT_R32G32B32A32_FLOAT,
|
|
DXGI_FORMAT_R10G10B10A2_UNORM,
|
|
DXGI_FORMAT_R8_UNORM,
|
|
DXGI_FORMAT_R16_UNORM,
|
|
DXGI_FORMAT_R8G8_UNORM,
|
|
DXGI_FORMAT_R16G16_UNORM,
|
|
DXGI_FORMAT_NV12,
|
|
DXGI_FORMAT_P010, or
|
|
DXGI_FORMAT_P016.
|
|
|
|
EGL_D3D11_TEXTURE_PLANE_ANGLE must be specified for YUV
|
|
formats DXGI_FORMAT_NV12, DXGI_FORMAT_P010, or
|
|
DXGI_FORMAT_P016, and must be 0 or 1. It is ignored for
|
|
all non-YUV formats.
|
|
|
|
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE (if specified) must be
|
|
GL_RGBA (supported for all RGBA and BGRA formats),
|
|
GL_RGB (supported for all RGBA and BGRA formats except
|
|
DXGI_FORMAT_R10G10B10A2_UNORM),
|
|
GL_BGRA_EXT (supported only for
|
|
DXGI_FORMAT_B8G8R8A8_UNORM,
|
|
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, and
|
|
DXGI_FORMAT_B8G8R8A8_TYPELESS),
|
|
GL_RGB10_A2_EXT (supported for
|
|
DXGI_FORMAT_R10G10B10A2_UNORM),
|
|
GL_RED_EXT (supported for DXGI_FORMAT_R8_UNORM
|
|
and DXGI_FORMAT_R16_UNORM),
|
|
GL_RG_EXT (supported for DXGI_FORMAT_R8G8_UNORM
|
|
and DXGI_FORMAT_R16G16_UNORM),
|
|
GL_R16_EXT (supported for DXGI_FORMAT_R16_UNORM), or
|
|
GL_RG16_EXT (supported for DXGI_FORMAT_R16G16_UNORM).
|
|
It is ignored for all YUV formats.
|
|
--------------------------------------------------------------------------
|
|
Table egl.restrictions - Restrictions on D3D resources that can be used
|
|
as a <buffer>.
|
|
--------------------------------------------------------------------------
|
|
|
|
Append to the fifth paragraph of Section 3.5.3.
|
|
"In addition, in case buftype is EGL_D3D_TEXTURE_ANGLE and the D3D resource
|
|
has a typeless DXGI format, attrib_list may contain the attribute
|
|
EGL_GL_COLORSPACE."
|
|
|
|
Append to the end of Section 3.5.3.
|
|
"When a pbuffer is created with type EGL_D3D_TEXTURE_ANGLE, the contents
|
|
of the associcated D3D texture object are undefined while the pbuffer is
|
|
the current read surface, draw surface or bound to a client texture."
|
|
|
|
Append to the end of Section 3.5.3.
|
|
"When a pbuffer is created with type EGL_D3D_TEXTURE_ANGLE, and the
|
|
EGL_GL_COLORSPACE attribute is not specified in attrib_list, the
|
|
EGL_GL_COLORSPACE attribute of the surface is determined by the DXGI format
|
|
of the Direct3D texture. For *_SRGB DXGI formats, the value of
|
|
EGL_GL_COLORSPACE is EGL_GL_COLORSPACE_SRGB. For other formats including
|
|
*_TYPELESS DXGI formats, the value of EGL_GL_COLORSPACE defaults to
|
|
EGL_GL_COLORSPACE_LINEAR."
|
|
|
|
Issues
|
|
|
|
1. What renderers allow the use of a multi-sampled texture?
|
|
|
|
PROPOSED: Multi-sampled texture support is currently limited to D3D11.
|
|
Additionally, the client is responsible for resolving the texture.
|
|
|
|
2. How does this extension interact with EXT_sRGB_write_control?
|
|
|
|
If GL_FRAMEBUFFER_SRGB_EXT is disabled and a pbuffer created from a D3D
|
|
texture with an *_SRGB format is being rendered to, it is undefined whether
|
|
SRGB conversion will be performed.
|
|
|
|
3. What renderers allow the use of typeless textures?
|
|
|
|
PROPOSED: Support for typeless textures is currently limited to D3D11.
|
|
|
|
4. Can RGB formats be supported?
|
|
|
|
RESOLVED: RGB internal formats are supported for creating images from D3D11
|
|
textures in version 5 by setting EGL_TEXTURE_INTERNAL_FORMAT_ANGLE attribute
|
|
to GL_RGB. Images with an RGB format will ensure that the alpha channel of
|
|
the texture is reset to 1.0 when it is used.
|
|
|
|
5. What operations do the texture offsets affect?
|
|
|
|
RESOLVED: The texture offsets specified by EGL_TEXTURE_OFFSET_X_ANGLE and
|
|
EGL_TEXTURE_OFFSET_Y_ANGLE affect only rendering into the surface.
|
|
Specifically these affect the internal D3D viewport and scissor rect states
|
|
for draws, clears, and blits. This is needed to apply the update offset
|
|
returned by calling BeginDraw() on IDCompositionSurface, and is needed for
|
|
correct rendering in that case.
|
|
|
|
Revision History
|
|
|
|
Version 9, 2021/09/07 - added support for R/RG formats and GL_RGB10_A2_EXT.
|
|
|
|
Version 8, 2021/01/13 - added support for texture array.
|
|
|
|
Version 7, 2021/01/12 - added support for NV12/P010/P016 planar formats.
|
|
|
|
Version 6, 2020/05/12 - added support for specifying texture offsets.
|
|
|
|
Version 5, 2019/09/06 - added support for creating EGLImage.
|
|
|
|
Version 4, 2019/04/15 - added support for DXGI_FORMAT_R10G10B10A2_UNORM.
|
|
|
|
Version 3, 2018/01/23 - added support for typeless textures.
|
|
|
|
Version 2, 2018/01/15 - clarified SRGB conversion handling.
|
|
|
|
Version 1, 2016/10/05 - first draft.
|