Tizen 2.1 base
[sdk/emulator/qemu.git] / gl / mesa / src / mesa / main / texcompress_etc.c
1 /*
2  * Copyright (C) 2011 LunarG, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23
24 /**
25  * \file texcompress_etc.c
26  * GL_OES_compressed_ETC1_RGB8_texture support.
27  */
28
29
30 #include "mfeatures.h"
31 #include "texcompress.h"
32 #include "texcompress_etc.h"
33 #include "texstore.h"
34 #include "macros.h"
35 #include "swrast/s_context.h"
36
37 GLboolean
38 _mesa_texstore_etc1_rgb8(TEXSTORE_PARAMS)
39 {
40    /* GL_ETC1_RGB8_OES is only valid in glCompressedTexImage2D */
41    ASSERT(0);
42
43    return GL_FALSE;
44 }
45
46 /* define etc1_parse_block and etc. */
47 #define UINT8_TYPE GLubyte
48 #define TAG(x) x
49 #include "texcompress_etc_tmp.h"
50 #undef TAG
51 #undef UINT8_TYPE
52
53 void
54 _mesa_fetch_texel_2d_f_etc1_rgb8(const struct swrast_texture_image *texImage,
55                                  GLint i, GLint j, GLint k, GLfloat *texel)
56 {
57    struct etc1_block block;
58    GLubyte dst[3];
59    const GLubyte *src;
60
61    src = (const GLubyte *) texImage->Map +
62       (((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
63
64    etc1_parse_block(&block, src);
65    etc1_fetch_texel(&block, i % 4, j % 4, dst);
66
67    texel[RCOMP] = UBYTE_TO_FLOAT(dst[0]);
68    texel[GCOMP] = UBYTE_TO_FLOAT(dst[1]);
69    texel[BCOMP] = UBYTE_TO_FLOAT(dst[2]);
70    texel[ACOMP] = 1.0f;
71 }