xref: /aosp_15_r20/external/mesa3d/src/mesa/main/texcompress_bptc.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2014 Intel Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21*61046927SAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker /**
25*61046927SAndroid Build Coastguard Worker  * \file texcompress_bptc.c
26*61046927SAndroid Build Coastguard Worker  * GL_ARB_texture_compression_bptc support.
27*61046927SAndroid Build Coastguard Worker  */
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
30*61046927SAndroid Build Coastguard Worker #include "texcompress.h"
31*61046927SAndroid Build Coastguard Worker #include "texcompress_bptc.h"
32*61046927SAndroid Build Coastguard Worker #include "util/format/texcompress_bptc_tmp.h"
33*61046927SAndroid Build Coastguard Worker #include "texstore.h"
34*61046927SAndroid Build Coastguard Worker #include "image.h"
35*61046927SAndroid Build Coastguard Worker #include "mtypes.h"
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_rgb_float(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLfloat * texel,bool is_signed)38*61046927SAndroid Build Coastguard Worker fetch_bptc_rgb_float(const GLubyte *map,
39*61046927SAndroid Build Coastguard Worker                      GLint rowStride, GLint i, GLint j,
40*61046927SAndroid Build Coastguard Worker                      GLfloat *texel,
41*61046927SAndroid Build Coastguard Worker                      bool is_signed)
42*61046927SAndroid Build Coastguard Worker {
43*61046927SAndroid Build Coastguard Worker    const GLubyte *block;
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker    block = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker    fetch_rgb_float_from_block(block, texel, (i % 4) + (j % 4) * 4, is_signed);
48*61046927SAndroid Build Coastguard Worker }
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_rgb_signed_float(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLfloat * texel)51*61046927SAndroid Build Coastguard Worker fetch_bptc_rgb_signed_float(const GLubyte *map,
52*61046927SAndroid Build Coastguard Worker                             GLint rowStride, GLint i, GLint j,
53*61046927SAndroid Build Coastguard Worker                             GLfloat *texel)
54*61046927SAndroid Build Coastguard Worker {
55*61046927SAndroid Build Coastguard Worker    fetch_bptc_rgb_float(map, rowStride, i, j, texel, true);
56*61046927SAndroid Build Coastguard Worker }
57*61046927SAndroid Build Coastguard Worker 
58*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_rgb_unsigned_float(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLfloat * texel)59*61046927SAndroid Build Coastguard Worker fetch_bptc_rgb_unsigned_float(const GLubyte *map,
60*61046927SAndroid Build Coastguard Worker                               GLint rowStride, GLint i, GLint j,
61*61046927SAndroid Build Coastguard Worker                               GLfloat *texel)
62*61046927SAndroid Build Coastguard Worker {
63*61046927SAndroid Build Coastguard Worker    fetch_bptc_rgb_float(map, rowStride, i, j, texel, false);
64*61046927SAndroid Build Coastguard Worker }
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_rgba_unorm_bytes(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLubyte * texel)67*61046927SAndroid Build Coastguard Worker fetch_bptc_rgba_unorm_bytes(const GLubyte *map,
68*61046927SAndroid Build Coastguard Worker                             GLint rowStride, GLint i, GLint j,
69*61046927SAndroid Build Coastguard Worker                             GLubyte *texel)
70*61046927SAndroid Build Coastguard Worker {
71*61046927SAndroid Build Coastguard Worker    const GLubyte *block;
72*61046927SAndroid Build Coastguard Worker 
73*61046927SAndroid Build Coastguard Worker    block = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
74*61046927SAndroid Build Coastguard Worker 
75*61046927SAndroid Build Coastguard Worker    fetch_rgba_unorm_from_block(block, texel, (i % 4) + (j % 4) * 4);
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_rgba_unorm(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLfloat * texel)79*61046927SAndroid Build Coastguard Worker fetch_bptc_rgba_unorm(const GLubyte *map,
80*61046927SAndroid Build Coastguard Worker                       GLint rowStride, GLint i, GLint j,
81*61046927SAndroid Build Coastguard Worker                       GLfloat *texel)
82*61046927SAndroid Build Coastguard Worker {
83*61046927SAndroid Build Coastguard Worker    GLubyte texel_bytes[4];
84*61046927SAndroid Build Coastguard Worker 
85*61046927SAndroid Build Coastguard Worker    fetch_bptc_rgba_unorm_bytes(map, rowStride, i, j, texel_bytes);
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker    texel[RCOMP] = UBYTE_TO_FLOAT(texel_bytes[0]);
88*61046927SAndroid Build Coastguard Worker    texel[GCOMP] = UBYTE_TO_FLOAT(texel_bytes[1]);
89*61046927SAndroid Build Coastguard Worker    texel[BCOMP] = UBYTE_TO_FLOAT(texel_bytes[2]);
90*61046927SAndroid Build Coastguard Worker    texel[ACOMP] = UBYTE_TO_FLOAT(texel_bytes[3]);
91*61046927SAndroid Build Coastguard Worker }
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker static void
fetch_bptc_srgb_alpha_unorm(const GLubyte * map,GLint rowStride,GLint i,GLint j,GLfloat * texel)94*61046927SAndroid Build Coastguard Worker fetch_bptc_srgb_alpha_unorm(const GLubyte *map,
95*61046927SAndroid Build Coastguard Worker                             GLint rowStride, GLint i, GLint j,
96*61046927SAndroid Build Coastguard Worker                             GLfloat *texel)
97*61046927SAndroid Build Coastguard Worker {
98*61046927SAndroid Build Coastguard Worker    GLubyte texel_bytes[4];
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker    fetch_bptc_rgba_unorm_bytes(map, rowStride, i, j, texel_bytes);
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker    texel[RCOMP] = util_format_srgb_8unorm_to_linear_float(texel_bytes[0]);
103*61046927SAndroid Build Coastguard Worker    texel[GCOMP] = util_format_srgb_8unorm_to_linear_float(texel_bytes[1]);
104*61046927SAndroid Build Coastguard Worker    texel[BCOMP] = util_format_srgb_8unorm_to_linear_float(texel_bytes[2]);
105*61046927SAndroid Build Coastguard Worker    texel[ACOMP] = UBYTE_TO_FLOAT(texel_bytes[3]);
106*61046927SAndroid Build Coastguard Worker }
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker compressed_fetch_func
_mesa_get_bptc_fetch_func(mesa_format format)109*61046927SAndroid Build Coastguard Worker _mesa_get_bptc_fetch_func(mesa_format format)
110*61046927SAndroid Build Coastguard Worker {
111*61046927SAndroid Build Coastguard Worker    switch (format) {
112*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_RGBA_UNORM:
113*61046927SAndroid Build Coastguard Worker       return fetch_bptc_rgba_unorm;
114*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM:
115*61046927SAndroid Build Coastguard Worker       return fetch_bptc_srgb_alpha_unorm;
116*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
117*61046927SAndroid Build Coastguard Worker       return fetch_bptc_rgb_signed_float;
118*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
119*61046927SAndroid Build Coastguard Worker       return fetch_bptc_rgb_unsigned_float;
120*61046927SAndroid Build Coastguard Worker    default:
121*61046927SAndroid Build Coastguard Worker       return NULL;
122*61046927SAndroid Build Coastguard Worker    }
123*61046927SAndroid Build Coastguard Worker }
124*61046927SAndroid Build Coastguard Worker 
125*61046927SAndroid Build Coastguard Worker GLboolean
_mesa_texstore_bptc_rgba_unorm(TEXSTORE_PARAMS)126*61046927SAndroid Build Coastguard Worker _mesa_texstore_bptc_rgba_unorm(TEXSTORE_PARAMS)
127*61046927SAndroid Build Coastguard Worker {
128*61046927SAndroid Build Coastguard Worker    const GLubyte *pixels;
129*61046927SAndroid Build Coastguard Worker    const GLubyte *tempImage = NULL;
130*61046927SAndroid Build Coastguard Worker    int rowstride;
131*61046927SAndroid Build Coastguard Worker 
132*61046927SAndroid Build Coastguard Worker    if (srcFormat != GL_RGBA ||
133*61046927SAndroid Build Coastguard Worker        srcType != GL_UNSIGNED_BYTE ||
134*61046927SAndroid Build Coastguard Worker        ctx->_ImageTransferState ||
135*61046927SAndroid Build Coastguard Worker        srcPacking->SwapBytes) {
136*61046927SAndroid Build Coastguard Worker       /* convert image to RGBA/ubyte */
137*61046927SAndroid Build Coastguard Worker       GLubyte *tempImageSlices[1];
138*61046927SAndroid Build Coastguard Worker       int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte);
139*61046927SAndroid Build Coastguard Worker       tempImage = malloc(srcWidth * srcHeight * 4 * sizeof(GLubyte));
140*61046927SAndroid Build Coastguard Worker       if (!tempImage)
141*61046927SAndroid Build Coastguard Worker          return GL_FALSE; /* out of memory */
142*61046927SAndroid Build Coastguard Worker       tempImageSlices[0] = (GLubyte *) tempImage;
143*61046927SAndroid Build Coastguard Worker       _mesa_texstore(ctx, dims,
144*61046927SAndroid Build Coastguard Worker                      baseInternalFormat,
145*61046927SAndroid Build Coastguard Worker #if UTIL_ARCH_LITTLE_ENDIAN
146*61046927SAndroid Build Coastguard Worker                      MESA_FORMAT_R8G8B8A8_UNORM,
147*61046927SAndroid Build Coastguard Worker #else
148*61046927SAndroid Build Coastguard Worker                      MESA_FORMAT_A8B8G8R8_UNORM,
149*61046927SAndroid Build Coastguard Worker #endif
150*61046927SAndroid Build Coastguard Worker                      rgbaRowStride, tempImageSlices,
151*61046927SAndroid Build Coastguard Worker                      srcWidth, srcHeight, srcDepth,
152*61046927SAndroid Build Coastguard Worker                      srcFormat, srcType, srcAddr,
153*61046927SAndroid Build Coastguard Worker                      srcPacking);
154*61046927SAndroid Build Coastguard Worker 
155*61046927SAndroid Build Coastguard Worker       pixels = tempImage;
156*61046927SAndroid Build Coastguard Worker       rowstride = srcWidth * 4;
157*61046927SAndroid Build Coastguard Worker    } else {
158*61046927SAndroid Build Coastguard Worker       pixels = _mesa_image_address2d(srcPacking, srcAddr, srcWidth, srcHeight,
159*61046927SAndroid Build Coastguard Worker                                      srcFormat, srcType, 0, 0);
160*61046927SAndroid Build Coastguard Worker       rowstride = _mesa_image_row_stride(srcPacking, srcWidth,
161*61046927SAndroid Build Coastguard Worker                                          srcFormat, srcType);
162*61046927SAndroid Build Coastguard Worker    }
163*61046927SAndroid Build Coastguard Worker 
164*61046927SAndroid Build Coastguard Worker    compress_rgba_unorm(srcWidth, srcHeight,
165*61046927SAndroid Build Coastguard Worker                        pixels, rowstride,
166*61046927SAndroid Build Coastguard Worker                        dstSlices[0], dstRowStride);
167*61046927SAndroid Build Coastguard Worker 
168*61046927SAndroid Build Coastguard Worker    free((void *) tempImage);
169*61046927SAndroid Build Coastguard Worker 
170*61046927SAndroid Build Coastguard Worker    return GL_TRUE;
171*61046927SAndroid Build Coastguard Worker }
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker static GLboolean
texstore_bptc_rgb_float(TEXSTORE_PARAMS,bool is_signed)174*61046927SAndroid Build Coastguard Worker texstore_bptc_rgb_float(TEXSTORE_PARAMS,
175*61046927SAndroid Build Coastguard Worker                         bool is_signed)
176*61046927SAndroid Build Coastguard Worker {
177*61046927SAndroid Build Coastguard Worker    const float *pixels;
178*61046927SAndroid Build Coastguard Worker    const float *tempImage = NULL;
179*61046927SAndroid Build Coastguard Worker    int rowstride;
180*61046927SAndroid Build Coastguard Worker 
181*61046927SAndroid Build Coastguard Worker    if (srcFormat != GL_RGB ||
182*61046927SAndroid Build Coastguard Worker        srcType != GL_FLOAT ||
183*61046927SAndroid Build Coastguard Worker        ctx->_ImageTransferState ||
184*61046927SAndroid Build Coastguard Worker        srcPacking->SwapBytes) {
185*61046927SAndroid Build Coastguard Worker       /* convert image to RGB/float */
186*61046927SAndroid Build Coastguard Worker       GLfloat *tempImageSlices[1];
187*61046927SAndroid Build Coastguard Worker       int rgbRowStride = 3 * srcWidth * sizeof(GLfloat);
188*61046927SAndroid Build Coastguard Worker       tempImage = malloc(srcWidth * srcHeight * 3 * sizeof(GLfloat));
189*61046927SAndroid Build Coastguard Worker       if (!tempImage)
190*61046927SAndroid Build Coastguard Worker          return GL_FALSE; /* out of memory */
191*61046927SAndroid Build Coastguard Worker       tempImageSlices[0] = (GLfloat *) tempImage;
192*61046927SAndroid Build Coastguard Worker       _mesa_texstore(ctx, dims,
193*61046927SAndroid Build Coastguard Worker                      baseInternalFormat,
194*61046927SAndroid Build Coastguard Worker                      MESA_FORMAT_RGB_FLOAT32,
195*61046927SAndroid Build Coastguard Worker                      rgbRowStride, (GLubyte **)tempImageSlices,
196*61046927SAndroid Build Coastguard Worker                      srcWidth, srcHeight, srcDepth,
197*61046927SAndroid Build Coastguard Worker                      srcFormat, srcType, srcAddr,
198*61046927SAndroid Build Coastguard Worker                      srcPacking);
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker       pixels = tempImage;
201*61046927SAndroid Build Coastguard Worker       rowstride = srcWidth * sizeof(float) * 3;
202*61046927SAndroid Build Coastguard Worker    } else {
203*61046927SAndroid Build Coastguard Worker       pixels = _mesa_image_address2d(srcPacking, srcAddr, srcWidth, srcHeight,
204*61046927SAndroid Build Coastguard Worker                                      srcFormat, srcType, 0, 0);
205*61046927SAndroid Build Coastguard Worker       rowstride = _mesa_image_row_stride(srcPacking, srcWidth,
206*61046927SAndroid Build Coastguard Worker                                          srcFormat, srcType);
207*61046927SAndroid Build Coastguard Worker    }
208*61046927SAndroid Build Coastguard Worker 
209*61046927SAndroid Build Coastguard Worker    compress_rgb_float(srcWidth, srcHeight,
210*61046927SAndroid Build Coastguard Worker                       pixels, rowstride,
211*61046927SAndroid Build Coastguard Worker                       dstSlices[0], dstRowStride,
212*61046927SAndroid Build Coastguard Worker                       is_signed);
213*61046927SAndroid Build Coastguard Worker 
214*61046927SAndroid Build Coastguard Worker    free((void *) tempImage);
215*61046927SAndroid Build Coastguard Worker 
216*61046927SAndroid Build Coastguard Worker    return GL_TRUE;
217*61046927SAndroid Build Coastguard Worker }
218*61046927SAndroid Build Coastguard Worker 
219*61046927SAndroid Build Coastguard Worker GLboolean
_mesa_texstore_bptc_rgb_signed_float(TEXSTORE_PARAMS)220*61046927SAndroid Build Coastguard Worker _mesa_texstore_bptc_rgb_signed_float(TEXSTORE_PARAMS)
221*61046927SAndroid Build Coastguard Worker {
222*61046927SAndroid Build Coastguard Worker    assert(dstFormat == MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT);
223*61046927SAndroid Build Coastguard Worker 
224*61046927SAndroid Build Coastguard Worker    return texstore_bptc_rgb_float(ctx, dims, baseInternalFormat,
225*61046927SAndroid Build Coastguard Worker                                   dstFormat, dstRowStride, dstSlices,
226*61046927SAndroid Build Coastguard Worker                                   srcWidth, srcHeight, srcDepth,
227*61046927SAndroid Build Coastguard Worker                                   srcFormat, srcType,
228*61046927SAndroid Build Coastguard Worker                                   srcAddr, srcPacking,
229*61046927SAndroid Build Coastguard Worker                                   true /* signed */);
230*61046927SAndroid Build Coastguard Worker }
231*61046927SAndroid Build Coastguard Worker 
232*61046927SAndroid Build Coastguard Worker GLboolean
_mesa_texstore_bptc_rgb_unsigned_float(TEXSTORE_PARAMS)233*61046927SAndroid Build Coastguard Worker _mesa_texstore_bptc_rgb_unsigned_float(TEXSTORE_PARAMS)
234*61046927SAndroid Build Coastguard Worker {
235*61046927SAndroid Build Coastguard Worker    assert(dstFormat == MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT);
236*61046927SAndroid Build Coastguard Worker 
237*61046927SAndroid Build Coastguard Worker    return texstore_bptc_rgb_float(ctx, dims, baseInternalFormat,
238*61046927SAndroid Build Coastguard Worker                                   dstFormat, dstRowStride, dstSlices,
239*61046927SAndroid Build Coastguard Worker                                   srcWidth, srcHeight, srcDepth,
240*61046927SAndroid Build Coastguard Worker                                   srcFormat, srcType,
241*61046927SAndroid Build Coastguard Worker                                   srcAddr, srcPacking,
242*61046927SAndroid Build Coastguard Worker                                   false /* unsigned */);
243*61046927SAndroid Build Coastguard Worker }
244*61046927SAndroid Build Coastguard Worker 
245*61046927SAndroid Build Coastguard Worker void
_mesa_unpack_bptc(uint8_t * dst_row,unsigned dst_stride,const uint8_t * src_row,unsigned src_stride,unsigned src_width,unsigned src_height,mesa_format format)246*61046927SAndroid Build Coastguard Worker _mesa_unpack_bptc(uint8_t *dst_row,
247*61046927SAndroid Build Coastguard Worker                   unsigned dst_stride,
248*61046927SAndroid Build Coastguard Worker                   const uint8_t *src_row,
249*61046927SAndroid Build Coastguard Worker                   unsigned src_stride,
250*61046927SAndroid Build Coastguard Worker                   unsigned src_width,
251*61046927SAndroid Build Coastguard Worker                   unsigned src_height,
252*61046927SAndroid Build Coastguard Worker                   mesa_format format)
253*61046927SAndroid Build Coastguard Worker {
254*61046927SAndroid Build Coastguard Worker    switch (format) {
255*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
256*61046927SAndroid Build Coastguard Worker       decompress_rgb_fp16(src_width, src_height,
257*61046927SAndroid Build Coastguard Worker                           src_row, src_stride,
258*61046927SAndroid Build Coastguard Worker                           (uint16_t *)dst_row, dst_stride,
259*61046927SAndroid Build Coastguard Worker                            true);
260*61046927SAndroid Build Coastguard Worker       break;
261*61046927SAndroid Build Coastguard Worker 
262*61046927SAndroid Build Coastguard Worker    case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
263*61046927SAndroid Build Coastguard Worker       decompress_rgb_fp16(src_width, src_height,
264*61046927SAndroid Build Coastguard Worker                           src_row, src_stride,
265*61046927SAndroid Build Coastguard Worker                           (uint16_t *)dst_row, dst_stride,
266*61046927SAndroid Build Coastguard Worker                           false);
267*61046927SAndroid Build Coastguard Worker       break;
268*61046927SAndroid Build Coastguard Worker 
269*61046927SAndroid Build Coastguard Worker    default:
270*61046927SAndroid Build Coastguard Worker       decompress_rgba_unorm(src_width, src_height,
271*61046927SAndroid Build Coastguard Worker                             src_row, src_stride,
272*61046927SAndroid Build Coastguard Worker                             dst_row, dst_stride);
273*61046927SAndroid Build Coastguard Worker       break;
274*61046927SAndroid Build Coastguard Worker    }
275*61046927SAndroid Build Coastguard Worker }
276