xref: /aosp_15_r20/external/angle/extensions/CHROMIUM_copy_texture.txt (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard WorkerName
2*8975f5c5SAndroid Build Coastguard Worker
3*8975f5c5SAndroid Build Coastguard Worker    CHROMIUM_copy_texture
4*8975f5c5SAndroid Build Coastguard Worker
5*8975f5c5SAndroid Build Coastguard WorkerName Strings
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker    GL_CHROMIUM_copy_texture
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard WorkerVersion
10*8975f5c5SAndroid Build Coastguard Worker
11*8975f5c5SAndroid Build Coastguard Worker    Last Modifed Date: March 24, 2017
12*8975f5c5SAndroid Build Coastguard Worker
13*8975f5c5SAndroid Build Coastguard WorkerDependencies
14*8975f5c5SAndroid Build Coastguard Worker
15*8975f5c5SAndroid Build Coastguard Worker    OpenGL ES 2.0 or OpenGL ES 3.0 is required.
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Worker    EXT_texture_format_BGRA8888 affects the definition of this extension.
18*8975f5c5SAndroid Build Coastguard Worker    ARB_texture_rg affects the definition of this extension.
19*8975f5c5SAndroid Build Coastguard Worker    CHROMIUM_ycbcr_422_image affects the definition of this extension.
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard WorkerOverview
22*8975f5c5SAndroid Build Coastguard Worker
23*8975f5c5SAndroid Build Coastguard Worker    This extension expands on the functionality provided by the
24*8975f5c5SAndroid Build Coastguard Worker    glCopyTexImage2D command.  A new function is exported,
25*8975f5c5SAndroid Build Coastguard Worker    glCopyTextureCHROMIUM, that performs the same copy operation as
26*8975f5c5SAndroid Build Coastguard Worker    glCopyTexImage2D.
27*8975f5c5SAndroid Build Coastguard Worker
28*8975f5c5SAndroid Build Coastguard Worker    The extension also supports copying BGRA textures and copying
29*8975f5c5SAndroid Build Coastguard Worker    EXTERNAL_OES texture to BGRA texture, which is not explicitly
30*8975f5c5SAndroid Build Coastguard Worker    granted by EXT_texture_format_BGRA8888.
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard WorkerNew Procedures and Functions
33*8975f5c5SAndroid Build Coastguard Worker
34*8975f5c5SAndroid Build Coastguard Worker    void CopyTextureCHROMIUM(uint sourceId,
35*8975f5c5SAndroid Build Coastguard Worker                             int sourceLevel,
36*8975f5c5SAndroid Build Coastguard Worker                             enum destTarget,
37*8975f5c5SAndroid Build Coastguard Worker                             uint destId,
38*8975f5c5SAndroid Build Coastguard Worker                             int destLevel,
39*8975f5c5SAndroid Build Coastguard Worker                             int internalFormat,
40*8975f5c5SAndroid Build Coastguard Worker                             enum destType,
41*8975f5c5SAndroid Build Coastguard Worker                             boolean unpackFlipY,
42*8975f5c5SAndroid Build Coastguard Worker                             boolean unpackPremultiplyAlpha,
43*8975f5c5SAndroid Build Coastguard Worker                             boolean unpackUnmultiplyAlpha)
44*8975f5c5SAndroid Build Coastguard Worker
45*8975f5c5SAndroid Build Coastguard Worker
46*8975f5c5SAndroid Build Coastguard Worker    void CopySubTextureCHROMIUM(uint sourceId,
47*8975f5c5SAndroid Build Coastguard Worker                                int sourceLevel,
48*8975f5c5SAndroid Build Coastguard Worker                                enum destTarget,
49*8975f5c5SAndroid Build Coastguard Worker                                uint destId,
50*8975f5c5SAndroid Build Coastguard Worker                                int destLevel,
51*8975f5c5SAndroid Build Coastguard Worker                                int xoffset,
52*8975f5c5SAndroid Build Coastguard Worker                                int yoffset,
53*8975f5c5SAndroid Build Coastguard Worker                                int x,
54*8975f5c5SAndroid Build Coastguard Worker                                int y,
55*8975f5c5SAndroid Build Coastguard Worker                                sizei width,
56*8975f5c5SAndroid Build Coastguard Worker                                sizei height,
57*8975f5c5SAndroid Build Coastguard Worker                                boolean unpackFlipY,
58*8975f5c5SAndroid Build Coastguard Worker                                boolean unpackPremultiplyAlpha,
59*8975f5c5SAndroid Build Coastguard Worker                                boolean unpackUnmultiplyAlpha)
60*8975f5c5SAndroid Build Coastguard Worker
61*8975f5c5SAndroid Build Coastguard WorkerAdditions to the OpenGL ES 2.0 Specification
62*8975f5c5SAndroid Build Coastguard Worker
63*8975f5c5SAndroid Build Coastguard Worker    The command
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Worker        CopyTextureCHROMIUM
66*8975f5c5SAndroid Build Coastguard Worker
67*8975f5c5SAndroid Build Coastguard Worker    Copies the contents of <sourceLevel> level of <sourceId> texture to
68*8975f5c5SAndroid Build Coastguard Worker    <destLevel> level and <destTarget> target of <destId> texture.
69*8975f5c5SAndroid Build Coastguard Worker
70*8975f5c5SAndroid Build Coastguard Worker    <destTarget> must be TEXTURE_2D,
71*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_X,
72*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Y,
73*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_CUBE_MAP_POSITIVE_Z, TEXTURE_CUBE_MAP_NEGATIVE_Z,
74*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_RECTANGLE_ARB.
75*8975f5c5SAndroid Build Coastguard Worker
76*8975f5c5SAndroid Build Coastguard Worker    The internal format of the destination texture is converted to that
77*8975f5c5SAndroid Build Coastguard Worker    specified by <internalFormat>.
78*8975f5c5SAndroid Build Coastguard Worker
79*8975f5c5SAndroid Build Coastguard Worker    When source texture doens't contain a superset of the component
80*8975f5c5SAndroid Build Coastguard Worker    required by <internalFormat>, fill the components by following rules.
81*8975f5c5SAndroid Build Coastguard Worker
82*8975f5c5SAndroid Build Coastguard Worker       source format           color components
83*8975f5c5SAndroid Build Coastguard Worker       ----------------------------------------
84*8975f5c5SAndroid Build Coastguard Worker       ALPHA                   (0, 0, 0, A)
85*8975f5c5SAndroid Build Coastguard Worker       RED                     (R, 0, 0, 1)
86*8975f5c5SAndroid Build Coastguard Worker       LUMINANCE               (L, L, L, 1)
87*8975f5c5SAndroid Build Coastguard Worker       LUMINANCE_ALPHA         (L, L, L, A)
88*8975f5c5SAndroid Build Coastguard Worker       RGB                     (R, G, B, 1)
89*8975f5c5SAndroid Build Coastguard Worker       RGB8                    (R, G, B, 1)
90*8975f5c5SAndroid Build Coastguard Worker       RGBA                    (R, G, B, A)
91*8975f5c5SAndroid Build Coastguard Worker       RGBA8                   (R, G, B, A)
92*8975f5c5SAndroid Build Coastguard Worker       BGRA_EXT                (R, G, B, A)
93*8975f5c5SAndroid Build Coastguard Worker       BGRA8_EXT               (R, G, B, A)
94*8975f5c5SAndroid Build Coastguard Worker       RGB_YCBCR_420V_CHROMIUM (R, G, B, 1)
95*8975f5c5SAndroid Build Coastguard Worker       RGB_YCBCR_422_CHROMIUM  (R, G, B, 1)
96*8975f5c5SAndroid Build Coastguard Worker
97*8975f5c5SAndroid Build Coastguard Worker    The format type of the destination texture is converted to that specified
98*8975f5c5SAndroid Build Coastguard Worker    by <destType>.
99*8975f5c5SAndroid Build Coastguard Worker
100*8975f5c5SAndroid Build Coastguard Worker    If <flipY> is true, vertically flip texture image data.
101*8975f5c5SAndroid Build Coastguard Worker
102*8975f5c5SAndroid Build Coastguard Worker    If <unpackPremultiplyAlpha> and <unpackUnmultiplyAlpha> are true,
103*8975f5c5SAndroid Build Coastguard Worker    no alpha processing occurs.  This is the equivalent of having neither flag
104*8975f5c5SAndroid Build Coastguard Worker    set.
105*8975f5c5SAndroid Build Coastguard Worker
106*8975f5c5SAndroid Build Coastguard Worker    When <sourceId> refers to a stream texture, the texture matrix will be
107*8975f5c5SAndroid Build Coastguard Worker    applied as part of the copy operation.
108*8975f5c5SAndroid Build Coastguard Worker
109*8975f5c5SAndroid Build Coastguard Worker    INVALID_OPERATION is generated if <internalFormat> is not one of the
110*8975f5c5SAndroid Build Coastguard Worker    formats in Table 1.0.
111*8975f5c5SAndroid Build Coastguard Worker
112*8975f5c5SAndroid Build Coastguard Worker    INVALID_OPERATION is generated if the internal format of <sourceId> is not
113*8975f5c5SAndroid Build Coastguard Worker    one of formats in Table 1.1.
114*8975f5c5SAndroid Build Coastguard Worker
115*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if <sourceId> or <destId> are not valid texture
116*8975f5c5SAndroid Build Coastguard Worker    objects.
117*8975f5c5SAndroid Build Coastguard Worker
118*8975f5c5SAndroid Build Coastguard Worker    INVALID_ENUM is generated if <destTarget> is not one of the valid targets
119*8975f5c5SAndroid Build Coastguard Worker    described above.
120*8975f5c5SAndroid Build Coastguard Worker
121*8975f5c5SAndroid Build Coastguard Worker    INVALID_OPERATION is generated if the bound target of destination texture
122*8975f5c5SAndroid Build Coastguard Worker    does not match <target>.
123*8975f5c5SAndroid Build Coastguard Worker
124*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if textures corresponding to <destId> have not
125*8975f5c5SAndroid Build Coastguard Worker    been bound as TEXTURE_2D, TEXTURE_CUBE_MAP, or
126*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_RECTANGLE_ARB objects.
127*8975f5c5SAndroid Build Coastguard Worker
128*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if textures corresponding to <sourceId> have not
129*8975f5c5SAndroid Build Coastguard Worker    been bound as TEXTURE_2D, TEXTURE_RECTANGLE_ARB or
130*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_EXTERNAL_OES objects.
131*8975f5c5SAndroid Build Coastguard Worker
132*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if <sourceLevel> is not 0 for ES 2.0, or if
133*8975f5c5SAndroid Build Coastguard Worker    <sourceLevel> or <destLevel> is less than 0 for ES 3.0.
134*8975f5c5SAndroid Build Coastguard Worker
135*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if <sourceLevel> of the source texture is not
136*8975f5c5SAndroid Build Coastguard Worker    defined.
137*8975f5c5SAndroid Build Coastguard Worker
138*8975f5c5SAndroid Build Coastguard Worker    The command
139*8975f5c5SAndroid Build Coastguard Worker
140*8975f5c5SAndroid Build Coastguard Worker        CopySubTextureCHROMIUM
141*8975f5c5SAndroid Build Coastguard Worker
142*8975f5c5SAndroid Build Coastguard Worker    Copies the sub contents of texture referred to by <sourceId> to <destId>
143*8975f5c5SAndroid Build Coastguard Worker    texture without redefining <destId> texture.
144*8975f5c5SAndroid Build Coastguard Worker
145*8975f5c5SAndroid Build Coastguard Worker    See CopyTextureCHROMIUM for the interpretation of the <destTarget>,
146*8975f5c5SAndroid Build Coastguard Worker    <sourceLevel>, <destLevel>, <flipY>, <premultiplyAlpha>, and
147*8975f5c5SAndroid Build Coastguard Worker    <unmultiplyAlpha> arguments.
148*8975f5c5SAndroid Build Coastguard Worker
149*8975f5c5SAndroid Build Coastguard Worker    <xoffset> and <yoffset> specify a texel offset in the x and y direction
150*8975f5c5SAndroid Build Coastguard Worker    respectively within the destination texture.
151*8975f5c5SAndroid Build Coastguard Worker
152*8975f5c5SAndroid Build Coastguard Worker    <x> and <y> specify specify a texel offset in the x and y direction
153*8975f5c5SAndroid Build Coastguard Worker    respectively within the source texture.
154*8975f5c5SAndroid Build Coastguard Worker
155*8975f5c5SAndroid Build Coastguard Worker    <width> specifies the width of the texture subimage.
156*8975f5c5SAndroid Build Coastguard Worker
157*8975f5c5SAndroid Build Coastguard Worker    <height> specifies the width of the texture subimage.
158*8975f5c5SAndroid Build Coastguard Worker
159*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if either <sourceId> texture or <destId>
160*8975f5c5SAndroid Build Coastguard Worker    texture is not defined.
161*8975f5c5SAndroid Build Coastguard Worker
162*8975f5c5SAndroid Build Coastguard Worker    INVALID_OPERATION is generated if the internal format of <sourceId> or
163*8975f5c5SAndroid Build Coastguard Worker    <destId> is not one of formats in Table 1.1.
164*8975f5c5SAndroid Build Coastguard Worker
165*8975f5c5SAndroid Build Coastguard Worker    INVALID_OPERATION is generated if the destination texture array has not
166*8975f5c5SAndroid Build Coastguard Worker    been defined.
167*8975f5c5SAndroid Build Coastguard Worker
168*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if <destId> texture is not bound as
169*8975f5c5SAndroid Build Coastguard Worker    TEXTURE_2D or TEXTURE_RECTANGLE_ARB.
170*8975f5c5SAndroid Build Coastguard Worker
171*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if level 0 of the source texture or
172*8975f5c5SAndroid Build Coastguard Worker    the destination texture is not defined.
173*8975f5c5SAndroid Build Coastguard Worker
174*8975f5c5SAndroid Build Coastguard Worker    INVALID_VALUE is generated if (<xoffset> + <width>) > destWidth,
175*8975f5c5SAndroid Build Coastguard Worker    or (<yoffset> + <height>) > destHeight.
176*8975f5c5SAndroid Build Coastguard Worker
177*8975f5c5SAndroid Build Coastguard Worker    Table 1.0 Valid internal formats for CopyTextureCHROMIUM:
178*8975f5c5SAndroid Build Coastguard Worker
179*8975f5c5SAndroid Build Coastguard Worker        <internalFormat>
180*8975f5c5SAndroid Build Coastguard Worker        ---------------
181*8975f5c5SAndroid Build Coastguard Worker        ALPHA
182*8975f5c5SAndroid Build Coastguard Worker        BGRA8_EXT
183*8975f5c5SAndroid Build Coastguard Worker        BGRA_EXT
184*8975f5c5SAndroid Build Coastguard Worker        LUMINANCE
185*8975f5c5SAndroid Build Coastguard Worker        LUMINANCE_ALPHA
186*8975f5c5SAndroid Build Coastguard Worker        R11F_G11F_B10F
187*8975f5c5SAndroid Build Coastguard Worker        R16F
188*8975f5c5SAndroid Build Coastguard Worker        R32F
189*8975f5c5SAndroid Build Coastguard Worker        R8
190*8975f5c5SAndroid Build Coastguard Worker        R8UI
191*8975f5c5SAndroid Build Coastguard Worker        RG16F
192*8975f5c5SAndroid Build Coastguard Worker        RG32F
193*8975f5c5SAndroid Build Coastguard Worker        RG8
194*8975f5c5SAndroid Build Coastguard Worker        RG8UI
195*8975f5c5SAndroid Build Coastguard Worker        RGB
196*8975f5c5SAndroid Build Coastguard Worker        RGB10_A2
197*8975f5c5SAndroid Build Coastguard Worker        RGB16F
198*8975f5c5SAndroid Build Coastguard Worker        RGB32F
199*8975f5c5SAndroid Build Coastguard Worker        RGB565
200*8975f5c5SAndroid Build Coastguard Worker        RGB5_A1
201*8975f5c5SAndroid Build Coastguard Worker        RGB8
202*8975f5c5SAndroid Build Coastguard Worker        RGB8UI
203*8975f5c5SAndroid Build Coastguard Worker        RGB9_E5
204*8975f5c5SAndroid Build Coastguard Worker        RGBA
205*8975f5c5SAndroid Build Coastguard Worker        RGBA16F
206*8975f5c5SAndroid Build Coastguard Worker        RGBA32F
207*8975f5c5SAndroid Build Coastguard Worker        RGBA4
208*8975f5c5SAndroid Build Coastguard Worker        RGBA8
209*8975f5c5SAndroid Build Coastguard Worker        RGBA8UI
210*8975f5c5SAndroid Build Coastguard Worker        RGBX8_ANGLE
211*8975f5c5SAndroid Build Coastguard Worker        SRGB8
212*8975f5c5SAndroid Build Coastguard Worker        SRGB8_ALPHA8
213*8975f5c5SAndroid Build Coastguard Worker        SRGB_ALPHA_EXT
214*8975f5c5SAndroid Build Coastguard Worker        SRGB_EXT
215*8975f5c5SAndroid Build Coastguard Worker
216*8975f5c5SAndroid Build Coastguard Worker    Table 1.1 Valid source texture internal formats for CopyTextureCHROMIUM and
217*8975f5c5SAndroid Build Coastguard Worker    source and destination formats for CopySubTextureCHROMIUM:
218*8975f5c5SAndroid Build Coastguard Worker
219*8975f5c5SAndroid Build Coastguard Worker        internal format
220*8975f5c5SAndroid Build Coastguard Worker        ---------------
221*8975f5c5SAndroid Build Coastguard Worker        RED
222*8975f5c5SAndroid Build Coastguard Worker        ALPHA
223*8975f5c5SAndroid Build Coastguard Worker        LUMINANCE
224*8975f5c5SAndroid Build Coastguard Worker        LUMINANCE_ALPHA
225*8975f5c5SAndroid Build Coastguard Worker        RGB
226*8975f5c5SAndroid Build Coastguard Worker        RGBA
227*8975f5c5SAndroid Build Coastguard Worker        RGB8
228*8975f5c5SAndroid Build Coastguard Worker        RGBA8
229*8975f5c5SAndroid Build Coastguard Worker        BGRA_EXT
230*8975f5c5SAndroid Build Coastguard Worker        BGRA8_EXT
231*8975f5c5SAndroid Build Coastguard Worker        RGB_YCBCR_420V_CHROMIUM
232*8975f5c5SAndroid Build Coastguard Worker        RGB_YCBCR_422_CHROMIUM
233*8975f5c5SAndroid Build Coastguard Worker
234*8975f5c5SAndroid Build Coastguard WorkerDependencies on ARB_texture_rg
235*8975f5c5SAndroid Build Coastguard Worker
236*8975f5c5SAndroid Build Coastguard Worker    If ARB_texture_rg is not supported:
237*8975f5c5SAndroid Build Coastguard Worker     * delete any reference to the R8 format.
238*8975f5c5SAndroid Build Coastguard Worker
239*8975f5c5SAndroid Build Coastguard WorkerDependencies on CHROMIUM_ycbcr_422_image
240*8975f5c5SAndroid Build Coastguard Worker
241*8975f5c5SAndroid Build Coastguard Worker    If CHROMIUM_ycbcr_422_image is not supported:
242*8975f5c5SAndroid Build Coastguard Worker     * delete any reference to the RGB_YCBCR_422_CHROMIUM format.
243*8975f5c5SAndroid Build Coastguard Worker
244*8975f5c5SAndroid Build Coastguard WorkerErrors
245*8975f5c5SAndroid Build Coastguard Worker
246*8975f5c5SAndroid Build Coastguard Worker    None.
247*8975f5c5SAndroid Build Coastguard Worker
248*8975f5c5SAndroid Build Coastguard WorkerNew Tokens
249*8975f5c5SAndroid Build Coastguard Worker
250*8975f5c5SAndroid Build Coastguard Worker    None.
251*8975f5c5SAndroid Build Coastguard Worker
252*8975f5c5SAndroid Build Coastguard WorkerNew State
253*8975f5c5SAndroid Build Coastguard Worker
254*8975f5c5SAndroid Build Coastguard Worker    None.
255*8975f5c5SAndroid Build Coastguard Worker
256*8975f5c5SAndroid Build Coastguard WorkerRevision History
257*8975f5c5SAndroid Build Coastguard Worker
258*8975f5c5SAndroid Build Coastguard Worker    8/1/2011    Documented the extension
259*8975f5c5SAndroid Build Coastguard Worker    7/4/2013    Add a new parameter dest_type to glCopyTextureCHROMIUM()
260*8975f5c5SAndroid Build Coastguard Worker    16/7/2014   Add TEXTURE_RECTANGLE_ARB as valid source_id target
261*8975f5c5SAndroid Build Coastguard Worker    19/6/2015   Add arguments unpack_flip_y, unpack_premultiply_alpha, and
262*8975f5c5SAndroid Build Coastguard Worker                unpack_unmultiply_alpha to both commands.
263*8975f5c5SAndroid Build Coastguard Worker    4/1/2016    Removed the argument target.
264*8975f5c5SAndroid Build Coastguard Worker    4/1/2016    Added TEXTURE_RECTANGLE_ARB as valid dest_id target.
265*8975f5c5SAndroid Build Coastguard Worker    19/12/2016  Supported more ES 3.0 formats.
266*8975f5c5SAndroid Build Coastguard Worker    18/1/2017   Supported source_level and dest_level.
267*8975f5c5SAndroid Build Coastguard Worker    19/1/2017   Added TEXTURE_CUBE_MAP as valid dest_id target.
268*8975f5c5SAndroid Build Coastguard Worker    24/3/2017   Clean up naming and move formats into tables.
269