/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */ /************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ #include "u_format.h" #include "u_format_s3tc.h" #include "u_format_rgtc.h" #include "u_format_latc.h" #include "u_format_etc.h" #include "u_format_bptc.h" #include "pipe/p_compiler.h" #include "u_math.h" #include "u_half.h" #include "u_format.h" #include "u_format_other.h" #include "util/format_srgb.h" #include "u_format_yuv.h" #include "u_format_zs.h" union util_format_none { uint8_t value; struct { uint8_t r; } chan; }; static INLINE void util_format_none_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_none_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[0], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_none_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_none_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_none_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b8g8r8a8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t b; uint8_t g; uint8_t r; uint8_t a; #else uint8_t b; uint8_t g; uint8_t r; uint8_t a; #endif } chan; }; static INLINE void util_format_b8g8r8a8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8a8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[2])) << 24; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= ((float_to_ubyte(src[0])) & 0xff) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[2])) & 0xff; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= ((float_to_ubyte(src[0])) & 0xff) << 16; value |= (float_to_ubyte(src[3])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b8g8r8a8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_b8g8r8a8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8a8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[2]) << 24; value |= ((src[1]) & 0xff) << 16; value |= ((src[0]) & 0xff) << 8; value |= (src[3]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[2]) & 0xff; value |= ((src[1]) & 0xff) << 8; value |= ((src[0]) & 0xff) << 16; value |= (src[3]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b8g8r8x8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t b; uint8_t g; uint8_t r; uint8_t x; #else uint8_t b; uint8_t g; uint8_t r; uint8_t x; #endif } chan; }; static INLINE void util_format_b8g8r8x8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8x8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[2])) << 24; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= ((float_to_ubyte(src[0])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[2])) & 0xff; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= ((float_to_ubyte(src[0])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b8g8r8x8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b8g8r8x8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8x8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[2]) << 24; value |= ((src[1]) & 0xff) << 16; value |= ((src[0]) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[2]) & 0xff; value |= ((src[1]) & 0xff) << 8; value |= ((src[0]) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8r8g8b8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t a; uint8_t r; uint8_t g; uint8_t b; #else uint8_t a; uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_a8r8g8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8g8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[3])) << 24; value |= ((float_to_ubyte(src[0])) & 0xff) << 16; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= (float_to_ubyte(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[3])) & 0xff; value |= ((float_to_ubyte(src[0])) & 0xff) << 8; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= (float_to_ubyte(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8r8g8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_a8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[3]) << 24; value |= ((src[0]) & 0xff) << 16; value |= ((src[1]) & 0xff) << 8; value |= (src[2]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[3]) & 0xff; value |= ((src[0]) & 0xff) << 8; value |= ((src[1]) & 0xff) << 16; value |= (src[2]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_x8r8g8b8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t x; uint8_t r; uint8_t g; uint8_t b; #else uint8_t x; uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_x8r8g8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8r8g8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((float_to_ubyte(src[0])) & 0xff) << 16; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= (float_to_ubyte(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((float_to_ubyte(src[0])) & 0xff) << 8; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= (float_to_ubyte(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_x8r8g8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_x8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((src[0]) & 0xff) << 16; value |= ((src[1]) & 0xff) << 8; value |= (src[2]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((src[0]) & 0xff) << 8; value |= ((src[1]) & 0xff) << 16; value |= (src[2]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8b8g8r8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t a; uint8_t b; uint8_t g; uint8_t r; #else uint8_t a; uint8_t b; uint8_t g; uint8_t r; #endif } chan; }; static INLINE void util_format_a8b8g8r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8b8g8r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[3])) << 24; value |= ((float_to_ubyte(src[2])) & 0xff) << 16; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= (float_to_ubyte(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[3])) & 0xff; value |= ((float_to_ubyte(src[2])) & 0xff) << 8; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= (float_to_ubyte(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8b8g8r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_a8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[3]) << 24; value |= ((src[2]) & 0xff) << 16; value |= ((src[1]) & 0xff) << 8; value |= (src[0]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[3]) & 0xff; value |= ((src[2]) & 0xff) << 8; value |= ((src[1]) & 0xff) << 16; value |= (src[0]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_x8b8g8r8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t x; uint8_t b; uint8_t g; uint8_t r; #else uint8_t x; uint8_t b; uint8_t g; uint8_t r; #endif } chan; }; static INLINE void util_format_x8b8g8r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8b8g8r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((float_to_ubyte(src[2])) & 0xff) << 16; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= (float_to_ubyte(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((float_to_ubyte(src[2])) & 0xff) << 8; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= (float_to_ubyte(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_x8b8g8r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_x8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((src[2]) & 0xff) << 16; value |= ((src[1]) & 0xff) << 8; value |= (src[0]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((src[2]) & 0xff) << 8; value |= ((src[1]) & 0xff) << 16; value |= (src[0]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8x8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t x; #else uint8_t r; uint8_t g; uint8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8g8b8x8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[0])) << 24; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= ((float_to_ubyte(src[2])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[0])) & 0xff; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= ((float_to_ubyte(src[2])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8x8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8x8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[0]) << 24; value |= ((src[1]) & 0xff) << 16; value |= ((src[2]) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[0]) & 0xff; value |= ((src[1]) & 0xff) << 8; value |= ((src[2]) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b5g5r5x1_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:5; unsigned g:5; unsigned r:5; unsigned x:1; #else unsigned b:5; unsigned g:5; unsigned r:5; unsigned x:1; #endif } chan; }; static INLINE void util_format_b5g5r5x1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g5r5x1_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) << 11; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x1f)) & 0x1f) << 6; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) & 0x1f) << 1; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) & 0x1f; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x1f)) & 0x1f) << 5; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) & 0x1f) << 10; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b5g5r5x1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b5g5r5x1_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x1f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x1f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g5r5x1_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) << 11; value |= (((uint16_t)(src[1] >> 3)) & 0x1f) << 6; value |= (((uint16_t)(src[0] >> 3)) & 0x1f) << 1; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) & 0x1f; value |= (((uint16_t)(src[1] >> 3)) & 0x1f) << 5; value |= (((uint16_t)(src[0] >> 3)) & 0x1f) << 10; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b5g5r5a1_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:5; unsigned g:5; unsigned r:5; unsigned a:1; #else unsigned b:5; unsigned g:5; unsigned r:5; unsigned a:1; #endif } chan; }; static INLINE void util_format_b5g5r5a1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; a = (value) & 0x1; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; a = value >> 15; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g5r5a1_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) << 11; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x1f)) & 0x1f) << 6; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) & 0x1f) << 1; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0x1)) & 0x1; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) & 0x1f; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x1f)) & 0x1f) << 5; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) & 0x1f) << 10; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0x1)) << 15; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b5g5r5a1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; a = (value) & 0x1; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; a = value >> 15; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x1f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif } static INLINE void util_format_b5g5r5a1_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 11; g = (value >> 6) & 0x1f; r = (value >> 1) & 0x1f; a = (value) & 0x1; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x1f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x1); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0x1f; g = (value >> 5) & 0x1f; r = (value >> 10) & 0x1f; a = value >> 15; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x1f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x1); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g5r5a1_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) << 11; value |= (((uint16_t)(src[1] >> 3)) & 0x1f) << 6; value |= (((uint16_t)(src[0] >> 3)) & 0x1f) << 1; value |= ((uint16_t)(src[3] >> 7)) & 0x1; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) & 0x1f; value |= (((uint16_t)(src[1] >> 3)) & 0x1f) << 5; value |= (((uint16_t)(src[0] >> 3)) & 0x1f) << 10; value |= ((uint16_t)(src[3] >> 7)) << 15; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b4g4r4a4_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:4; unsigned g:4; unsigned r:4; unsigned a:4; #else unsigned b:4; unsigned g:4; unsigned r:4; unsigned a:4; #endif } chan; }; static INLINE void util_format_b4g4r4a4_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; a = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; a = value >> 12; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b4g4r4a4_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xf)) << 12; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xf)) & 0xf) << 8; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf) << 4; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) & 0xf; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xf)) & 0xf; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xf)) & 0xf) << 4; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf) << 8; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) << 12; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b4g4r4a4_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; a = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; a = value >> 12; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif } static INLINE void util_format_b4g4r4a4_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; a = (value) & 0xf; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0xf); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; uint16_t a; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; a = value >> 12; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0xf); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b4g4r4a4_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)(src[2] >> 4)) << 12; value |= (((uint16_t)(src[1] >> 4)) & 0xf) << 8; value |= (((uint16_t)(src[0] >> 4)) & 0xf) << 4; value |= ((uint16_t)(src[3] >> 4)) & 0xf; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)(src[2] >> 4)) & 0xf; value |= (((uint16_t)(src[1] >> 4)) & 0xf) << 4; value |= (((uint16_t)(src[0] >> 4)) & 0xf) << 8; value |= ((uint16_t)(src[3] >> 4)) << 12; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b4g4r4x4_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:4; unsigned g:4; unsigned r:4; unsigned x:4; #else unsigned b:4; unsigned g:4; unsigned r:4; unsigned x:4; #endif } chan; }; static INLINE void util_format_b4g4r4x4_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b4g4r4x4_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xf)) << 12; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xf)) & 0xf) << 8; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf) << 4; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xf)) & 0xf; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xf)) & 0xf) << 4; value |= (((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b4g4r4x4_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0xf)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b4g4r4x4_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 12; g = (value >> 8) & 0xf; r = (value >> 4) & 0xf; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0xf); /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0xf; g = (value >> 4) & 0xf; r = (value >> 8) & 0xf; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0xf); /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b4g4r4x4_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)(src[2] >> 4)) << 12; value |= (((uint16_t)(src[1] >> 4)) & 0xf) << 8; value |= (((uint16_t)(src[0] >> 4)) & 0xf) << 4; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)(src[2] >> 4)) & 0xf; value |= (((uint16_t)(src[1] >> 4)) & 0xf) << 4; value |= (((uint16_t)(src[0] >> 4)) & 0xf) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b5g6r5_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:5; unsigned g:6; unsigned r:5; #else unsigned b:5; unsigned g:6; unsigned r:5; #endif } chan; }; static INLINE void util_format_b5g6r5_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x3f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x3f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g6r5_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) << 11; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x3f)) & 0x3f) << 5; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) & 0x1f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x1f)) & 0x1f; value |= (((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0x3f)) & 0x3f) << 5; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0x1f)) << 11; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b5g6r5_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x3f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = (float)(r * (1.0f/0x1f)); /* r */ dst[1] = (float)(g * (1.0f/0x3f)); /* g */ dst[2] = (float)(b * (1.0f/0x1f)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b5g6r5_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x3f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x1f); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x3f); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x1f); /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g6r5_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) << 11; value |= (((uint16_t)(src[1] >> 2)) & 0x3f) << 5; value |= ((uint16_t)(src[0] >> 3)) & 0x1f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint16_t)(src[2] >> 3)) & 0x1f; value |= (((uint16_t)(src[1] >> 2)) & 0x3f) << 5; value |= ((uint16_t)(src[0] >> 3)) << 11; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10a2_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #else unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_r10g10b10a2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) << 22; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 12; value |= (((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff) << 2; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 10; value |= (((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff) << 20; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10a2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif } static INLINE void util_format_r10g10b10a2_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) & 0x3ff) << 2; value |= ((uint32_t)(src[3] >> 6)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) & 0x3ff) << 20; value |= ((uint32_t)(src[3] >> 6)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10a2_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #else unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_b10g10r10a2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) << 22; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 12; value |= (((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff) << 2; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 10; value |= (((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff) << 20; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10a2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif } static INLINE void util_format_b10g10r10a2_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) & 0x3ff) << 2; value |= ((uint32_t)(src[3] >> 6)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) & 0x3ff) << 20; value |= ((uint32_t)(src[3] >> 6)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b2g3r3_unorm { uint8_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:2; unsigned g:3; unsigned r:3; #else unsigned b:2; unsigned g:3; unsigned r:3; #endif } chan; }; static INLINE void util_format_b2g3r3_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = value >> 6; g = (value >> 3) & 0x7; r = (value) & 0x7; dst[0] = (float)(r * (1.0f/0x7)); /* r */ dst[1] = (float)(g * (1.0f/0x7)); /* g */ dst[2] = (float)(b * (1.0f/0x3)); /* b */ dst[3] = 1; /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = (value) & 0x3; g = (value >> 2) & 0x7; r = value >> 5; dst[0] = (float)(r * (1.0f/0x7)); /* r */ dst[1] = (float)(g * (1.0f/0x7)); /* g */ dst[2] = (float)(b * (1.0f/0x3)); /* b */ dst[3] = 1; /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b2g3r3_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[2], 0, 1) * 0x3)) << 6; value |= (((uint8_t)util_iround(CLAMP(src[1], 0, 1) * 0x7)) & 0x7) << 3; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0x7)) & 0x7; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[2], 0, 1) * 0x3)) & 0x3; value |= (((uint8_t)util_iround(CLAMP(src[1], 0, 1) * 0x7)) & 0x7) << 2; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0x7)) << 5; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b2g3r3_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = value >> 6; g = (value >> 3) & 0x7; r = (value) & 0x7; dst[0] = (float)(r * (1.0f/0x7)); /* r */ dst[1] = (float)(g * (1.0f/0x7)); /* g */ dst[2] = (float)(b * (1.0f/0x3)); /* b */ dst[3] = 1; /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = (value) & 0x3; g = (value >> 2) & 0x7; r = value >> 5; dst[0] = (float)(r * (1.0f/0x7)); /* r */ dst[1] = (float)(g * (1.0f/0x7)); /* g */ dst[2] = (float)(b * (1.0f/0x3)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b2g3r3_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = value >> 6; g = (value >> 3) & 0x7; r = (value) & 0x7; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x7); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x7); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x3); /* b */ dst[3] = 255; /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t b; uint8_t g; uint8_t r; b = (value) & 0x3; g = (value >> 2) & 0x7; r = value >> 5; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0x7); /* r */ dst[1] = (uint8_t)(((uint32_t)g) * 0xff / 0x7); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x3); /* b */ dst[3] = 255; /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b2g3r3_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)(src[2] >> 6)) << 6; value |= (((uint8_t)(src[1] >> 5)) & 0x7) << 3; value |= ((uint8_t)(src[0] >> 5)) & 0x7; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)(src[2] >> 6)) & 0x3; value |= (((uint8_t)(src[1] >> 5)) & 0x7) << 2; value |= ((uint8_t)(src[0] >> 5)) << 5; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8_unorm { uint8_t value; struct { uint8_t rgb; } chan; }; static INLINE void util_format_l8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= float_to_ubyte(src[0]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= src[0]; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8_unorm { uint8_t value; struct { uint8_t a; } chan; }; static INLINE void util_format_a8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= float_to_ubyte(src[3]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ } static INLINE void util_format_a8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= src[3]; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i8_unorm { uint8_t value; struct { uint8_t rgba; } chan; }; static INLINE void util_format_i8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = ubyte_to_float(rgba); /* r */ dst[1] = ubyte_to_float(rgba); /* g */ dst[2] = ubyte_to_float(rgba); /* b */ dst[3] = ubyte_to_float(rgba); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= float_to_ubyte(src[0]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = ubyte_to_float(rgba); /* r */ dst[1] = ubyte_to_float(rgba); /* g */ dst[2] = ubyte_to_float(rgba); /* b */ dst[3] = ubyte_to_float(rgba); /* a */ } static INLINE void util_format_i8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = rgba; /* r */ dst[1] = rgba; /* g */ dst[2] = rgba; /* b */ dst[3] = rgba; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= src[0]; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l4a4_unorm { uint8_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned rgb:4; unsigned a:4; #else unsigned rgb:4; unsigned a:4; #endif } chan; }; static INLINE void util_format_l4a4_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = value >> 4; a = (value) & 0xf; dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = (value) & 0xf; a = value >> 4; dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l4a4_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) << 4; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l4a4_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = value >> 4; a = (value) & 0xf; dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = (value) & 0xf; a = value >> 4; dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif } static INLINE void util_format_l4a4_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = value >> 4; a = (value) & 0xf; dst[0] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t rgb; uint8_t a; rgb = (value) & 0xf; a = value >> 4; dst[0] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)rgb) * 0xff / 0xf); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l4a4_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)(src[0] >> 4)) << 4; value |= ((uint8_t)(src[3] >> 4)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)(src[0] >> 4)) & 0xf; value |= ((uint8_t)(src[3] >> 4)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8a8_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t rgb; uint8_t a; #else uint8_t rgb; uint8_t a; #endif } chan; }; static INLINE void util_format_l8a8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (float_to_ubyte(src[0])) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (float_to_ubyte(src[0])) & 0xff; value |= (float_to_ubyte(src[3])) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8a8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = ubyte_to_float(rgb); /* r */ dst[1] = ubyte_to_float(rgb); /* g */ dst[2] = ubyte_to_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_l8a8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (src[0]) << 8; value |= (src[3]) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (src[0]) & 0xff; value |= (src[3]) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16_unorm { uint16_t value; struct { uint16_t rgb; } chan; }; static INLINE void util_format_l16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (uint8_t)(rgb >> 8); /* r */ dst[1] = (uint8_t)(rgb >> 8); /* g */ dst[2] = (uint8_t)(rgb >> 8); /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a16_unorm { uint16_t value; struct { uint16_t a; } chan; }; static INLINE void util_format_a16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ } static INLINE void util_format_a16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(a >> 8); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i16_unorm { uint16_t value; struct { uint16_t rgba; } chan; }; static INLINE void util_format_i16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (float)(rgba * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgba * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgba * (1.0f/0xffff)); /* b */ dst[3] = (float)(rgba * (1.0f/0xffff)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (float)(rgba * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgba * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgba * (1.0f/0xffff)); /* b */ dst[3] = (float)(rgba * (1.0f/0xffff)); /* a */ } static INLINE void util_format_i16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (uint8_t)(rgba >> 8); /* r */ dst[1] = (uint8_t)(rgba >> 8); /* g */ dst[2] = (uint8_t)(rgba >> 8); /* b */ dst[3] = (uint8_t)(rgba >> 8); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16a16_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t rgb; uint16_t a; #else uint16_t rgb; uint16_t a; #endif } chan; }; static INLINE void util_format_l16a16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) << 16; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) & 0xffff; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16a16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #endif } static INLINE void util_format_l16a16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (uint8_t)(rgb >> 8); /* r */ dst[1] = (uint8_t)(rgb >> 8); /* g */ dst[2] = (uint8_t)(rgb >> 8); /* b */ dst[3] = (uint8_t)(a >> 8); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (uint8_t)(rgb >> 8); /* r */ dst[1] = (uint8_t)(rgb >> 8); /* g */ dst[2] = (uint8_t)(rgb >> 8); /* b */ dst[3] = (uint8_t)(a >> 8); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) << 16; value |= ((uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) & 0xffff; value |= ((uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8_snorm { uint8_t value; struct { int8_t a; } chan; }; static INLINE void util_format_a8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ } static INLINE void util_format_a8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)(src[3] >> 1)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8_snorm { uint8_t value; struct { int8_t rgb; } chan; }; static INLINE void util_format_l8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)(src[0] >> 1)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8a8_snorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t rgb; int8_t a; #else int8_t rgb; int8_t a; #endif } chan; }; static INLINE void util_format_l8a8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 8) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8a8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif } static INLINE void util_format_l8a8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(rgb, 0)) * 0xff / 0x7f); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) << 8) ; value |= (uint16_t)(((int8_t)(src[3] >> 1)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) & 0xff) ; value |= (uint16_t)(((int8_t)(src[3] >> 1)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i8_snorm { uint8_t value; struct { int8_t rgba; } chan; }; static INLINE void util_format_i8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (float)(rgba * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgba * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgba * (1.0f/0x7f)); /* b */ dst[3] = (float)(rgba * (1.0f/0x7f)); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (float)(rgba * (1.0f/0x7f)); /* r */ dst[1] = (float)(rgba * (1.0f/0x7f)); /* g */ dst[2] = (float)(rgba * (1.0f/0x7f)); /* b */ dst[3] = (float)(rgba * (1.0f/0x7f)); /* a */ } static INLINE void util_format_i8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (uint8_t)(((uint32_t)MAX2(rgba, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(rgba, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(rgba, 0)) * 0xff / 0x7f); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(rgba, 0)) * 0xff / 0x7f); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)(src[0] >> 1)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a16_snorm { uint16_t value; struct { int16_t a; } chan; }; static INLINE void util_format_a16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ } static INLINE void util_format_a16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(MAX2(a, 0) >> 7); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16_snorm { uint16_t value; struct { int16_t rgb; } chan; }; static INLINE void util_format_l16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (uint8_t)(MAX2(rgb, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(rgb, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(rgb, 0) >> 7); /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16a16_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t rgb; int16_t a; #else int16_t rgb; int16_t a; #endif } chan; }; static INLINE void util_format_l16a16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) << 16) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) & 0xffff) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16a16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #endif } static INLINE void util_format_l16a16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (uint8_t)(MAX2(rgb, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(rgb, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(rgb, 0) >> 7); /* b */ dst[3] = (uint8_t)(MAX2(a, 0) >> 7); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (uint8_t)(MAX2(rgb, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(rgb, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(rgb, 0) >> 7); /* b */ dst[3] = (uint8_t)(MAX2(a, 0) >> 7); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) << 16) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) & 0xffff) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i16_snorm { uint16_t value; struct { int16_t rgba; } chan; }; static INLINE void util_format_i16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (float)(rgba * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgba * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgba * (1.0f/0x7fff)); /* b */ dst[3] = (float)(rgba * (1.0f/0x7fff)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (float)(rgba * (1.0f/0x7fff)); /* r */ dst[1] = (float)(rgba * (1.0f/0x7fff)); /* g */ dst[2] = (float)(rgba * (1.0f/0x7fff)); /* b */ dst[3] = (float)(rgba * (1.0f/0x7fff)); /* a */ } static INLINE void util_format_i16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (uint8_t)(MAX2(rgba, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(rgba, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(rgba, 0) >> 7); /* b */ dst[3] = (uint8_t)(MAX2(rgba, 0) >> 7); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a16_float { uint16_t value; struct { uint16_t a; } chan; }; static INLINE void util_format_a16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_a16_float pixel; pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ } static INLINE void util_format_a16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_a16_float pixel; pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16_float { uint16_t value; struct { uint16_t rgb; } chan; }; static INLINE void util_format_l16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_l16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_l16_float pixel; pixel.chan.rgb = util_float_to_half(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_l16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_l16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_l16_float pixel; pixel.chan.rgb = util_float_to_half((float)(src[0] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16a16_float { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t rgb; uint16_t a; #else uint16_t rgb; uint16_t a; #endif } chan; }; static INLINE void util_format_l16a16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l16a16_float pixel; pixel.chan.rgb = util_float_to_half(src[0]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_l16a16_float pixel; pixel.chan.rgb = util_float_to_half(src[0]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16a16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgb); /* r */ dst[1] = util_half_to_float(pixel.chan.rgb); /* g */ dst[2] = util_half_to_float(pixel.chan.rgb); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif } static INLINE void util_format_l16a16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #else union util_format_l16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.rgb)); /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l16a16_float pixel; pixel.chan.rgb = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_l16a16_float pixel; pixel.chan.rgb = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i16_float { uint16_t value; struct { uint16_t rgba; } chan; }; static INLINE void util_format_i16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_i16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgba); /* r */ dst[1] = util_half_to_float(pixel.chan.rgba); /* g */ dst[2] = util_half_to_float(pixel.chan.rgba); /* b */ dst[3] = util_half_to_float(pixel.chan.rgba); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_i16_float pixel; pixel.chan.rgba = util_float_to_half(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_i16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.rgba); /* r */ dst[1] = util_half_to_float(pixel.chan.rgba); /* g */ dst[2] = util_half_to_float(pixel.chan.rgba); /* b */ dst[3] = util_half_to_float(pixel.chan.rgba); /* a */ } static INLINE void util_format_i16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_i16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.rgba)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.rgba)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.rgba)); /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.rgba)); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_i16_float pixel; pixel.chan.rgba = util_float_to_half((float)(src[0] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a32_float { uint32_t value; struct { float a; } chan; }; static INLINE void util_format_a32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_a32_float pixel; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ } static INLINE void util_format_a32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_a32_float pixel; pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32_float { uint32_t value; struct { float rgb; } chan; }; static INLINE void util_format_l32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_l32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_l32_float pixel; pixel.chan.rgb = src[0]; memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_l32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_l32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.rgb); /* r */ dst[1] = float_to_ubyte(pixel.chan.rgb); /* g */ dst[2] = float_to_ubyte(pixel.chan.rgb); /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_l32_float pixel; pixel.chan.rgb = ubyte_to_float(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32a32_float { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN float rgb; float a; #else float rgb; float a; #endif } chan; }; static INLINE void util_format_l32a32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_float pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_float pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_l32a32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.rgb); /* r */ dst[1] = float_to_ubyte(pixel.chan.rgb); /* g */ dst[2] = float_to_ubyte(pixel.chan.rgb); /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #else union util_format_l32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.rgb); /* r */ dst[1] = float_to_ubyte(pixel.chan.rgb); /* g */ dst[2] = float_to_ubyte(pixel.chan.rgb); /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_float pixel; pixel.chan.rgb = ubyte_to_float(src[0]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_float pixel; pixel.chan.rgb = ubyte_to_float(src[0]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i32_float { uint32_t value; struct { float rgba; } chan; }; static INLINE void util_format_i32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_i32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgba; /* r */ dst[1] = pixel.chan.rgba; /* g */ dst[2] = pixel.chan.rgba; /* b */ dst[3] = pixel.chan.rgba; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_i32_float pixel; pixel.chan.rgba = src[0]; memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_i32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgba; /* r */ dst[1] = pixel.chan.rgba; /* g */ dst[2] = pixel.chan.rgba; /* b */ dst[3] = pixel.chan.rgba; /* a */ } static INLINE void util_format_i32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_i32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.rgba); /* r */ dst[1] = float_to_ubyte(pixel.chan.rgba); /* g */ dst[2] = float_to_ubyte(pixel.chan.rgba); /* b */ dst[3] = float_to_ubyte(pixel.chan.rgba); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_i32_float pixel; pixel.chan.rgba = ubyte_to_float(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8_srgb { uint8_t value; struct { uint8_t rgb; } chan; }; static INLINE void util_format_l8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= util_format_linear_float_to_srgb_8unorm(src[0]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= util_format_linear_to_srgb_8unorm(src[0]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8a8_srgb { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t rgb; uint8_t a; #else uint8_t rgb; uint8_t a; #endif } chan; }; static INLINE void util_format_l8a8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; value |= (float_to_ubyte(src[3])) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8a8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_l8a8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ dst[3] = a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ dst[3] = a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) << 8; value |= (src[3]) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; value |= (src[3]) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_srgb { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; #else uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.chan.r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.chan.g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.chan.r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.chan.g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_srgb pixel; pixel.chan.r = util_format_linear_float_to_srgb_8unorm(src[0]); pixel.chan.g = util_format_linear_float_to_srgb_8unorm(src[1]); pixel.chan.b = util_format_linear_float_to_srgb_8unorm(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_srgb pixel; pixel.chan.r = util_format_linear_float_to_srgb_8unorm(src[0]); pixel.chan.g = util_format_linear_float_to_srgb_8unorm(src[1]); pixel.chan.b = util_format_linear_float_to_srgb_8unorm(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.chan.r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.chan.g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.chan.r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.chan.g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_to_linear_8unorm(pixel.chan.r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(pixel.chan.g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #else union util_format_r8g8b8_srgb pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_format_srgb_to_linear_8unorm(pixel.chan.r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(pixel.chan.g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_srgb pixel; pixel.chan.r = util_format_linear_to_srgb_8unorm(src[0]); pixel.chan.g = util_format_linear_to_srgb_8unorm(src[1]); pixel.chan.b = util_format_linear_to_srgb_8unorm(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_srgb pixel; pixel.chan.r = util_format_linear_to_srgb_8unorm(src[0]); pixel.chan.g = util_format_linear_to_srgb_8unorm(src[1]); pixel.chan.b = util_format_linear_to_srgb_8unorm(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t a; #else uint8_t r; uint8_t g; uint8_t b; uint8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= (float_to_ubyte(src[3])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_r8g8b8a8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= (src[3]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= (src[3]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8b8g8r8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t a; uint8_t b; uint8_t g; uint8_t r; #else uint8_t a; uint8_t b; uint8_t g; uint8_t r; #endif } chan; }; static INLINE void util_format_a8b8g8r8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8b8g8r8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[3])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[3])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8b8g8r8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_a8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = value >> 24; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t b; uint32_t g; uint32_t r; a = (value) & 0xff; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[3]) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[3]) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_to_srgb_8unorm(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_x8b8g8r8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t x; uint8_t b; uint8_t g; uint8_t r; #else uint8_t x; uint8_t b; uint8_t g; uint8_t r; #endif } chan; }; static INLINE void util_format_x8b8g8r8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8b8g8r8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_x8b8g8r8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_x8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 16) & 0xff; g = (value >> 8) & 0xff; r = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value >> 8) & 0xff; g = (value >> 16) & 0xff; r = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_to_srgb_8unorm(src[0])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b8g8r8a8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t b; uint8_t g; uint8_t r; uint8_t a; #else uint8_t b; uint8_t g; uint8_t r; uint8_t a; #endif } chan; }; static INLINE void util_format_b8g8r8a8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8a8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= (float_to_ubyte(src[3])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b8g8r8a8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_b8g8r8a8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; a = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8a8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2])) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= (src[3]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= (src[3]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b8g8r8x8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t b; uint8_t g; uint8_t r; uint8_t x; #else uint8_t b; uint8_t g; uint8_t r; uint8_t x; #endif } chan; }; static INLINE void util_format_b8g8r8x8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8x8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b8g8r8x8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b8g8r8x8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 24; g = (value >> 16) & 0xff; r = (value >> 8) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0xff; g = (value >> 8) & 0xff; r = (value >> 16) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b8g8r8x8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2])) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8r8g8b8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t a; uint8_t r; uint8_t g; uint8_t b; #else uint8_t a; uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_a8r8g8b8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8g8b8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[3])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[3])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8r8g8b8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_a8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = value >> 24; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t a; uint32_t r; uint32_t g; uint32_t b; a = (value) & 0xff; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[3]) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[3]) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_to_srgb_8unorm(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_x8r8g8b8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t x; uint8_t r; uint8_t g; uint8_t b; #else uint8_t x; uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_x8r8g8b8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8r8g8b8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_float_to_srgb_8unorm(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_x8r8g8b8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_x8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 16) & 0xff; g = (value >> 8) & 0xff; b = (value) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value >> 8) & 0xff; g = (value >> 16) & 0xff; b = value >> 24; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_x8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= (util_format_linear_to_srgb_8unorm(src[2])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8sg8sb8ux8u_norm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; uint8_t b; uint8_t x; #else int8_t r; int8_t g; uint8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8sg8sb8ux8u_norm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = (value >> 8) & 0xff; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = (value >> 16) & 0xff; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8sg8sb8ux8u_norm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 24) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 16) ; value |= ((float_to_ubyte(src[2])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 8) ; value |= ((float_to_ubyte(src[2])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8sg8sb8ux8u_norm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = (value >> 8) & 0xff; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = (value >> 16) & 0xff; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8sg8sb8ux8u_norm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = (value >> 8) & 0xff; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; uint32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = (value >> 16) & 0xff; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = b; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8sg8sb8ux8u_norm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(src[0] >> 1)) << 24) ; value |= (uint32_t)((((uint32_t)(src[1] >> 1)) & 0xff) << 16) ; value |= ((src[2]) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(src[0] >> 1)) & 0xff) ; value |= (uint32_t)((((uint32_t)(src[1] >> 1)) & 0xff) << 8) ; value |= ((src[2]) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10sg10sb10sa2u_norm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int r:10; int g:10; int b:10; unsigned a:2; #else int r:10; int g:10; int b:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_r10sg10sb10sa2u_norm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = value >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10sg10sb10sa2u_norm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) << 22) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 2) ; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; value |= ((uint32_t)util_iround(CLAMP(src[3], 0, 1) * 0x3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10sg10sb10sa2u_norm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = (value) & 0x3; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = value >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x3)); /* a */ #endif } static INLINE void util_format_r10sg10sb10sa2u_norm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = (value) & 0x3; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; uint32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = value >> 30; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0x3); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10sg10sb10sa2u_norm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 2) ; value |= ((uint32_t)(src[3] >> 6)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 20) ; value |= ((uint32_t)(src[3] >> 6)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r5sg5sb6u_norm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int r:5; int g:5; unsigned b:6; #else int r:5; int g:5; unsigned b:6; #endif } chan; }; static INLINE void util_format_r5sg5sb6u_norm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value) ) >> 11; g = ((int16_t)(value << 5) ) >> 11; b = (value) & 0x3f; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0x3f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value << 11) ) >> 11; g = ((int16_t)(value << 6) ) >> 11; b = value >> 10; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0x3f)); /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r5sg5sb6u_norm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((uint16_t)util_iround(CLAMP(src[0], -1, 1) * 0xf)) << 11) ; value |= (uint16_t)((((uint16_t)util_iround(CLAMP(src[1], -1, 1) * 0xf)) & 0x1f) << 6) ; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x3f)) & 0x3f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((uint16_t)util_iround(CLAMP(src[0], -1, 1) * 0xf)) & 0x1f) ; value |= (uint16_t)((((uint16_t)util_iround(CLAMP(src[1], -1, 1) * 0xf)) & 0x1f) << 5) ; value |= ((uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0x3f)) << 10; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r5sg5sb6u_norm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value) ) >> 11; g = ((int16_t)(value << 5) ) >> 11; b = (value) & 0x3f; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0x3f)); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value << 11) ) >> 11; g = ((int16_t)(value << 6) ) >> 11; b = value >> 10; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = (float)(g * (1.0f/0xf)); /* g */ dst[2] = (float)(b * (1.0f/0x3f)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r5sg5sb6u_norm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value) ) >> 11; g = ((int16_t)(value << 5) ) >> 11; b = (value) & 0x3f; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x3f); /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; uint16_t b; r = ((int16_t)(value << 11) ) >> 11; g = ((int16_t)(value << 6) ) >> 11; b = value >> 10; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0xf); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0xf); /* g */ dst[2] = (uint8_t)(((uint32_t)b) * 0xff / 0x3f); /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r5sg5sb6u_norm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((uint16_t)(src[0] >> 4)) << 11) ; value |= (uint16_t)((((uint16_t)(src[1] >> 4)) & 0x1f) << 6) ; value |= ((uint16_t)(src[2] >> 2)) & 0x3f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((uint16_t)(src[0] >> 4)) & 0x1f) ; value |= (uint16_t)((((uint16_t)(src[1] >> 4)) & 0x1f) << 5) ; value |= ((uint16_t)(src[2] >> 2)) << 10; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r64_float { uint64_t value; struct { double r; } chan; }; static INLINE void util_format_r64_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r64_float pixel; pixel.chan.r = (double)src[0]; memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r64_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_r64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r64_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r64g64_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN double r; double g; #else double r; double g; #endif } chan; }; static INLINE void util_format_r64g64_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r64g64_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r64g64_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r64g64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r64g64b64_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN double r; double g; double b; #else double r; double g; double b; #endif } chan; }; static INLINE void util_format_r64g64b64_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 24; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64b64_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; pixel.chan.b = (double)src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64b64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; pixel.chan.b = (double)src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 24; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r64g64b64_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r64g64b64_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = (uint8_t)util_iround(CLAMP(pixel.chan.b, 0, 1) * 0xff); /* b */ dst[3] = 255; /* a */ #else union util_format_r64g64b64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = (uint8_t)util_iround(CLAMP(pixel.chan.b, 0, 1) * 0xff); /* b */ dst[3] = 255; /* a */ #endif src += 24; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64b64_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); pixel.chan.b = (double)(src[2] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64b64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); pixel.chan.b = (double)(src[2] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 24; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r64g64b64a64_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN double r; double g; double b; double a; #else double r; double g; double b; double a; #endif } chan; }; static INLINE void util_format_r64g64b64a64_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif src += 32; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64b64a64_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64a64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; pixel.chan.b = (double)src[2]; pixel.chan.a = (double)src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64b64a64_float pixel; pixel.chan.r = (double)src[0]; pixel.chan.g = (double)src[1]; pixel.chan.b = (double)src[2]; pixel.chan.a = (double)src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 32; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r64g64b64a64_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r64g64b64a64_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = (uint8_t)util_iround(CLAMP(pixel.chan.b, 0, 1) * 0xff); /* b */ dst[3] = (uint8_t)util_iround(CLAMP(pixel.chan.a, 0, 1) * 0xff); /* a */ #else union util_format_r64g64b64a64_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround(CLAMP(pixel.chan.r, 0, 1) * 0xff); /* r */ dst[1] = (uint8_t)util_iround(CLAMP(pixel.chan.g, 0, 1) * 0xff); /* g */ dst[2] = (uint8_t)util_iround(CLAMP(pixel.chan.b, 0, 1) * 0xff); /* b */ dst[3] = (uint8_t)util_iround(CLAMP(pixel.chan.a, 0, 1) * 0xff); /* a */ #endif src += 32; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r64g64b64a64_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r64g64b64a64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); pixel.chan.b = (double)(src[2] * (1.0f/0xff)); pixel.chan.a = (double)(src[3] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r64g64b64a64_float pixel; pixel.chan.r = (double)(src[0] * (1.0f/0xff)); pixel.chan.g = (double)(src[1] * (1.0f/0xff)); pixel.chan.b = (double)(src[2] * (1.0f/0xff)); pixel.chan.a = (double)(src[3] * (1.0f/0xff)); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 32; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_float { uint32_t value; struct { float r; } chan; }; static INLINE void util_format_r32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r32_float pixel; pixel.chan.r = src[0]; memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_r32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_float { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN float r; float g; #else float r; float g; #endif } chan; }; static INLINE void util_format_r32g32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN float r; float g; float b; #else float r; float g; float b; #endif } chan; }; static INLINE void util_format_r32g32b32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN float r; float g; float b; float a; #else float r; float g; float b; float a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32g32b32a32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #else union util_format_r32g32b32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_unorm { uint32_t value; struct { uint32_t r; } chan; }; static INLINE void util_format_r32_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (float)(r * (1.0/0xffffffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (float)(r * (1.0/0xffffffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (uint8_t)(r >> 24); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_unorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; #else uint32_t r; uint32_t g; #endif } chan; }; static INLINE void util_format_r32g32_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_unorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; #else uint32_t r; uint32_t g; uint32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); pixel.chan.b = (uint32_t)(CLAMP(src[2], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); pixel.chan.b = (uint32_t)(CLAMP(src[2], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 24); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 24); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_unorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; uint32_t a; #else uint32_t r; uint32_t g; uint32_t b; uint32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0xffffffff)); /* a */ #else union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0xffffffff)); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); pixel.chan.b = (uint32_t)(CLAMP(src[2], 0, 1) * (double)0xffffffff); pixel.chan.a = (uint32_t)(CLAMP(src[3], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_unorm pixel; pixel.chan.r = (uint32_t)(CLAMP(src[0], 0, 1) * (double)0xffffffff); pixel.chan.g = (uint32_t)(CLAMP(src[1], 0, 1) * (double)0xffffffff); pixel.chan.b = (uint32_t)(CLAMP(src[2], 0, 1) * (double)0xffffffff); pixel.chan.a = (uint32_t)(CLAMP(src[3], 0, 1) * (double)0xffffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0xffffffff)); /* a */ #else union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0xffffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0xffffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0xffffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0xffffffff)); /* a */ #endif } static INLINE void util_format_r32g32b32a32_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 24); /* b */ dst[3] = (uint8_t)(pixel.chan.a >> 24); /* a */ #else union util_format_r32g32b32a32_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 24); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 24); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 24); /* b */ dst[3] = (uint8_t)(pixel.chan.a >> 24); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0xffffffff / 0xff); pixel.chan.a = (uint32_t)(((uint64_t)src[3]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_unorm pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0xffffffff / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0xffffffff / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0xffffffff / 0xff); pixel.chan.a = (uint32_t)(((uint64_t)src[3]) * 0xffffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_uscaled { uint32_t value; struct { uint32_t r; } chan; }; static INLINE void util_format_r32_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)CLAMP(src[0], 0, 4294967295); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (uint8_t)(((uint64_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_uscaled { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; #else uint32_t r; uint32_t g; #endif } chan; }; static INLINE void util_format_r32g32_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_uscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; #else uint32_t r; uint32_t g; uint32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); pixel.chan.b = (uint32_t)CLAMP(src[2], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); pixel.chan.b = (uint32_t)CLAMP(src[2], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_uscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; uint32_t a; #else uint32_t r; uint32_t g; uint32_t b; uint32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); pixel.chan.b = (uint32_t)CLAMP(src[2], 0, 4294967295); pixel.chan.a = (uint32_t)CLAMP(src[3], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_uscaled pixel; pixel.chan.r = (uint32_t)CLAMP(src[0], 0, 4294967295); pixel.chan.g = (uint32_t)CLAMP(src[1], 0, 4294967295); pixel.chan.b = (uint32_t)CLAMP(src[2], 0, 4294967295); pixel.chan.a = (uint32_t)CLAMP(src[3], 0, 4294967295); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32g32b32a32_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint64_t)MIN2(pixel.chan.a, 1)) * 0xff / 0x1); /* a */ #else union util_format_r32g32b32a32_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint64_t)MIN2(pixel.chan.a, 1)) * 0xff / 0x1); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (uint32_t)(((uint64_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_uscaled pixel; pixel.chan.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (uint32_t)(((uint64_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_snorm { uint32_t value; struct { int32_t r; } chan; }; static INLINE void util_format_r32_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (float)(r * (1.0/0x7fffffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (float)(r * (1.0/0x7fffffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (uint8_t)(MAX2(r, 0) >> 23); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_snorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; #else int32_t r; int32_t g; #endif } chan; }; static INLINE void util_format_r32g32_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_snorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; #else int32_t r; int32_t g; int32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); pixel.chan.b = (int32_t)(CLAMP(src[2], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); pixel.chan.b = (int32_t)(CLAMP(src[2], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 23); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 23); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_snorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; int32_t a; #else int32_t r; int32_t g; int32_t b; int32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x7fffffff)); /* a */ #else union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x7fffffff)); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); pixel.chan.b = (int32_t)(CLAMP(src[2], -1, 1) * (double)0x7fffffff); pixel.chan.a = (int32_t)(CLAMP(src[3], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_snorm pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -1, 1) * (double)0x7fffffff); pixel.chan.g = (int32_t)(CLAMP(src[1], -1, 1) * (double)0x7fffffff); pixel.chan.b = (int32_t)(CLAMP(src[2], -1, 1) * (double)0x7fffffff); pixel.chan.a = (int32_t)(CLAMP(src[3], -1, 1) * (double)0x7fffffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x7fffffff)); /* a */ #else union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x7fffffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x7fffffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x7fffffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x7fffffff)); /* a */ #endif } static INLINE void util_format_r32g32b32a32_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 23); /* b */ dst[3] = (uint8_t)(MAX2(pixel.chan.a, 0) >> 23); /* a */ #else union util_format_r32g32b32a32_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 23); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 23); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 23); /* b */ dst[3] = (uint8_t)(MAX2(pixel.chan.a, 0) >> 23); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x7fffffff / 0xff); pixel.chan.a = (int32_t)(((uint64_t)src[3]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_snorm pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x7fffffff / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x7fffffff / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x7fffffff / 0xff); pixel.chan.a = (int32_t)(((uint64_t)src[3]) * 0x7fffffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_sscaled { uint32_t value; struct { int32_t r; } chan; }; static INLINE void util_format_r32_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)CLAMP(src[0], -2147483648, 2147483647)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (uint8_t)(((uint64_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)(((uint64_t)src[0]) * 0x1 / 0xff)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_sscaled { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; #else int32_t r; int32_t g; #endif } chan; }; static INLINE void util_format_r32g32_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_sscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; #else int32_t r; int32_t g; int32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_sscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; int32_t a; #else int32_t r; int32_t g; int32_t b; int32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648, 2147483647); pixel.chan.a = (int32_t)CLAMP(src[3], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_sscaled pixel; pixel.chan.r = (int32_t)CLAMP(src[0], -2147483648, 2147483647); pixel.chan.g = (int32_t)CLAMP(src[1], -2147483648, 2147483647); pixel.chan.b = (int32_t)CLAMP(src[2], -2147483648, 2147483647); pixel.chan.a = (int32_t)CLAMP(src[3], -2147483648, 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32g32b32a32_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.a, 0, 1)) * 0xff / 0x1); /* a */ #else union util_format_r32g32b32a32_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint64_t)CLAMP(pixel.chan.a, 0, 1)) * 0xff / 0x1); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (int32_t)(((uint64_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_sscaled pixel; pixel.chan.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (int32_t)(((uint64_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_float { uint16_t value; struct { uint16_t r; } chan; }; static INLINE void util_format_r16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r16_float pixel; pixel.chan.r = util_float_to_half(src[0]); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_r16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_float { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; #else uint16_t r; uint16_t g; #endif } chan; }; static INLINE void util_format_r16g16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; #else uint16_t r; uint16_t g; uint16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = 255; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_float { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t a; #else uint16_t r; uint16_t g; uint16_t b; uint16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif } static INLINE void util_format_r16g16b16a16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #else union util_format_r16g16b16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_unorm { uint16_t value; struct { uint16_t r; } chan; }; static INLINE void util_format_r16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (uint8_t)(r >> 8); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; #else uint16_t r; uint16_t g; #endif } chan; }; static INLINE void util_format_r16g16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = (float)(g * (1.0f/0xffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = (float)(g * (1.0f/0xffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) << 16; value |= ((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) & 0xffff; value |= ((uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = (float)(g * (1.0f/0xffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = (float)(g * (1.0f/0xffff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (uint8_t)(r >> 8); /* r */ dst[1] = (uint8_t)(g >> 8); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (uint8_t)(r >> 8); /* r */ dst[1] = (uint8_t)(g >> 8); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) << 16; value |= ((uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) & 0xffff; value |= ((uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_unorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; #else uint16_t r; uint16_t g; uint16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = 255; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_unorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t a; #else uint16_t r; uint16_t g; uint16_t b; uint16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0xffff)); /* a */ #else union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0xffff)); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); pixel.chan.a = (uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); pixel.chan.a = (uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0xffff)); /* a */ #else union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0xffff)); /* a */ #endif } static INLINE void util_format_r16g16b16a16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = (uint8_t)(pixel.chan.a >> 8); /* a */ #else union util_format_r16g16b16a16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = (uint8_t)(pixel.chan.a >> 8); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); pixel.chan.a = (uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); pixel.chan.a = (uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_uscaled { uint16_t value; struct { uint16_t r; } chan; }; static INLINE void util_format_r16_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)CLAMP(src[0], 0, 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_uscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; #else uint16_t r; uint16_t g; #endif } chan; }; static INLINE void util_format_r16g16_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) << 16; value |= ((uint16_t)CLAMP(src[1], 0, 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; value |= ((uint16_t)CLAMP(src[1], 0, 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 16; value |= ((uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xffff; value |= ((uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_uscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; #else uint16_t r; uint16_t g; uint16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uscaled pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_uscaled pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uscaled pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_uscaled pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_uscaled { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t a; #else uint16_t r; uint16_t g; uint16_t b; uint16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uscaled pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); pixel.chan.a = (uint16_t)CLAMP(src[3], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_uscaled pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); pixel.chan.a = (uint16_t)CLAMP(src[3], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r16g16b16a16_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(pixel.chan.a, 1)) * 0xff / 0x1); /* a */ #else union util_format_r16g16b16a16_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(pixel.chan.a, 1)) * 0xff / 0x1); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uscaled pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (uint16_t)(((uint32_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_uscaled pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (uint16_t)(((uint32_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_snorm { uint16_t value; struct { int16_t r; } chan; }; static INLINE void util_format_r16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (uint8_t)(MAX2(r, 0) >> 7); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; #else int16_t r; int16_t g; #endif } chan; }; static INLINE void util_format_r16g16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) << 16) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) & 0xffff) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (uint8_t)(MAX2(r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 7); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (uint8_t)(MAX2(r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 7); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) << 16) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) & 0xffff) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_snorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; #else int16_t r; int16_t g; int16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = 255; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_snorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; int16_t a; #else int16_t r; int16_t g; int16_t b; int16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0x7fff)); /* a */ #else union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0x7fff)); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); pixel.chan.a = (int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); pixel.chan.a = (int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0x7fff)); /* a */ #else union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0f/0x7fff)); /* a */ #endif } static INLINE void util_format_r16g16b16a16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = (uint8_t)(MAX2(pixel.chan.a, 0) >> 7); /* a */ #else union util_format_r16g16b16a16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = (uint8_t)(MAX2(pixel.chan.a, 0) >> 7); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); pixel.chan.a = (int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); pixel.chan.a = (int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_sscaled { uint16_t value; struct { int16_t r; } chan; }; static INLINE void util_format_r16_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_sscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; #else int16_t r; int16_t g; #endif } chan; }; static INLINE void util_format_r16g16_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 16) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xffff) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_sscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; #else int16_t r; int16_t g; int16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sscaled pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_sscaled pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sscaled pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_sscaled pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_sscaled { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; int16_t a; #else int16_t r; int16_t g; int16_t b; int16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sscaled pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); pixel.chan.a = (int16_t)CLAMP(src[3], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_sscaled pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); pixel.chan.a = (int16_t)CLAMP(src[3], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = (float)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r16g16b16a16_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.a, 0, 1)) * 0xff / 0x1); /* a */ #else union util_format_r16g16b16a16_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.a, 0, 1)) * 0xff / 0x1); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sscaled pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (int16_t)(((uint32_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_sscaled pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); pixel.chan.a = (int16_t)(((uint32_t)src[3]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_unorm { uint8_t value; struct { uint8_t r; } chan; }; static INLINE void util_format_r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= float_to_ubyte(src[0]); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= src[0]; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; #else uint8_t r; uint8_t g; #endif } chan; }; static INLINE void util_format_r8g8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (float_to_ubyte(src[0])) << 8; value |= (float_to_ubyte(src[1])) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (float_to_ubyte(src[0])) & 0xff; value |= (float_to_ubyte(src[1])) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (src[0]) << 8; value |= (src[1]) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (src[0]) & 0xff; value |= (src[1]) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_unorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; #else uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = ubyte_to_float(pixel.chan.r); /* r */ dst[1] = ubyte_to_float(pixel.chan.g); /* g */ dst[2] = ubyte_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = ubyte_to_float(pixel.chan.r); /* r */ dst[1] = ubyte_to_float(pixel.chan.g); /* g */ dst[2] = ubyte_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_unorm pixel; pixel.chan.r = float_to_ubyte(src[0]); pixel.chan.g = float_to_ubyte(src[1]); pixel.chan.b = float_to_ubyte(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_unorm pixel; pixel.chan.r = float_to_ubyte(src[0]); pixel.chan.g = float_to_ubyte(src[1]); pixel.chan.b = float_to_ubyte(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = ubyte_to_float(pixel.chan.r); /* r */ dst[1] = ubyte_to_float(pixel.chan.g); /* g */ dst[2] = ubyte_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = ubyte_to_float(pixel.chan.r); /* r */ dst[1] = ubyte_to_float(pixel.chan.g); /* g */ dst[2] = ubyte_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 255; /* a */ #else union util_format_r8g8b8_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 255; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_unorm pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_unorm pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t a; #else uint8_t r; uint8_t g; uint8_t b; uint8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (float_to_ubyte(src[0])) << 24; value |= ((float_to_ubyte(src[1])) & 0xff) << 16; value |= ((float_to_ubyte(src[2])) & 0xff) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (float_to_ubyte(src[0])) & 0xff; value |= ((float_to_ubyte(src[1])) & 0xff) << 8; value |= ((float_to_ubyte(src[2])) & 0xff) << 16; value |= (float_to_ubyte(src[3])) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = ubyte_to_float(r); /* r */ dst[1] = ubyte_to_float(g); /* g */ dst[2] = ubyte_to_float(b); /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_r8g8b8a8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = r; /* r */ dst[1] = g; /* g */ dst[2] = b; /* b */ dst[3] = a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (src[0]) << 24; value |= ((src[1]) & 0xff) << 16; value |= ((src[2]) & 0xff) << 8; value |= (src[3]) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (src[0]) & 0xff; value |= ((src[1]) & 0xff) << 8; value |= ((src[2]) & 0xff) << 16; value |= (src[3]) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_uscaled { uint8_t value; struct { uint8_t r; } chan; }; static INLINE void util_format_r8_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[0], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_uscaled { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; #else uint8_t r; uint8_t g; #endif } chan; }; static INLINE void util_format_r8g8_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 8; value |= ((uint8_t)CLAMP(src[1], 0, 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= ((uint8_t)CLAMP(src[1], 0, 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 8; value |= ((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff; value |= ((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_uscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; #else uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uscaled pixel; pixel.chan.r = (uint8_t)CLAMP(src[0], 0, 255); pixel.chan.g = (uint8_t)CLAMP(src[1], 0, 255); pixel.chan.b = (uint8_t)CLAMP(src[2], 0, 255); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_uscaled pixel; pixel.chan.r = (uint8_t)CLAMP(src[0], 0, 255); pixel.chan.g = (uint8_t)CLAMP(src[1], 0, 255); pixel.chan.b = (uint8_t)CLAMP(src[2], 0, 255); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r8g8b8_uscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.chan.r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.chan.g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.chan.b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uscaled pixel; pixel.chan.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_uscaled pixel; pixel.chan.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_uscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t a; #else uint8_t r; uint8_t g; uint8_t b; uint8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 24; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; value |= ((uint8_t)CLAMP(src[3], 0, 255)) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_r8g8b8a8_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24; value |= (((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16; value |= (((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8; value |= ((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff; value |= (((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8; value |= (((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16; value |= ((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_snorm { uint8_t value; struct { int8_t r; } chan; }; static INLINE void util_format_r8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)(src[0] >> 1)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_snorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; #else int8_t r; int8_t g; #endif } chan; }; static INLINE void util_format_r8g8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 8) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) << 8) ; value |= (uint16_t)(((int8_t)(src[1] >> 1)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) & 0xff) ; value |= (uint16_t)(((int8_t)(src[1] >> 1)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_snorm { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; #else int8_t r; int8_t g; int8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7f)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7f)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7f)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7f)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_snorm pixel; pixel.chan.r = (int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f); pixel.chan.g = (int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f); pixel.chan.b = (int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_snorm pixel; pixel.chan.r = (int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f); pixel.chan.g = (int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f); pixel.chan.b = (int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7f)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7f)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7f)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7f)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MAX2(pixel.chan.r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(pixel.chan.g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(pixel.chan.b, 0)) * 0xff / 0x7f); /* b */ dst[3] = 255; /* a */ #else union util_format_r8g8b8_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)MAX2(pixel.chan.r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(pixel.chan.g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(pixel.chan.b, 0)) * 0xff / 0x7f); /* b */ dst[3] = 255; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_snorm pixel; pixel.chan.r = (int8_t)(src[0] >> 1); pixel.chan.g = (int8_t)(src[1] >> 1); pixel.chan.b = (int8_t)(src[2] >> 1); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_snorm pixel; pixel.chan.r = (int8_t)(src[0] >> 1); pixel.chan.g = (int8_t)(src[1] >> 1); pixel.chan.b = (int8_t)(src[2] >> 1); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; int8_t a; #else int8_t r; int8_t g; int8_t b; int8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 24) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif } static INLINE void util_format_r8g8b8a8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(b, 0)) * 0xff / 0x7f); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(b, 0)) * 0xff / 0x7f); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)(src[0] >> 1)) << 24) ; value |= (uint32_t)((((int8_t)(src[1] >> 1)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)(src[2] >> 1)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)(src[3] >> 1)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)(src[0] >> 1)) & 0xff) ; value |= (uint32_t)((((int8_t)(src[1] >> 1)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)(src[2] >> 1)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)(src[3] >> 1)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_sscaled { uint8_t value; struct { int8_t r; } chan; }; static INLINE void util_format_r8_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (float)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_sscaled { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; #else int8_t r; int8_t g; #endif } chan; }; static INLINE void util_format_r8g8_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) << 8) ; value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 8) ; value |= (uint16_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) ; value |= (uint16_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_sscaled { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; #else int8_t r; int8_t g; int8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sscaled pixel; pixel.chan.r = (int8_t)CLAMP(src[0], -128, 127); pixel.chan.g = (int8_t)CLAMP(src[1], -128, 127); pixel.chan.b = (int8_t)CLAMP(src[2], -128, 127); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_sscaled pixel; pixel.chan.r = (int8_t)CLAMP(src[0], -128, 127); pixel.chan.g = (int8_t)CLAMP(src[1], -128, 127); pixel.chan.b = (int8_t)CLAMP(src[2], -128, 127); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)pixel.chan.r; /* r */ dst[1] = (float)pixel.chan.g; /* g */ dst[2] = (float)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else union util_format_r8g8b8_sscaled pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.chan.b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sscaled pixel; pixel.chan.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_sscaled pixel; pixel.chan.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); pixel.chan.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); pixel.chan.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_sscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; int8_t a; #else int8_t r; int8_t g; int8_t b; int8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) << 24) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_r8g8b8a8_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24) ; value |= (uint32_t)((((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) ; value |= (uint32_t)((((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_fixed { uint32_t value; struct { int32_t r; } chan; }; static INLINE void util_format_r32_fixed_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_fixed_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_fixed_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { union util_format_r32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_fixed_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { union util_format_r32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_fixed_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { union util_format_r32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_fixed { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; #else int32_t r; int32_t g; #endif } chan; }; static INLINE void util_format_r32g32_fixed_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_fixed_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_fixed_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_fixed_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = 0; /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_fixed_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_fixed { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; #else int32_t r; int32_t g; int32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_fixed_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_fixed_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); pixel.chan.b = (int32_t)(CLAMP(src[2], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); pixel.chan.b = (int32_t)(CLAMP(src[2], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_fixed_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_fixed_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = (uint8_t)util_iround((CLAMP(pixel.chan.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = (uint8_t)util_iround((CLAMP(pixel.chan.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ dst[3] = 255; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_fixed_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); pixel.chan.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); pixel.chan.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_fixed { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; int32_t a; #else int32_t r; int32_t g; int32_t b; int32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_fixed_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x10000)); /* a */ #else union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x10000)); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_fixed_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); pixel.chan.b = (int32_t)(CLAMP(src[2], -65536, 65535) * (double)0x10000); pixel.chan.a = (int32_t)(CLAMP(src[3], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_fixed pixel; pixel.chan.r = (int32_t)(CLAMP(src[0], -65536, 65535) * (double)0x10000); pixel.chan.g = (int32_t)(CLAMP(src[1], -65536, 65535) * (double)0x10000); pixel.chan.b = (int32_t)(CLAMP(src[2], -65536, 65535) * (double)0x10000); pixel.chan.a = (int32_t)(CLAMP(src[3], -65536, 65535) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_fixed_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x10000)); /* a */ #else union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0/0x10000)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0/0x10000)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0/0x10000)); /* b */ dst[3] = (float)(pixel.chan.a * (1.0/0x10000)); /* a */ #endif } static INLINE void util_format_r32g32b32a32_fixed_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = (uint8_t)util_iround((CLAMP(pixel.chan.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ dst[3] = (uint8_t)util_iround((CLAMP(pixel.chan.a, 0, 65536) * (1.0/0x10000)) * 0xff); /* a */ #else union util_format_r32g32b32a32_fixed pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)util_iround((CLAMP(pixel.chan.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ dst[1] = (uint8_t)util_iround((CLAMP(pixel.chan.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ dst[2] = (uint8_t)util_iround((CLAMP(pixel.chan.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ dst[3] = (uint8_t)util_iround((CLAMP(pixel.chan.a, 0, 65536) * (1.0/0x10000)) * 0xff); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_fixed_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); pixel.chan.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); pixel.chan.a = (int32_t)((float)(src[3] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_fixed pixel; pixel.chan.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); pixel.chan.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); pixel.chan.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); pixel.chan.a = (int32_t)((float)(src[3] * (1.0f/0xff)) * (double)0x10000); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10x2_uscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned r:10; unsigned g:10; unsigned b:10; unsigned x:2; #else unsigned r:10; unsigned g:10; unsigned b:10; unsigned x:2; #endif } chan; }; static INLINE void util_format_r10g10b10x2_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10x2_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) << 22; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 2; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10x2_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r10g10b10x2_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10x2_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 2; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10x2_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int r:10; int g:10; int b:10; unsigned x:2; #else int r:10; int g:10; int b:10; unsigned x:2; #endif } chan; }; static INLINE void util_format_r10g10b10x2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10x2_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) << 22) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 2) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10x2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r10g10b10x2_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10x2_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 2) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 20) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a4r4_unorm { uint8_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned a:4; unsigned r:4; #else unsigned a:4; unsigned r:4; #endif } chan; }; static INLINE void util_format_a4r4_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = value >> 4; r = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = (value) & 0xf; r = value >> 4; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a4r4_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) << 4; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) & 0xf; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a4r4_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = value >> 4; r = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = (value) & 0xf; r = value >> 4; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif } static INLINE void util_format_a4r4_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = value >> 4; r = (value) & 0xf; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t a; uint8_t r; a = (value) & 0xf; r = value >> 4; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a4r4_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)(src[3] >> 4)) << 4; value |= ((uint8_t)(src[0] >> 4)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)(src[3] >> 4)) & 0xf; value |= ((uint8_t)(src[0] >> 4)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r4a4_unorm { uint8_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned r:4; unsigned a:4; #else unsigned r:4; unsigned a:4; #endif } chan; }; static INLINE void util_format_r4a4_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = value >> 4; a = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = (value) & 0xf; a = value >> 4; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r4a4_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) << 4; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)util_iround(CLAMP(src[0], 0, 1) * 0xf)) & 0xf; value |= ((uint8_t)util_iround(CLAMP(src[3], 0, 1) * 0xf)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r4a4_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = value >> 4; a = (value) & 0xf; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = (value) & 0xf; a = value >> 4; dst[0] = (float)(r * (1.0f/0xf)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xf)); /* a */ #endif } static INLINE void util_format_r4a4_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = value >> 4; a = (value) & 0xf; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #else uint8_t value = *(const uint8_t *)src; uint8_t r; uint8_t a; r = (value) & 0xf; a = value >> 4; dst[0] = (uint8_t)(((uint32_t)r) * 0xff / 0xf); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)a) * 0xff / 0xf); /* a */ #endif src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r4a4_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t value = 0; value |= ((uint8_t)(src[0] >> 4)) << 4; value |= ((uint8_t)(src[3] >> 4)) & 0xf; *(uint8_t *)dst = value; #else uint8_t value = 0; value |= ((uint8_t)(src[0] >> 4)) & 0xf; value |= ((uint8_t)(src[3] >> 4)) << 4; *(uint8_t *)dst = value; #endif src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8a8_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t a; #else uint8_t r; uint8_t a; #endif } chan; }; static INLINE void util_format_r8a8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (float_to_ubyte(src[0])) << 8; value |= (float_to_ubyte(src[3])) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (float_to_ubyte(src[0])) & 0xff; value |= (float_to_ubyte(src[3])) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8a8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_r8a8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (src[0]) << 8; value |= (src[3]) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (src[0]) & 0xff; value |= (src[3]) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8r8_unorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t a; uint8_t r; #else uint8_t a; uint8_t r; #endif } chan; }; static INLINE void util_format_a8r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = value >> 8; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = (value) & 0xff; r = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (float_to_ubyte(src[3])) << 8; value |= (float_to_ubyte(src[0])) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (float_to_ubyte(src[3])) & 0xff; value |= (float_to_ubyte(src[0])) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = value >> 8; r = (value) & 0xff; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = (value) & 0xff; r = value >> 8; dst[0] = ubyte_to_float(r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = ubyte_to_float(a); /* a */ #endif } static INLINE void util_format_a8r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = value >> 8; r = (value) & 0xff; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t a; uint16_t r; a = (value) & 0xff; r = value >> 8; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (src[3]) << 8; value |= (src[0]) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (src[3]) & 0xff; value |= (src[0]) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10a2_uscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #else unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_r10g10b10a2_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) << 22; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 2; value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10a2_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_r10g10b10a2_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 2; value |= ((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; value |= ((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10a2_sscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int r:10; int g:10; int b:10; int a:2; #else int r:10; int g:10; int b:10; int a:2; #endif } chan; }; static INLINE void util_format_r10g10b10a2_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) << 22) ; value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10a2_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_r10g10b10a2_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10a2_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int r:10; int g:10; int b:10; int a:2; #else int r:10; int g:10; int b:10; int a:2; #endif } chan; }; static INLINE void util_format_r10g10b10a2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) << 22) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[3], -1, 1) * 0x1)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[3], -1, 1) * 0x1)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10a2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif } static INLINE void util_format_r10g10b10a2_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; b = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; b = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)(src[3] >> 7)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)(src[3] >> 7)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10a2_uscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #else unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_b10g10r10a2_uscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_uscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)CLAMP(src[2], 0, 1023)) << 22; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; value |= (((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 2; value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; value |= (((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 20; value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10a2_uscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_b10g10r10a2_uscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_uscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 2; value |= ((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20; value |= ((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10a2_sscaled { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int b:10; int g:10; int r:10; int a:2; #else int b:10; int g:10; int r:10; int a:2; #endif } chan; }; static INLINE void util_format_b10g10r10a2_sscaled_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_sscaled_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) << 22) ; value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10a2_sscaled_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)r; /* r */ dst[1] = (float)g; /* g */ dst[2] = (float)b; /* b */ dst[3] = (float)a; /* a */ #endif } static INLINE void util_format_b10g10r10a2_sscaled_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_sscaled_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10a2_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int b:10; int g:10; int r:10; int a:2; #else int b:10; int g:10; int r:10; int a:2; #endif } chan; }; static INLINE void util_format_b10g10r10a2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) << 22) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[3], -1, 1) * 0x1)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)util_iround(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[3], -1, 1) * 0x1)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10a2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ dst[3] = (float)(a * (1.0f/0x1)); /* a */ #endif } static INLINE void util_format_b10g10r10a2_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value) ) >> 22; g = ((int32_t)(value << 10) ) >> 22; r = ((int32_t)(value << 20) ) >> 22; a = ((int32_t)(value << 30) ) >> 30; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t b; int32_t g; int32_t r; int32_t a; b = ((int32_t)(value << 22) ) >> 22; g = ((int32_t)(value << 12) ) >> 22; r = ((int32_t)(value << 2) ) >> 22; a = ((int32_t)(value) ) >> 30; dst[0] = (uint8_t)(MAX2(r, 0) >> 1); /* r */ dst[1] = (uint8_t)(MAX2(g, 0) >> 1); /* g */ dst[2] = (uint8_t)(MAX2(b, 0) >> 1); /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) << 22) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 12) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) & 0x3ff) << 2) ; value |= (uint32_t)(((uint32_t)(src[3] >> 7)) & 0x3) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1ff / 0xff)) & 0x3ff) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[1]) * 0x1ff / 0xff)) & 0x3ff) << 10) ; value |= (uint32_t)((((uint32_t)(((uint32_t)src[0]) * 0x1ff / 0xff)) & 0x3ff) << 20) ; value |= (uint32_t)(((uint32_t)(src[3] >> 7)) << 30) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_uint { uint8_t value; struct { uint8_t r; } chan; }; static INLINE void util_format_r8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)MIN2(src[0], 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t r; r = value; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[0], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_uint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; #else uint8_t r; uint8_t g; #endif } chan; }; static INLINE void util_format_r8g8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) << 8; value |= ((uint8_t)MIN2(src[1], 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; value |= ((uint8_t)MIN2(src[1], 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = value >> 8; g = (value) & 0xff; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t g; r = (value) & 0xff; g = value >> 8; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 8; value |= ((uint8_t)CLAMP(src[1], 0, 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= ((uint8_t)CLAMP(src[1], 0, 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_uint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; #else uint8_t r; uint8_t g; uint8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uint pixel; pixel.chan.r = (uint8_t)MIN2(src[0], 255); pixel.chan.g = (uint8_t)MIN2(src[1], 255); pixel.chan.b = (uint8_t)MIN2(src[2], 255); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_uint pixel; pixel.chan.r = (uint8_t)MIN2(src[0], 255); pixel.chan.g = (uint8_t)MIN2(src[1], 255); pixel.chan.b = (uint8_t)MIN2(src[2], 255); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_uint pixel; pixel.chan.r = (uint8_t)CLAMP(src[0], 0, 255); pixel.chan.g = (uint8_t)CLAMP(src[1], 0, 255); pixel.chan.b = (uint8_t)CLAMP(src[2], 0, 255); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_uint pixel; pixel.chan.r = (uint8_t)CLAMP(src[0], 0, 255); pixel.chan.g = (uint8_t)CLAMP(src[1], 0, 255); pixel.chan.b = (uint8_t)CLAMP(src[2], 0, 255); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t a; #else uint8_t r; uint8_t g; uint8_t b; uint8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) << 24; value |= (((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; value |= (((uint8_t)MIN2(src[2], 255)) & 0xff) << 8; value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; value |= (((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; value |= (((uint8_t)MIN2(src[2], 255)) & 0xff) << 16; value |= ((uint8_t)MIN2(src[3], 255)) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_r8g8b8a8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; a = (value) & 0xff; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; a = value >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 24; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; value |= ((uint8_t)CLAMP(src[3], 0, 255)) << 24; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8_sint { uint8_t value; struct { int8_t r; } chan; }; static INLINE void util_format_r8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t r; r = (int8_t)(value) ; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8_sint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; #else int8_t r; int8_t g; #endif } chan; }; static INLINE void util_format_r8g8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) << 8) ; value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value) ) >> 8; g = ((int16_t)(value << 8) ) >> 8; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t g; r = ((int16_t)(value << 8) ) >> 8; g = ((int16_t)(value) ) >> 8; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) << 8) ; value |= (uint16_t)(((int8_t)MIN2(src[1], 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; value |= (uint16_t)(((int8_t)MIN2(src[1], 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8_sint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; #else int8_t r; int8_t g; int8_t b; #endif } chan; }; static INLINE void util_format_r8g8b8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sint pixel; pixel.chan.r = (int8_t)CLAMP(src[0], -128, 127); pixel.chan.g = (int8_t)CLAMP(src[1], -128, 127); pixel.chan.b = (int8_t)CLAMP(src[2], -128, 127); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_sint pixel; pixel.chan.r = (int8_t)CLAMP(src[0], -128, 127); pixel.chan.g = (int8_t)CLAMP(src[1], -128, 127); pixel.chan.b = (int8_t)CLAMP(src[2], -128, 127); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #else union util_format_r8g8b8_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 3; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r8g8b8_sint pixel; pixel.chan.r = (int8_t)MIN2(src[0], 127); pixel.chan.g = (int8_t)MIN2(src[1], 127); pixel.chan.b = (int8_t)MIN2(src[2], 127); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r8g8b8_sint pixel; pixel.chan.r = (int8_t)MIN2(src[0], 127); pixel.chan.g = (int8_t)MIN2(src[1], 127); pixel.chan.b = (int8_t)MIN2(src[2], 127); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 3; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8a8_sint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; int8_t a; #else int8_t r; int8_t g; int8_t b; int8_t a; #endif } chan; }; static INLINE void util_format_r8g8b8a8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) << 24) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8a8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #endif } static INLINE void util_format_r8g8b8a8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; a = ((int32_t)(value << 24) ) >> 24; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = (unsigned)MAX2(b, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; int32_t a; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; a = ((int32_t)(value) ) >> 24; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = (unsigned)MAX2(b, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8a8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) << 24) ; value |= (uint32_t)((((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; value |= (uint32_t)((((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) << 24) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_uint { uint16_t value; struct { uint16_t r; } chan; }; static INLINE void util_format_r16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)MIN2(src[0], 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t r; r = value; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)CLAMP(src[0], 0, 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; #else uint16_t r; uint16_t g; #endif } chan; }; static INLINE void util_format_r16g16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) << 16; value |= ((uint16_t)MIN2(src[1], 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; value |= ((uint16_t)MIN2(src[1], 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = value >> 16; g = (value) & 0xffff; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; r = (value) & 0xffff; g = value >> 16; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) << 16; value |= ((uint16_t)CLAMP(src[1], 0, 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; value |= ((uint16_t)CLAMP(src[1], 0, 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_uint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; #else uint16_t r; uint16_t g; uint16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_uint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t a; #else uint16_t r; uint16_t g; uint16_t b; uint16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = (unsigned)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = (unsigned)pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); pixel.chan.a = (uint16_t)MIN2(src[3], 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); pixel.chan.a = (uint16_t)MIN2(src[3], 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = (unsigned)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = (unsigned)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r16g16b16a16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); pixel.chan.a = (uint16_t)CLAMP(src[3], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); pixel.chan.a = (uint16_t)CLAMP(src[3], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16_sint { uint16_t value; struct { int16_t r; } chan; }; static INLINE void util_format_r16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t r; r = (int16_t)(value) ; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16_sint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; #else int16_t r; int16_t g; #endif } chan; }; static INLINE void util_format_r16g16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value) ) >> 16; g = ((int32_t)(value << 16) ) >> 16; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; r = ((int32_t)(value << 16) ) >> 16; g = ((int32_t)(value) ) >> 16; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) << 16) ; value |= (uint32_t)(((int16_t)MIN2(src[1], 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)MIN2(src[1], 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16_sint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; #else int16_t r; int16_t g; int16_t b; #endif } chan; }; static INLINE void util_format_r16g16b16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 6; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 6; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16a16_sint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; int16_t a; #else int16_t r; int16_t g; int16_t b; int16_t a; #endif } chan; }; static INLINE void util_format_r16g16b16a16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); pixel.chan.a = (int16_t)CLAMP(src[3], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); pixel.chan.a = (int16_t)CLAMP(src[3], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16a16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #else union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = (int)pixel.chan.a; /* a */ #endif } static INLINE void util_format_r16g16b16a16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #else union util_format_r16g16b16a16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16a16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16a16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); pixel.chan.a = (int16_t)MIN2(src[3], 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16a16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); pixel.chan.a = (int16_t)MIN2(src[3], 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_uint { uint32_t value; struct { uint32_t r; } chan; }; static INLINE void util_format_r32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= src[0]; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t r; r = value; dst[0] = (int)MIN2(r, 2147483647); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)MAX2(src[0], 0); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_uint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; #else uint32_t r; uint32_t g; #endif } chan; }; static INLINE void util_format_r32g32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_uint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; #else uint32_t r; uint32_t g; uint32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_uint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; uint32_t a; #else uint32_t r; uint32_t g; uint32_t b; uint32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32g32b32a32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #else union util_format_r32g32b32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32_sint { uint32_t value; struct { int32_t r; } chan; }; static INLINE void util_format_r32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(src[0]) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_r32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t r; r = (int32_t)(value) ; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32_sint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; #else int32_t r; int32_t g; #endif } chan; }; static INLINE void util_format_r32g32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = 0; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32_sint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; #else int32_t r; int32_t g; int32_t b; #endif } chan; }; static INLINE void util_format_r32g32b32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 12; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 12; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32a32_sint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; int32_t a; #else int32_t r; int32_t g; int32_t b; int32_t a; #endif } chan; }; static INLINE void util_format_r32g32b32a32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32g32b32a32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #else union util_format_r32g32b32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32a32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32a32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32a32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8_uint { uint8_t value; struct { uint8_t a; } chan; }; static INLINE void util_format_a8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)MIN2(src[3], 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ } static INLINE void util_format_a8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[3], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i8_uint { uint8_t value; struct { uint8_t rgba; } chan; }; static INLINE void util_format_i8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = (unsigned)rgba; /* r */ dst[1] = (unsigned)rgba; /* g */ dst[2] = (unsigned)rgba; /* b */ dst[3] = (unsigned)rgba; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)MIN2(src[0], 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = (unsigned)rgba; /* r */ dst[1] = (unsigned)rgba; /* g */ dst[2] = (unsigned)rgba; /* b */ dst[3] = (unsigned)rgba; /* a */ } static INLINE void util_format_i8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgba; rgba = value; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[0], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8_uint { uint8_t value; struct { uint8_t rgb; } chan; }; static INLINE void util_format_l8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)MIN2(src[0], 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; uint8_t rgb; rgb = value; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)CLAMP(src[0], 0, 255); *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8a8_uint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t rgb; uint8_t a; #else uint8_t rgb; uint8_t a; #endif } chan; }; static INLINE void util_format_l8a8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) << 8; value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; value |= ((uint8_t)MIN2(src[3], 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8a8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_l8a8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = value >> 8; a = (value) & 0xff; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t rgb; uint16_t a; rgb = (value) & 0xff; a = value >> 8; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 8; value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= ((uint8_t)CLAMP(src[3], 0, 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a8_sint { uint8_t value; struct { int8_t a; } chan; }; static INLINE void util_format_a8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)CLAMP(src[3], -128, 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ } static INLINE void util_format_a8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t a; a = (int8_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)MIN2(src[3], 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i8_sint { uint8_t value; struct { int8_t rgba; } chan; }; static INLINE void util_format_i8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ } static INLINE void util_format_i8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgba; rgba = (int8_t)(value) ; dst[0] = (unsigned)MAX2(rgba, 0); /* r */ dst[1] = (unsigned)MAX2(rgba, 0); /* g */ dst[2] = (unsigned)MAX2(rgba, 0); /* b */ dst[3] = (unsigned)MAX2(rgba, 0); /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8_sint { uint8_t value; struct { int8_t rgb; } chan; }; static INLINE void util_format_l8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint8_t value = *(const uint8_t *)src; int8_t rgb; rgb = (int8_t)(value) ; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = 1; /* a */ src += 1; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint8_t value = 0; value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; *(uint8_t *)dst = value; src += 4; dst += 1; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l8a8_sint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t rgb; int8_t a; #else int8_t rgb; int8_t a; #endif } chan; }; static INLINE void util_format_l8a8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) << 8) ; value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l8a8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif } static INLINE void util_format_l8a8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t rgb; int16_t a; rgb = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l8a8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) << 8) ; value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a16_uint { uint16_t value; struct { uint16_t a; } chan; }; static INLINE void util_format_a16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)MIN2(src[3], 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ } static INLINE void util_format_a16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)CLAMP(src[3], 0, 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i16_uint { uint16_t value; struct { uint16_t rgba; } chan; }; static INLINE void util_format_i16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (unsigned)rgba; /* r */ dst[1] = (unsigned)rgba; /* g */ dst[2] = (unsigned)rgba; /* b */ dst[3] = (unsigned)rgba; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)MIN2(src[0], 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (unsigned)rgba; /* r */ dst[1] = (unsigned)rgba; /* g */ dst[2] = (unsigned)rgba; /* b */ dst[3] = (unsigned)rgba; /* a */ } static INLINE void util_format_i16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgba; rgba = value; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)CLAMP(src[0], 0, 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16_uint { uint16_t value; struct { uint16_t rgb; } chan; }; static INLINE void util_format_l16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)MIN2(src[0], 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; uint16_t rgb; rgb = value; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)CLAMP(src[0], 0, 65535); *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16a16_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t rgb; uint16_t a; #else uint16_t rgb; uint16_t a; #endif } chan; }; static INLINE void util_format_l16a16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) << 16; value |= ((uint16_t)MIN2(src[3], 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; value |= ((uint16_t)MIN2(src[3], 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16a16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (unsigned)rgb; /* r */ dst[1] = (unsigned)rgb; /* g */ dst[2] = (unsigned)rgb; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_l16a16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = value >> 16; a = (value) & 0xffff; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t rgb; uint32_t a; rgb = (value) & 0xffff; a = value >> 16; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) << 16; value |= ((uint16_t)CLAMP(src[3], 0, 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; value |= ((uint16_t)CLAMP(src[3], 0, 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a16_sint { uint16_t value; struct { int16_t a; } chan; }; static INLINE void util_format_a16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)CLAMP(src[3], -32768, 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ } static INLINE void util_format_a16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t a; a = (int16_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)MIN2(src[3], 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i16_sint { uint16_t value; struct { int16_t rgba; } chan; }; static INLINE void util_format_i16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (int)rgba; /* r */ dst[1] = (int)rgba; /* g */ dst[2] = (int)rgba; /* b */ dst[3] = (int)rgba; /* a */ } static INLINE void util_format_i16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgba; rgba = (int16_t)(value) ; dst[0] = (unsigned)MAX2(rgba, 0); /* r */ dst[1] = (unsigned)MAX2(rgba, 0); /* g */ dst[2] = (unsigned)MAX2(rgba, 0); /* b */ dst[3] = (unsigned)MAX2(rgba, 0); /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16_sint { uint16_t value; struct { int16_t rgb; } chan; }; static INLINE void util_format_l16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint16_t value = *(const uint16_t *)src; int16_t rgb; rgb = (int16_t)(value) ; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = 1; /* a */ src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint16_t value = 0; value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; *(uint16_t *)dst = value; src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l16a16_sint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t rgb; int16_t a; #else int16_t rgb; int16_t a; #endif } chan; }; static INLINE void util_format_l16a16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l16a16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (int)rgb; /* r */ dst[1] = (int)rgb; /* g */ dst[2] = (int)rgb; /* b */ dst[3] = (int)a; /* a */ #endif } static INLINE void util_format_l16a16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t rgb; int32_t a; rgb = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l16a16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) << 16) ; value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a32_uint { uint32_t value; struct { uint32_t a; } chan; }; static INLINE void util_format_a32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= src[3]; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ } static INLINE void util_format_a32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t a; a = value; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)MIN2(a, 2147483647); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)MAX2(src[3], 0); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i32_uint { uint32_t value; struct { uint32_t rgba; } chan; }; static INLINE void util_format_i32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t rgba; rgba = value; dst[0] = rgba; /* r */ dst[1] = rgba; /* g */ dst[2] = rgba; /* b */ dst[3] = rgba; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= src[0]; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t rgba; rgba = value; dst[0] = rgba; /* r */ dst[1] = rgba; /* g */ dst[2] = rgba; /* b */ dst[3] = rgba; /* a */ } static INLINE void util_format_i32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t rgba; rgba = value; dst[0] = (int)MIN2(rgba, 2147483647); /* r */ dst[1] = (int)MIN2(rgba, 2147483647); /* g */ dst[2] = (int)MIN2(rgba, 2147483647); /* b */ dst[3] = (int)MIN2(rgba, 2147483647); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)MAX2(src[0], 0); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32_uint { uint32_t value; struct { uint32_t rgb; } chan; }; static INLINE void util_format_l32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t rgb; rgb = value; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= src[0]; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; uint32_t rgb; rgb = value; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; uint32_t rgb; rgb = value; dst[0] = (int)MIN2(rgb, 2147483647); /* r */ dst[1] = (int)MIN2(rgb, 2147483647); /* g */ dst[2] = (int)MIN2(rgb, 2147483647); /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)MAX2(src[0], 0); *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32a32_uint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t rgb; uint32_t a; #else uint32_t rgb; uint32_t a; #endif } chan; }; static INLINE void util_format_l32a32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_uint pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_uint pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_l32a32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.rgb, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.rgb, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.rgb, 2147483647); /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #else union util_format_l32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.rgb, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.rgb, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.rgb, 2147483647); /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_uint pixel; pixel.chan.rgb = (uint32_t)MAX2(src[0], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_uint pixel; pixel.chan.rgb = (uint32_t)MAX2(src[0], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_a32_sint { uint32_t value; struct { int32_t a; } chan; }; static INLINE void util_format_a32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t a; a = (int32_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(src[3]) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t a; a = (int32_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = a; /* a */ } static INLINE void util_format_a32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t a; a = (int32_t)(value) ; dst[0] = 0; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_a32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)MIN2(src[3], 2147483647)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_i32_sint { uint32_t value; struct { int32_t rgba; } chan; }; static INLINE void util_format_i32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t rgba; rgba = (int32_t)(value) ; dst[0] = rgba; /* r */ dst[1] = rgba; /* g */ dst[2] = rgba; /* b */ dst[3] = rgba; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(src[0]) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_i32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t rgba; rgba = (int32_t)(value) ; dst[0] = rgba; /* r */ dst[1] = rgba; /* g */ dst[2] = rgba; /* b */ dst[3] = rgba; /* a */ } static INLINE void util_format_i32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t rgba; rgba = (int32_t)(value) ; dst[0] = (unsigned)MAX2(rgba, 0); /* r */ dst[1] = (unsigned)MAX2(rgba, 0); /* g */ dst[2] = (unsigned)MAX2(rgba, 0); /* b */ dst[3] = (unsigned)MAX2(rgba, 0); /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_i32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32_sint { uint32_t value; struct { int32_t rgb; } chan; }; static INLINE void util_format_l32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t rgb; rgb = (int32_t)(value) ; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)(src[0]) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { uint32_t value = *(const uint32_t *)src; int32_t rgb; rgb = (int32_t)(value) ; dst[0] = rgb; /* r */ dst[1] = rgb; /* g */ dst[2] = rgb; /* b */ dst[3] = 1; /* a */ } static INLINE void util_format_l32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { uint32_t value = *(const uint32_t *)src; int32_t rgb; rgb = (int32_t)(value) ; dst[0] = (unsigned)MAX2(rgb, 0); /* r */ dst[1] = (unsigned)MAX2(rgb, 0); /* g */ dst[2] = (unsigned)MAX2(rgb, 0); /* b */ dst[3] = 1; /* a */ src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { uint32_t value = 0; value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; *(uint32_t *)dst = value; src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_l32a32_sint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t rgb; int32_t a; #else int32_t rgb; int32_t a; #endif } chan; }; static INLINE void util_format_l32a32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_sint pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_sint pixel; pixel.chan.rgb = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_l32a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.rgb; /* r */ dst[1] = pixel.chan.rgb; /* g */ dst[2] = pixel.chan.rgb; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_l32a32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.rgb, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.rgb, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.rgb, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #else union util_format_l32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.rgb, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.rgb, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.rgb, 0); /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_l32a32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_l32a32_sint pixel; pixel.chan.rgb = (int32_t)MIN2(src[0], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_l32a32_sint pixel; pixel.chan.rgb = (int32_t)MIN2(src[0], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10a2_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #else unsigned b:10; unsigned g:10; unsigned r:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_b10g10r10a2_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)MIN2(src[2], 1023)) << 22; value |= (((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; value |= (((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 2; value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)MIN2(src[2], 1023)) & 0x3ff; value |= (((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; value |= (((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 20; value |= ((uint32_t)MIN2(src[3], 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10a2_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_b10g10r10a2_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; uint32_t a; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10a2_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)CLAMP(src[2], 0, 1023)) << 22; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; value |= (((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 2; value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; value |= (((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 20; value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8x8_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; uint8_t x; #else int8_t r; int8_t g; int8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8g8b8x8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 24) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f)) & 0xff) << 8) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)util_iround(CLAMP(src[2], -1, 1) * 0x7f)) & 0xff) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8x8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = (float)(g * (1.0f/0x7f)); /* g */ dst[2] = (float)(b * (1.0f/0x7f)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8x8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(b, 0)) * 0xff / 0x7f); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = (uint8_t)(((uint32_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ dst[2] = (uint8_t)(((uint32_t)MAX2(b, 0)) * 0xff / 0x7f); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)(src[0] >> 1)) << 24) ; value |= (uint32_t)((((int8_t)(src[1] >> 1)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)(src[2] >> 1)) & 0xff) << 8) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)(src[0] >> 1)) & 0xff) ; value |= (uint32_t)((((int8_t)(src[1] >> 1)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)(src[2] >> 1)) & 0xff) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8x8_srgb { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t x; #else uint8_t r; uint8_t g; uint8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8g8b8x8_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) << 24; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; value |= ((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8x8_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8x8_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) << 24; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; value |= ((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; value |= ((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8x8_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t g; uint8_t b; uint8_t x; #else uint8_t r; uint8_t g; uint8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8g8b8x8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) << 24; value |= (((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; value |= (((uint8_t)MIN2(src[2], 255)) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; value |= (((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; value |= (((uint8_t)MIN2(src[2], 255)) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8x8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8x8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = value >> 24; g = (value >> 16) & 0xff; b = (value >> 8) & 0xff; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; r = (value) & 0xff; g = (value >> 8) & 0xff; b = (value >> 16) & 0xff; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 24; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= (((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; value |= (((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8g8b8x8_sint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t g; int8_t b; uint8_t x; #else int8_t r; int8_t g; int8_t b; uint8_t x; #endif } chan; }; static INLINE void util_format_r8g8b8x8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) << 24) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint32_t)((((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8g8b8x8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r8g8b8x8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value) ) >> 24; g = ((int32_t)(value << 8) ) >> 24; b = ((int32_t)(value << 16) ) >> 24; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = (unsigned)MAX2(b, 0); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t g; int32_t b; r = ((int32_t)(value << 24) ) >> 24; g = ((int32_t)(value << 16) ) >> 24; b = ((int32_t)(value << 8) ) >> 24; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = (unsigned)MAX2(g, 0); /* g */ dst[2] = (unsigned)MAX2(b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8g8b8x8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) << 24) ; value |= (uint32_t)((((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; value |= (uint32_t)((((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; value |= (uint32_t)((((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; value |= (uint32_t)((((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b10g10r10x2_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:10; unsigned g:10; unsigned r:10; unsigned x:2; #else unsigned b:10; unsigned g:10; unsigned r:10; unsigned x:2; #endif } chan; }; static INLINE void util_format_b10g10r10x2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = 1; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10x2_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) << 22; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 12; value |= (((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff) << 2; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)util_iround(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff; value |= (((uint32_t)util_iround(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 10; value |= (((uint32_t)util_iround(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff) << 20; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b10g10r10x2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = 1; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b10g10r10x2_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = value >> 22; g = (value >> 12) & 0x3ff; r = (value >> 2) & 0x3ff; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = 255; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t b; uint32_t g; uint32_t r; b = (value) & 0x3ff; g = (value >> 10) & 0x3ff; r = (value >> 20) & 0x3ff; dst[0] = (uint8_t)(r >> 2); /* r */ dst[1] = (uint8_t)(g >> 2); /* g */ dst[2] = (uint8_t)(b >> 2); /* b */ dst[3] = 255; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b10g10r10x2_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) << 22; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 12; value |= (((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) & 0x3ff) << 2; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)(((uint32_t)src[2]) * 0x3ff / 0xff)) & 0x3ff; value |= (((uint32_t)(((uint32_t)src[1]) * 0x3ff / 0xff)) & 0x3ff) << 10; value |= (((uint32_t)(((uint32_t)src[0]) * 0x3ff / 0xff)) & 0x3ff) << 20; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16x16_unorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t x; #else uint16_t r; uint16_t g; uint16_t b; uint16_t x; #endif } chan; }; static INLINE void util_format_r16g16b16x16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_unorm pixel; pixel.chan.r = (uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff); pixel.chan.g = (uint16_t)util_iround(CLAMP(src[1], 0, 1) * 0xffff); pixel.chan.b = (uint16_t)util_iround(CLAMP(src[2], 0, 1) * 0xffff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16x16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0xffff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0xffff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0xffff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16x16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16x16_unorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(pixel.chan.r >> 8); /* r */ dst[1] = (uint8_t)(pixel.chan.g >> 8); /* g */ dst[2] = (uint8_t)(pixel.chan.b >> 8); /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_unorm pixel; pixel.chan.r = (uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff); pixel.chan.g = (uint16_t)(((uint32_t)src[1]) * 0xffff / 0xff); pixel.chan.b = (uint16_t)(((uint32_t)src[2]) * 0xffff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16x16_snorm { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; uint16_t x; #else int16_t r; int16_t g; int16_t b; uint16_t x; #endif } chan; }; static INLINE void util_format_r16g16b16x16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_snorm pixel; pixel.chan.r = (int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff); pixel.chan.g = (int16_t)util_iround(CLAMP(src[1], -1, 1) * 0x7fff); pixel.chan.b = (int16_t)util_iround(CLAMP(src[2], -1, 1) * 0x7fff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16x16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (float)(pixel.chan.r * (1.0f/0x7fff)); /* r */ dst[1] = (float)(pixel.chan.g * (1.0f/0x7fff)); /* g */ dst[2] = (float)(pixel.chan.b * (1.0f/0x7fff)); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16x16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16x16_snorm pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (uint8_t)(MAX2(pixel.chan.r, 0) >> 7); /* r */ dst[1] = (uint8_t)(MAX2(pixel.chan.g, 0) >> 7); /* g */ dst[2] = (uint8_t)(MAX2(pixel.chan.b, 0) >> 7); /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_snorm pixel; pixel.chan.r = (int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff); pixel.chan.g = (int16_t)(((uint32_t)src[1]) * 0x7fff / 0xff); pixel.chan.b = (int16_t)(((uint32_t)src[2]) * 0x7fff / 0xff); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16x16_float { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t x; #else uint16_t r; uint16_t g; uint16_t b; uint16_t x; #endif } chan; }; static INLINE void util_format_r16g16b16x16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.g = util_float_to_half(src[1]); pixel.chan.b = util_float_to_half(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16x16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = util_half_to_float(pixel.chan.g); /* g */ dst[2] = util_half_to_float(pixel.chan.b); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16x16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = 255; /* a */ #else union util_format_r16g16b16x16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = float_to_ubyte(util_half_to_float(pixel.chan.g)); /* g */ dst[2] = float_to_ubyte(util_half_to_float(pixel.chan.b)); /* b */ dst[3] = 255; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.g = util_float_to_half((float)(src[1] * (1.0f/0xff))); pixel.chan.b = util_float_to_half((float)(src[2] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16x16_uint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t g; uint16_t b; uint16_t x; #else uint16_t r; uint16_t g; uint16_t b; uint16_t x; #endif } chan; }; static INLINE void util_format_r16g16b16x16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_uint pixel; pixel.chan.r = (uint16_t)MIN2(src[0], 65535); pixel.chan.g = (uint16_t)MIN2(src[1], 65535); pixel.chan.b = (uint16_t)MIN2(src[2], 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16x16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)pixel.chan.r; /* r */ dst[1] = (unsigned)pixel.chan.g; /* g */ dst[2] = (unsigned)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16x16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_uint pixel; pixel.chan.r = (uint16_t)CLAMP(src[0], 0, 65535); pixel.chan.g = (uint16_t)CLAMP(src[1], 0, 65535); pixel.chan.b = (uint16_t)CLAMP(src[2], 0, 65535); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16g16b16x16_sint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t g; int16_t b; uint16_t x; #else int16_t r; int16_t g; int16_t b; uint16_t x; #endif } chan; }; static INLINE void util_format_r16g16b16x16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_sint pixel; pixel.chan.r = (int16_t)CLAMP(src[0], -32768, 32767); pixel.chan.g = (int16_t)CLAMP(src[1], -32768, 32767); pixel.chan.b = (int16_t)CLAMP(src[2], -32768, 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16g16b16x16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)pixel.chan.r; /* r */ dst[1] = (int)pixel.chan.g; /* g */ dst[2] = (int)pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r16g16b16x16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #else union util_format_r16g16b16x16_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16g16b16x16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16g16b16x16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16g16b16x16_sint pixel; pixel.chan.r = (int16_t)MIN2(src[0], 32767); pixel.chan.g = (int16_t)MIN2(src[1], 32767); pixel.chan.b = (int16_t)MIN2(src[2], 32767); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32x32_float { struct { #ifdef PIPE_ARCH_BIG_ENDIAN float r; float g; float b; uint32_t x; #else float r; float g; float b; uint32_t x; #endif } chan; }; static INLINE void util_format_r32g32b32x32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_float pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32x32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32x32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #else union util_format_r32g32b32x32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = float_to_ubyte(pixel.chan.g); /* g */ dst[2] = float_to_ubyte(pixel.chan.b); /* b */ dst[3] = 255; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.g = ubyte_to_float(src[1]); pixel.chan.b = ubyte_to_float(src[2]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32x32_uint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t g; uint32_t b; uint32_t x; #else uint32_t r; uint32_t g; uint32_t b; uint32_t x; #endif } chan; }; static INLINE void util_format_r32g32b32x32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_uint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32x32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32x32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = (int)MIN2(pixel.chan.g, 2147483647); /* g */ dst[2] = (int)MIN2(pixel.chan.b, 2147483647); /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.g = (uint32_t)MAX2(src[1], 0); pixel.chan.b = (uint32_t)MAX2(src[2], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32g32b32x32_sint { struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t g; int32_t b; uint32_t x; #else int32_t r; int32_t g; int32_t b; uint32_t x; #endif } chan; }; static INLINE void util_format_r32g32b32x32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_sint pixel; pixel.chan.r = src[0]; pixel.chan.g = src[1]; pixel.chan.b = src[2]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32g32b32x32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = pixel.chan.g; /* g */ dst[2] = pixel.chan.b; /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_r32g32b32x32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #else union util_format_r32g32b32x32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = (unsigned)MAX2(pixel.chan.g, 0); /* g */ dst[2] = (unsigned)MAX2(pixel.chan.b, 0); /* b */ dst[3] = 1; /* a */ #endif src += 16; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32g32b32x32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32g32b32x32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32g32b32x32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.g = (int32_t)MIN2(src[1], 2147483647); pixel.chan.b = (int32_t)MIN2(src[2], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 16; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8a8_snorm { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t a; #else int8_t r; int8_t a; #endif } chan; }; static INLINE void util_format_r8a8_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) << 8) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1, 1) * 0x7f)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8a8_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (float)(r * (1.0f/0x7f)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7f)); /* a */ #endif } static INLINE void util_format_r8a8_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (uint8_t)(((uint32_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x7f); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) << 8) ; value |= (uint16_t)(((int8_t)(src[3] >> 1)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)(src[0] >> 1)) & 0xff) ; value |= (uint16_t)(((int8_t)(src[3] >> 1)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16a16_unorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t a; #else uint16_t r; uint16_t a; #endif } chan; }; static INLINE void util_format_r16a16_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) << 16; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)util_iround(CLAMP(src[0], 0, 1) * 0xffff)) & 0xffff; value |= ((uint16_t)util_iround(CLAMP(src[3], 0, 1) * 0xffff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16a16_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (float)(r * (1.0f/0xffff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0xffff)); /* a */ #endif } static INLINE void util_format_r16a16_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (uint8_t)(r >> 8); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(a >> 8); /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (uint8_t)(r >> 8); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(a >> 8); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) << 16; value |= ((uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)(((uint32_t)src[0]) * 0xffff / 0xff)) & 0xffff; value |= ((uint16_t)(((uint32_t)src[3]) * 0xffff / 0xff)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16a16_snorm { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t a; #else int16_t r; int16_t a; #endif } chan; }; static INLINE void util_format_r16a16_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) << 16) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1, 1) * 0x7fff)) & 0xffff) ; value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1, 1) * 0x7fff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16a16_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ #endif } static INLINE void util_format_r16a16_snorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (uint8_t)(MAX2(r, 0) >> 7); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(MAX2(a, 0) >> 7); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (uint8_t)(MAX2(r, 0) >> 7); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (uint8_t)(MAX2(a, 0) >> 7); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_snorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) << 16) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x7fff / 0xff)) & 0xffff) ; value |= (uint32_t)(((int16_t)(((uint32_t)src[3]) * 0x7fff / 0xff)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16a16_float { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t a; #else uint16_t r; uint16_t a; #endif } chan; }; static INLINE void util_format_r16a16_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16a16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16a16_float pixel; pixel.chan.r = util_float_to_half(src[0]); pixel.chan.a = util_float_to_half(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16a16_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #else union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = util_half_to_float(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = util_half_to_float(pixel.chan.a); /* a */ #endif } static INLINE void util_format_r16a16_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #else union util_format_r16a16_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(util_half_to_float(pixel.chan.r)); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(util_half_to_float(pixel.chan.a)); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r16a16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r16a16_float pixel; pixel.chan.r = util_float_to_half((float)(src[0] * (1.0f/0xff))); pixel.chan.a = util_float_to_half((float)(src[3] * (1.0f/0xff))); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32a32_float { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN float r; float a; #else float r; float a; #endif } chan; }; static INLINE void util_format_r32a32_float_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_float_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_float pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_float pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32a32_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #else union util_format_r32a32_float pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = float_to_ubyte(pixel.chan.r); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = float_to_ubyte(pixel.chan.a); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_float pixel; pixel.chan.r = ubyte_to_float(src[0]); pixel.chan.a = ubyte_to_float(src[3]); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8a8_uint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint8_t r; uint8_t a; #else uint8_t r; uint8_t a; #endif } chan; }; static INLINE void util_format_r8a8_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) << 8; value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; value |= ((uint8_t)MIN2(src[3], 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8a8_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_r8a8_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = value >> 8; a = (value) & 0xff; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t r; uint16_t a; r = (value) & 0xff; a = value >> 8; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) << 8; value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; value |= ((uint8_t)CLAMP(src[3], 0, 255)) << 8; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r8a8_sint { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int8_t r; int8_t a; #else int8_t r; int8_t a; #endif } chan; }; static INLINE void util_format_r8a8_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) << 8) ; value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r8a8_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif } static INLINE void util_format_r8a8_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value) ) >> 8; a = ((int16_t)(value << 8) ) >> 8; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #else uint16_t value = *(const uint16_t *)src; int16_t r; int16_t a; r = ((int16_t)(value << 8) ) >> 8; a = ((int16_t)(value) ) >> 8; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r8a8_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) << 8) ; value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) << 8) ; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16a16_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t r; uint16_t a; #else uint16_t r; uint16_t a; #endif } chan; }; static INLINE void util_format_r16a16_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) << 16; value |= ((uint16_t)MIN2(src[3], 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; value |= ((uint16_t)MIN2(src[3], 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16a16_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (unsigned)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_r16a16_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = value >> 16; a = (value) & 0xffff; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t a; r = (value) & 0xffff; a = value >> 16; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) << 16; value |= ((uint16_t)CLAMP(src[3], 0, 65535)) & 0xffff; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; value |= ((uint16_t)CLAMP(src[3], 0, 65535)) << 16; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r16a16_sint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int16_t r; int16_t a; #else int16_t r; int16_t a; #endif } chan; }; static INLINE void util_format_r16a16_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r16a16_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (int)r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)a; /* a */ #endif } static INLINE void util_format_r16a16_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value) ) >> 16; a = ((int32_t)(value << 16) ) >> 16; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #else uint32_t value = *(const uint32_t *)src; int32_t r; int32_t a; r = ((int32_t)(value << 16) ) >> 16; a = ((int32_t)(value) ) >> 16; dst[0] = (unsigned)MAX2(r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(a, 0); /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r16a16_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) << 16) ; value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) & 0xffff) ; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) << 16) ; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32a32_uint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t r; uint32_t a; #else uint32_t r; uint32_t a; #endif } chan; }; static INLINE void util_format_r32a32_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_uint pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_uint pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32a32_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #else union util_format_r32a32_uint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (int)MIN2(pixel.chan.r, 2147483647); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (int)MIN2(pixel.chan.a, 2147483647); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_uint pixel; pixel.chan.r = (uint32_t)MAX2(src[0], 0); pixel.chan.a = (uint32_t)MAX2(src[3], 0); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r32a32_sint { uint64_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN int32_t r; int32_t a; #else int32_t r; int32_t a; #endif } chan; }; static INLINE void util_format_r32a32_sint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_sint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_sint pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_sint pixel; pixel.chan.r = src[0]; pixel.chan.a = src[3]; memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r32a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #else union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = pixel.chan.r; /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = pixel.chan.a; /* a */ #endif } static INLINE void util_format_r32a32_sint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #else union util_format_r32a32_sint pixel; memcpy(&pixel, src, sizeof pixel); dst[0] = (unsigned)MAX2(pixel.chan.r, 0); /* r */ dst[1] = 0; /* g */ dst[2] = 0; /* b */ dst[3] = (unsigned)MAX2(pixel.chan.a, 0); /* a */ #endif src += 8; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r32a32_sint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN union util_format_r32a32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #else union util_format_r32a32_sint pixel; pixel.chan.r = (int32_t)MIN2(src[0], 2147483647); pixel.chan.a = (int32_t)MIN2(src[3], 2147483647); memcpy(dst, &pixel, sizeof pixel); #endif src += 4; dst += 8; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_r10g10b10a2_uint { uint32_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #else unsigned r:10; unsigned g:10; unsigned b:10; unsigned a:2; #endif } chan; }; static INLINE void util_format_r10g10b10a2_uint_unpack_unsigned(unsigned *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { unsigned *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_uint_pack_unsigned(uint8_t *dst_row, unsigned dst_stride, const unsigned *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const unsigned *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)MIN2(src[0], 1023)) << 22; value |= (((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; value |= (((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 2; value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)MIN2(src[0], 1023)) & 0x3ff; value |= (((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; value |= (((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 20; value |= ((uint32_t)MIN2(src[3], 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_r10g10b10a2_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (unsigned)r; /* r */ dst[1] = (unsigned)g; /* g */ dst[2] = (unsigned)b; /* b */ dst[3] = (unsigned)a; /* a */ #endif } static INLINE void util_format_r10g10b10a2_uint_unpack_signed(int *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { int *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = value >> 22; g = (value >> 12) & 0x3ff; b = (value >> 2) & 0x3ff; a = (value) & 0x3; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #else uint32_t value = *(const uint32_t *)src; uint32_t r; uint32_t g; uint32_t b; uint32_t a; r = (value) & 0x3ff; g = (value >> 10) & 0x3ff; b = (value >> 20) & 0x3ff; a = value >> 30; dst[0] = (int)r; /* r */ dst[1] = (int)g; /* g */ dst[2] = (int)b; /* b */ dst[3] = (int)a; /* a */ #endif src += 4; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_r10g10b10a2_uint_pack_signed(uint8_t *dst_row, unsigned dst_stride, const int *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const int *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) << 22; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 2; value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; *(uint32_t *)dst = value; #else uint32_t value = 0; value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; *(uint32_t *)dst = value; #endif src += 4; dst += 4; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } union util_format_b5g6r5_srgb { uint16_t value; struct { #ifdef PIPE_ARCH_BIG_ENDIAN unsigned b:5; unsigned g:6; unsigned r:5; #else unsigned b:5; unsigned g:6; unsigned r:5; #endif } chan; }; static INLINE void util_format_b5g6r5_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { float *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ dst[3] = 1; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g6r5_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const float *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) << 11; value |= ((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; value |= (util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) & 0x1f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) & 0x1f; value |= ((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; value |= (util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) << 11; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } static INLINE void util_format_b5g6r5_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ dst[3] = 1; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ dst[3] = 1; /* a */ #endif } static INLINE void util_format_b5g6r5_srgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { uint8_t *dst = dst_row; const uint8_t *src = src_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = value >> 11; g = (value >> 5) & 0x3f; r = (value) & 0x1f; dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ dst[3] = 255; /* a */ #else uint16_t value = *(const uint16_t *)src; uint16_t b; uint16_t g; uint16_t r; b = (value) & 0x1f; g = (value >> 5) & 0x3f; r = value >> 11; dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ dst[3] = 255; /* a */ #endif src += 2; dst += 4; } src_row += src_stride; dst_row += dst_stride/sizeof(*dst_row); } } static INLINE void util_format_b5g6r5_srgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) { unsigned x, y; for(y = 0; y < height; y += 1) { const uint8_t *src = src_row; uint8_t *dst = dst_row; for(x = 0; x < width; x += 1) { #ifdef PIPE_ARCH_BIG_ENDIAN uint16_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2]) >> 3) << 11; value |= ((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; value |= (util_format_linear_to_srgb_8unorm(src[0]) >> 3) & 0x1f; *(uint16_t *)dst = value; #else uint16_t value = 0; value |= (util_format_linear_to_srgb_8unorm(src[2]) >> 3) & 0x1f; value |= ((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; value |= (util_format_linear_to_srgb_8unorm(src[0]) >> 3) << 11; *(uint16_t *)dst = value; #endif src += 4; dst += 2; } dst_row += dst_stride; src_row += src_stride/sizeof(*src_row); } } const struct util_format_description util_format_none_description = { PIPE_FORMAT_NONE, "PIPE_FORMAT_NONE", "none", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_none_unpack_rgba_8unorm, &util_format_none_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_none_unpack_rgba_float, &util_format_none_pack_rgba_float, &util_format_none_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b8g8r8a8_unorm_description = { PIPE_FORMAT_B8G8R8A8_UNORM, "PIPE_FORMAT_B8G8R8A8_UNORM", "b8g8r8a8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b8g8r8a8_unorm_unpack_rgba_8unorm, &util_format_b8g8r8a8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b8g8r8a8_unorm_unpack_rgba_float, &util_format_b8g8r8a8_unorm_pack_rgba_float, &util_format_b8g8r8a8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b8g8r8x8_unorm_description = { PIPE_FORMAT_B8G8R8X8_UNORM, "PIPE_FORMAT_B8G8R8X8_UNORM", "b8g8r8x8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b8g8r8x8_unorm_unpack_rgba_8unorm, &util_format_b8g8r8x8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b8g8r8x8_unorm_unpack_rgba_float, &util_format_b8g8r8x8_unorm_pack_rgba_float, &util_format_b8g8r8x8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8r8g8b8_unorm_description = { PIPE_FORMAT_A8R8G8B8_UNORM, "PIPE_FORMAT_A8R8G8B8_UNORM", "a8r8g8b8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = b */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = b */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_W, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_W, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_a8r8g8b8_unorm_unpack_rgba_8unorm, &util_format_a8r8g8b8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8r8g8b8_unorm_unpack_rgba_float, &util_format_a8r8g8b8_unorm_pack_rgba_float, &util_format_a8r8g8b8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x8r8g8b8_unorm_description = { PIPE_FORMAT_X8R8G8B8_UNORM, "PIPE_FORMAT_X8R8G8B8_UNORM", "x8r8g8b8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = b */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = b */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_W, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_W, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_x8r8g8b8_unorm_unpack_rgba_8unorm, &util_format_x8r8g8b8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_x8r8g8b8_unorm_unpack_rgba_float, &util_format_x8r8g8b8_unorm_pack_rgba_float, &util_format_x8r8g8b8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8b8g8r8_unorm_description = { PIPE_FORMAT_A8B8G8R8_UNORM, "PIPE_FORMAT_A8B8G8R8_UNORM", "a8b8g8r8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = r */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = r */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_W, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_Y, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_W, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_Y, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_a8b8g8r8_unorm_unpack_rgba_8unorm, &util_format_a8b8g8r8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8b8g8r8_unorm_unpack_rgba_float, &util_format_a8b8g8r8_unorm_pack_rgba_float, &util_format_a8b8g8r8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x8b8g8r8_unorm_description = { PIPE_FORMAT_X8B8G8R8_UNORM, "PIPE_FORMAT_X8B8G8R8_UNORM", "x8b8g8r8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = r */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = r */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_W, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_Y, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_W, /* r */ UTIL_FORMAT_SWIZZLE_Z, /* g */ UTIL_FORMAT_SWIZZLE_Y, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_x8b8g8r8_unorm_unpack_rgba_8unorm, &util_format_x8b8g8r8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_x8b8g8r8_unorm_unpack_rgba_float, &util_format_x8b8g8r8_unorm_pack_rgba_float, &util_format_x8b8g8r8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8x8_unorm_description = { PIPE_FORMAT_R8G8B8X8_UNORM, "PIPE_FORMAT_R8G8B8X8_UNORM", "r8g8b8x8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8x8_unorm_unpack_rgba_8unorm, &util_format_r8g8b8x8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8x8_unorm_unpack_rgba_float, &util_format_r8g8b8x8_unorm_pack_rgba_float, &util_format_r8g8b8x8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b5g5r5x1_unorm_description = { PIPE_FORMAT_B5G5R5X1_UNORM, "PIPE_FORMAT_B5G5R5X1_UNORM", "b5g5r5x1_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 6}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 1}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 1, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 10}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 1, 15} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b5g5r5x1_unorm_unpack_rgba_8unorm, &util_format_b5g5r5x1_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b5g5r5x1_unorm_unpack_rgba_float, &util_format_b5g5r5x1_unorm_pack_rgba_float, &util_format_b5g5r5x1_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b5g5r5a1_unorm_description = { PIPE_FORMAT_B5G5R5A1_UNORM, "PIPE_FORMAT_B5G5R5A1_UNORM", "b5g5r5a1_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 6}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 1}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 1, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 10}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 1, 15} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b5g5r5a1_unorm_unpack_rgba_8unorm, &util_format_b5g5r5a1_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b5g5r5a1_unorm_unpack_rgba_float, &util_format_b5g5r5a1_unorm_pack_rgba_float, &util_format_b5g5r5a1_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b4g4r4a4_unorm_description = { PIPE_FORMAT_B4G4R4A4_UNORM, "PIPE_FORMAT_B4G4R4A4_UNORM", "b4g4r4a4_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 12}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 8}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 12} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b4g4r4a4_unorm_unpack_rgba_8unorm, &util_format_b4g4r4a4_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b4g4r4a4_unorm_unpack_rgba_float, &util_format_b4g4r4a4_unorm_pack_rgba_float, &util_format_b4g4r4a4_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b4g4r4x4_unorm_description = { PIPE_FORMAT_B4G4R4X4_UNORM, "PIPE_FORMAT_B4G4R4X4_UNORM", "b4g4r4x4_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 12}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 4, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 8}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 4, 12} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b4g4r4x4_unorm_unpack_rgba_8unorm, &util_format_b4g4r4x4_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b4g4r4x4_unorm_unpack_rgba_float, &util_format_b4g4r4x4_unorm_pack_rgba_float, &util_format_b4g4r4x4_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b5g6r5_unorm_description = { PIPE_FORMAT_B5G6R5_UNORM, "PIPE_FORMAT_B5G6R5_UNORM", "b5g6r5_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* z = r */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* z = r */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b5g6r5_unorm_unpack_rgba_8unorm, &util_format_b5g6r5_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b5g6r5_unorm_unpack_rgba_float, &util_format_b5g6r5_unorm_pack_rgba_float, &util_format_b5g6r5_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10a2_unorm_description = { PIPE_FORMAT_R10G10B10A2_UNORM, "PIPE_FORMAT_R10G10B10A2_UNORM", "r10g10b10a2_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10a2_unorm_unpack_rgba_8unorm, &util_format_r10g10b10a2_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10a2_unorm_unpack_rgba_float, &util_format_r10g10b10a2_unorm_pack_rgba_float, &util_format_r10g10b10a2_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10a2_unorm_description = { PIPE_FORMAT_B10G10R10A2_UNORM, "PIPE_FORMAT_B10G10R10A2_UNORM", "b10g10r10a2_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b10g10r10a2_unorm_unpack_rgba_8unorm, &util_format_b10g10r10a2_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b10g10r10a2_unorm_unpack_rgba_float, &util_format_b10g10r10a2_unorm_pack_rgba_float, &util_format_b10g10r10a2_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b2g3r3_unorm_description = { PIPE_FORMAT_B2G3R3_UNORM, "PIPE_FORMAT_B2G3R3_UNORM", "b2g3r3_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 6}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 3, 3}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 3, 0}, /* z = r */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 3, 2}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 3, 5}, /* z = r */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b2g3r3_unorm_unpack_rgba_8unorm, &util_format_b2g3r3_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b2g3r3_unorm_unpack_rgba_float, &util_format_b2g3r3_unorm_pack_rgba_float, &util_format_b2g3r3_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8_unorm_description = { PIPE_FORMAT_L8_UNORM, "PIPE_FORMAT_L8_UNORM", "l8_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l8_unorm_unpack_rgba_8unorm, &util_format_l8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8_unorm_unpack_rgba_float, &util_format_l8_unorm_pack_rgba_float, &util_format_l8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8_unorm_description = { PIPE_FORMAT_A8_UNORM, "PIPE_FORMAT_A8_UNORM", "a8_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a8_unorm_unpack_rgba_8unorm, &util_format_a8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8_unorm_unpack_rgba_float, &util_format_a8_unorm_pack_rgba_float, &util_format_a8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i8_unorm_description = { PIPE_FORMAT_I8_UNORM, "PIPE_FORMAT_I8_UNORM", "i8_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i8_unorm_unpack_rgba_8unorm, &util_format_i8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i8_unorm_unpack_rgba_float, &util_format_i8_unorm_pack_rgba_float, &util_format_i8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l4a4_unorm_description = { PIPE_FORMAT_L4A4_UNORM, "PIPE_FORMAT_L4A4_UNORM", "l4a4_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l4a4_unorm_unpack_rgba_8unorm, &util_format_l4a4_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l4a4_unorm_unpack_rgba_float, &util_format_l4a4_unorm_pack_rgba_float, &util_format_l4a4_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8a8_unorm_description = { PIPE_FORMAT_L8A8_UNORM, "PIPE_FORMAT_L8A8_UNORM", "l8a8_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l8a8_unorm_unpack_rgba_8unorm, &util_format_l8a8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8a8_unorm_unpack_rgba_float, &util_format_l8a8_unorm_pack_rgba_float, &util_format_l8a8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16_unorm_description = { PIPE_FORMAT_L16_UNORM, "PIPE_FORMAT_L16_UNORM", "l16_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16_unorm_unpack_rgba_8unorm, &util_format_l16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16_unorm_unpack_rgba_float, &util_format_l16_unorm_pack_rgba_float, &util_format_l16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a16_unorm_description = { PIPE_FORMAT_A16_UNORM, "PIPE_FORMAT_A16_UNORM", "a16_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a16_unorm_unpack_rgba_8unorm, &util_format_a16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a16_unorm_unpack_rgba_float, &util_format_a16_unorm_pack_rgba_float, &util_format_a16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i16_unorm_description = { PIPE_FORMAT_I16_UNORM, "PIPE_FORMAT_I16_UNORM", "i16_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i16_unorm_unpack_rgba_8unorm, &util_format_i16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i16_unorm_unpack_rgba_float, &util_format_i16_unorm_pack_rgba_float, &util_format_i16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16a16_unorm_description = { PIPE_FORMAT_L16A16_UNORM, "PIPE_FORMAT_L16A16_UNORM", "l16a16_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16a16_unorm_unpack_rgba_8unorm, &util_format_l16a16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16a16_unorm_unpack_rgba_float, &util_format_l16a16_unorm_pack_rgba_float, &util_format_l16a16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8_snorm_description = { PIPE_FORMAT_A8_SNORM, "PIPE_FORMAT_A8_SNORM", "a8_snorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a8_snorm_unpack_rgba_8unorm, &util_format_a8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8_snorm_unpack_rgba_float, &util_format_a8_snorm_pack_rgba_float, &util_format_a8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8_snorm_description = { PIPE_FORMAT_L8_SNORM, "PIPE_FORMAT_L8_SNORM", "l8_snorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l8_snorm_unpack_rgba_8unorm, &util_format_l8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8_snorm_unpack_rgba_float, &util_format_l8_snorm_pack_rgba_float, &util_format_l8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8a8_snorm_description = { PIPE_FORMAT_L8A8_SNORM, "PIPE_FORMAT_L8A8_SNORM", "l8a8_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l8a8_snorm_unpack_rgba_8unorm, &util_format_l8a8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8a8_snorm_unpack_rgba_float, &util_format_l8a8_snorm_pack_rgba_float, &util_format_l8a8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i8_snorm_description = { PIPE_FORMAT_I8_SNORM, "PIPE_FORMAT_I8_SNORM", "i8_snorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i8_snorm_unpack_rgba_8unorm, &util_format_i8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i8_snorm_unpack_rgba_float, &util_format_i8_snorm_pack_rgba_float, &util_format_i8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a16_snorm_description = { PIPE_FORMAT_A16_SNORM, "PIPE_FORMAT_A16_SNORM", "a16_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a16_snorm_unpack_rgba_8unorm, &util_format_a16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a16_snorm_unpack_rgba_float, &util_format_a16_snorm_pack_rgba_float, &util_format_a16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16_snorm_description = { PIPE_FORMAT_L16_SNORM, "PIPE_FORMAT_L16_SNORM", "l16_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16_snorm_unpack_rgba_8unorm, &util_format_l16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16_snorm_unpack_rgba_float, &util_format_l16_snorm_pack_rgba_float, &util_format_l16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16a16_snorm_description = { PIPE_FORMAT_L16A16_SNORM, "PIPE_FORMAT_L16A16_SNORM", "l16a16_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16a16_snorm_unpack_rgba_8unorm, &util_format_l16a16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16a16_snorm_unpack_rgba_float, &util_format_l16a16_snorm_pack_rgba_float, &util_format_l16a16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i16_snorm_description = { PIPE_FORMAT_I16_SNORM, "PIPE_FORMAT_I16_SNORM", "i16_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i16_snorm_unpack_rgba_8unorm, &util_format_i16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i16_snorm_unpack_rgba_float, &util_format_i16_snorm_pack_rgba_float, &util_format_i16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a16_float_description = { PIPE_FORMAT_A16_FLOAT, "PIPE_FORMAT_A16_FLOAT", "a16_float", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a16_float_unpack_rgba_8unorm, &util_format_a16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a16_float_unpack_rgba_float, &util_format_a16_float_pack_rgba_float, &util_format_a16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16_float_description = { PIPE_FORMAT_L16_FLOAT, "PIPE_FORMAT_L16_FLOAT", "l16_float", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16_float_unpack_rgba_8unorm, &util_format_l16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16_float_unpack_rgba_float, &util_format_l16_float_pack_rgba_float, &util_format_l16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16a16_float_description = { PIPE_FORMAT_L16A16_FLOAT, "PIPE_FORMAT_L16A16_FLOAT", "l16a16_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* x = rgb */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l16a16_float_unpack_rgba_8unorm, &util_format_l16a16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l16a16_float_unpack_rgba_float, &util_format_l16a16_float_pack_rgba_float, &util_format_l16a16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i16_float_description = { PIPE_FORMAT_I16_FLOAT, "PIPE_FORMAT_I16_FLOAT", "i16_float", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i16_float_unpack_rgba_8unorm, &util_format_i16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i16_float_unpack_rgba_float, &util_format_i16_float_pack_rgba_float, &util_format_i16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a32_float_description = { PIPE_FORMAT_A32_FLOAT, "PIPE_FORMAT_A32_FLOAT", "a32_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_a32_float_unpack_rgba_8unorm, &util_format_a32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a32_float_unpack_rgba_float, &util_format_a32_float_pack_rgba_float, &util_format_a32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32_float_description = { PIPE_FORMAT_L32_FLOAT, "PIPE_FORMAT_L32_FLOAT", "l32_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_l32_float_unpack_rgba_8unorm, &util_format_l32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l32_float_unpack_rgba_float, &util_format_l32_float_pack_rgba_float, &util_format_l32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32a32_float_description = { PIPE_FORMAT_L32A32_FLOAT, "PIPE_FORMAT_L32A32_FLOAT", "l32a32_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* x = rgb */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_l32a32_float_unpack_rgba_8unorm, &util_format_l32a32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l32a32_float_unpack_rgba_float, &util_format_l32a32_float_pack_rgba_float, &util_format_l32a32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i32_float_description = { PIPE_FORMAT_I32_FLOAT, "PIPE_FORMAT_I32_FLOAT", "i32_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_i32_float_unpack_rgba_8unorm, &util_format_i32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_i32_float_unpack_rgba_float, &util_format_i32_float_pack_rgba_float, &util_format_i32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8_srgb_description = { PIPE_FORMAT_L8_SRGB, "PIPE_FORMAT_L8_SRGB", "l8_srgb", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_X, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_l8_srgb_unpack_rgba_8unorm, &util_format_l8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8_srgb_unpack_rgba_float, &util_format_l8_srgb_pack_rgba_float, &util_format_l8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8a8_srgb_description = { PIPE_FORMAT_L8A8_SRGB, "PIPE_FORMAT_L8A8_SRGB", "l8a8_srgb", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_X, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_X, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_l8a8_srgb_unpack_rgba_8unorm, &util_format_l8a8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_l8a8_srgb_unpack_rgba_float, &util_format_l8a8_srgb_pack_rgba_float, &util_format_l8a8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_srgb_description = { PIPE_FORMAT_R8G8B8_SRGB, "PIPE_FORMAT_R8G8B8_SRGB", "r8g8b8_srgb", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_r8g8b8_srgb_unpack_rgba_8unorm, &util_format_r8g8b8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8_srgb_unpack_rgba_float, &util_format_r8g8b8_srgb_pack_rgba_float, &util_format_r8g8b8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_srgb_description = { PIPE_FORMAT_R8G8B8A8_SRGB, "PIPE_FORMAT_R8G8B8A8_SRGB", "r8g8b8a8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_r8g8b8a8_srgb_unpack_rgba_8unorm, &util_format_r8g8b8a8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8a8_srgb_unpack_rgba_float, &util_format_r8g8b8a8_srgb_pack_rgba_float, &util_format_r8g8b8a8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8b8g8r8_srgb_description = { PIPE_FORMAT_A8B8G8R8_SRGB, "PIPE_FORMAT_A8B8G8R8_SRGB", "a8b8g8r8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = r */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = r */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_W, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_Y, /* sb */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_W, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_Y, /* sb */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_a8b8g8r8_srgb_unpack_rgba_8unorm, &util_format_a8b8g8r8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8b8g8r8_srgb_unpack_rgba_float, &util_format_a8b8g8r8_srgb_pack_rgba_float, &util_format_a8b8g8r8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x8b8g8r8_srgb_description = { PIPE_FORMAT_X8B8G8R8_SRGB, "PIPE_FORMAT_X8B8G8R8_SRGB", "x8b8g8r8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = r */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = r */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_W, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_Y, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_W, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_Y, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_x8b8g8r8_srgb_unpack_rgba_8unorm, &util_format_x8b8g8r8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_x8b8g8r8_srgb_unpack_rgba_float, &util_format_x8b8g8r8_srgb_pack_rgba_float, &util_format_x8b8g8r8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b8g8r8a8_srgb_description = { PIPE_FORMAT_B8G8R8A8_SRGB, "PIPE_FORMAT_B8G8R8A8_SRGB", "b8g8r8a8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_b8g8r8a8_srgb_unpack_rgba_8unorm, &util_format_b8g8r8a8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b8g8r8a8_srgb_unpack_rgba_float, &util_format_b8g8r8a8_srgb_pack_rgba_float, &util_format_b8g8r8a8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b8g8r8x8_srgb_description = { PIPE_FORMAT_B8G8R8X8_SRGB, "PIPE_FORMAT_B8G8R8X8_SRGB", "b8g8r8x8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_b8g8r8x8_srgb_unpack_rgba_8unorm, &util_format_b8g8r8x8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b8g8r8x8_srgb_unpack_rgba_float, &util_format_b8g8r8x8_srgb_pack_rgba_float, &util_format_b8g8r8x8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8r8g8b8_srgb_description = { PIPE_FORMAT_A8R8G8B8_SRGB, "PIPE_FORMAT_A8R8G8B8_SRGB", "a8r8g8b8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = b */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = b */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_W, /* sb */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_W, /* sb */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_a8r8g8b8_srgb_unpack_rgba_8unorm, &util_format_a8r8g8b8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8r8g8b8_srgb_unpack_rgba_float, &util_format_a8r8g8b8_srgb_pack_rgba_float, &util_format_a8r8g8b8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x8r8g8b8_srgb_description = { PIPE_FORMAT_X8R8G8B8_SRGB, "PIPE_FORMAT_X8R8G8B8_SRGB", "x8r8g8b8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = b */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = b */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_W, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* sr */ UTIL_FORMAT_SWIZZLE_Z, /* sg */ UTIL_FORMAT_SWIZZLE_W, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_x8r8g8b8_srgb_unpack_rgba_8unorm, &util_format_x8r8g8b8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_x8r8g8b8_srgb_unpack_rgba_float, &util_format_x8r8g8b8_srgb_pack_rgba_float, &util_format_x8r8g8b8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8sg8sb8ux8u_norm_description = { PIPE_FORMAT_R8SG8SB8UX8U_NORM, "PIPE_FORMAT_R8SG8SB8UX8U_NORM", "r8sg8sb8ux8u_norm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8sg8sb8ux8u_norm_unpack_rgba_8unorm, &util_format_r8sg8sb8ux8u_norm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8sg8sb8ux8u_norm_unpack_rgba_float, &util_format_r8sg8sb8ux8u_norm_pack_rgba_float, &util_format_r8sg8sb8ux8u_norm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10sg10sb10sa2u_norm_description = { PIPE_FORMAT_R10SG10SB10SA2U_NORM, "PIPE_FORMAT_R10SG10SB10SA2U_NORM", "r10sg10sb10sa2u_norm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10sg10sb10sa2u_norm_unpack_rgba_8unorm, &util_format_r10sg10sb10sa2u_norm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10sg10sb10sa2u_norm_unpack_rgba_float, &util_format_r10sg10sb10sa2u_norm_pack_rgba_float, &util_format_r10sg10sb10sa2u_norm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r5sg5sb6u_norm_description = { PIPE_FORMAT_R5SG5SB6U_NORM, "PIPE_FORMAT_R5SG5SB6U_NORM", "r5sg5sb6u_norm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 5, 11}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 5, 6}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 5, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 5, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 10}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r5sg5sb6u_norm_unpack_rgba_8unorm, &util_format_r5sg5sb6u_norm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r5sg5sb6u_norm_unpack_rgba_float, &util_format_r5sg5sb6u_norm_pack_rgba_float, &util_format_r5sg5sb6u_norm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_s8_uint_description = { PIPE_FORMAT_S8_UINT, "PIPE_FORMAT_S8_UINT", "s8_uint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = s */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_X, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ &util_format_s8_uint_unpack_s_8uint, &util_format_s8_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z16_unorm_description = { PIPE_FORMAT_Z16_UNORM, "PIPE_FORMAT_Z16_UNORM", "z16_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z16_unorm_unpack_z_32unorm, &util_format_z16_unorm_pack_z_32unorm, &util_format_z16_unorm_unpack_z_float, &util_format_z16_unorm_pack_z_float, NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z32_unorm_description = { PIPE_FORMAT_Z32_UNORM, "PIPE_FORMAT_Z32_UNORM", "z32_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* x = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z32_unorm_unpack_z_32unorm, &util_format_z32_unorm_pack_z_32unorm, &util_format_z32_unorm_unpack_z_float, &util_format_z32_unorm_pack_z_float, NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z32_float_description = { PIPE_FORMAT_Z32_FLOAT, "PIPE_FORMAT_Z32_FLOAT", "z32_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z32_float_unpack_z_32unorm, &util_format_z32_float_pack_z_32unorm, &util_format_z32_float_unpack_z_float, &util_format_z32_float_pack_z_float, NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z24_unorm_s8_uint_description = { PIPE_FORMAT_Z24_UNORM_S8_UINT, "PIPE_FORMAT_Z24_UNORM_S8_UINT", "z24_unorm_s8_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 8}, /* x = z */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* y = s */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 0}, /* x = z */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* y = s */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z24_unorm_s8_uint_unpack_z_32unorm, &util_format_z24_unorm_s8_uint_pack_z_32unorm, &util_format_z24_unorm_s8_uint_unpack_z_float, &util_format_z24_unorm_s8_uint_pack_z_float, &util_format_z24_unorm_s8_uint_unpack_s_8uint, &util_format_z24_unorm_s8_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_s8_uint_z24_unorm_description = { PIPE_FORMAT_S8_UINT_Z24_UNORM, "PIPE_FORMAT_S8_UINT_Z24_UNORM", "s8_uint_z24_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* x = s */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 0}, /* y = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = s */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 8}, /* y = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* z */ UTIL_FORMAT_SWIZZLE_X, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* z */ UTIL_FORMAT_SWIZZLE_X, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_s8_uint_z24_unorm_unpack_z_32unorm, &util_format_s8_uint_z24_unorm_pack_z_32unorm, &util_format_s8_uint_z24_unorm_unpack_z_float, &util_format_s8_uint_z24_unorm_pack_z_float, &util_format_s8_uint_z24_unorm_unpack_s_8uint, &util_format_s8_uint_z24_unorm_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x24s8_uint_description = { PIPE_FORMAT_X24S8_UINT, "PIPE_FORMAT_X24S8_UINT", "x24s8_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 8}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* y = s */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* y = s */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ &util_format_x24s8_uint_unpack_s_8uint, &util_format_x24s8_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_s8x24_uint_description = { PIPE_FORMAT_S8X24_UINT, "PIPE_FORMAT_S8X24_UINT", "s8x24_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* x = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 0}, /* y = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 8}, /* y = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_X, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_X, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ &util_format_s8x24_uint_unpack_s_8uint, &util_format_s8x24_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z24x8_unorm_description = { PIPE_FORMAT_Z24X8_UNORM, "PIPE_FORMAT_Z24X8_UNORM", "z24x8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 8}, /* x = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* y = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 0}, /* x = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* y = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z24x8_unorm_unpack_z_32unorm, &util_format_z24x8_unorm_pack_z_32unorm, &util_format_z24x8_unorm_unpack_z_float, &util_format_z24x8_unorm_pack_z_float, NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x8z24_unorm_description = { PIPE_FORMAT_X8Z24_UNORM, "PIPE_FORMAT_X8Z24_UNORM", "x8z24_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 0}, /* y = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 24, 8}, /* y = z */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* z */ UTIL_FORMAT_SWIZZLE_NONE, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_x8z24_unorm_unpack_z_32unorm, &util_format_x8z24_unorm_pack_z_32unorm, &util_format_x8z24_unorm_unpack_z_float, &util_format_x8z24_unorm_pack_z_float, NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_z32_float_s8x24_uint_description = { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, "PIPE_FORMAT_Z32_FLOAT_S8X24_UINT", "z32_float_s8x24_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ TRUE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* x = z */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* y = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 0}, /* z = x */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = z */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 32}, /* y = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 40}, /* z = x */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ &util_format_z32_float_s8x24_uint_unpack_z_32unorm, &util_format_z32_float_s8x24_uint_pack_z_32unorm, &util_format_z32_float_s8x24_uint_unpack_z_float, &util_format_z32_float_s8x24_uint_pack_z_float, &util_format_z32_float_s8x24_uint_unpack_s_8uint, &util_format_z32_float_s8x24_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_x32_s8x24_uint_description = { PIPE_FORMAT_X32_S8X24_UINT, "PIPE_FORMAT_X32_S8X24_UINT", "x32_s8x24_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 32}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* y = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 0}, /* z = x */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 32}, /* y = s */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 24, 40}, /* z = x */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_NONE, /* z */ UTIL_FORMAT_SWIZZLE_Y, /* s */ UTIL_FORMAT_SWIZZLE_NONE, /* ignored */ UTIL_FORMAT_SWIZZLE_NONE /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_ZS, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ &util_format_x32_s8x24_uint_unpack_s_8uint, &util_format_x32_s8x24_uint_pack_s_8uint, NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_uyvy_description = { PIPE_FORMAT_UYVY, "PIPE_FORMAT_UYVY", "uyvy", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_1 /* ignored */ }, UTIL_FORMAT_COLORSPACE_YUV, &util_format_uyvy_unpack_rgba_8unorm, &util_format_uyvy_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_uyvy_unpack_rgba_float, &util_format_uyvy_pack_rgba_float, &util_format_uyvy_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_yuyv_description = { PIPE_FORMAT_YUYV, "PIPE_FORMAT_YUYV", "yuyv", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_1 /* ignored */ }, UTIL_FORMAT_COLORSPACE_YUV, &util_format_yuyv_unpack_rgba_8unorm, &util_format_yuyv_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_yuyv_unpack_rgba_float, &util_format_yuyv_pack_rgba_float, &util_format_yuyv_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_b8g8_unorm_description = { PIPE_FORMAT_R8G8_B8G8_UNORM, "PIPE_FORMAT_R8G8_B8G8_UNORM", "r8g8_b8g8_unorm", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_b8g8_unorm_unpack_rgba_8unorm, &util_format_r8g8_b8g8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_b8g8_unorm_unpack_rgba_float, &util_format_r8g8_b8g8_unorm_pack_rgba_float, &util_format_r8g8_b8g8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_g8r8_g8b8_unorm_description = { PIPE_FORMAT_G8R8_G8B8_UNORM, "PIPE_FORMAT_G8R8_G8B8_UNORM", "g8r8_g8b8_unorm", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_g8r8_g8b8_unorm_unpack_rgba_8unorm, &util_format_g8r8_g8b8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_g8r8_g8b8_unorm_unpack_rgba_float, &util_format_g8r8_g8b8_unorm_pack_rgba_float, &util_format_g8r8_g8b8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_g8r8_b8r8_unorm_description = { PIPE_FORMAT_G8R8_B8R8_UNORM, "PIPE_FORMAT_G8R8_B8R8_UNORM", "g8r8_b8r8_unorm", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_g8r8_b8r8_unorm_unpack_rgba_8unorm, &util_format_g8r8_b8r8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_g8r8_b8r8_unorm_unpack_rgba_float, &util_format_g8r8_b8r8_unorm_pack_rgba_float, &util_format_g8r8_b8r8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_r8b8_unorm_description = { PIPE_FORMAT_R8G8_R8B8_UNORM, "PIPE_FORMAT_R8G8_R8B8_UNORM", "r8g8_r8b8_unorm", {2, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_SUBSAMPLED, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_r8b8_unorm_unpack_rgba_8unorm, &util_format_r8g8_r8b8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_r8b8_unorm_unpack_rgba_float, &util_format_r8g8_r8b8_unorm_pack_rgba_float, &util_format_r8g8_r8b8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r11g11b10_float_description = { PIPE_FORMAT_R11G11B10_FLOAT, "PIPE_FORMAT_R11G11B10_FLOAT", "r11g11b10_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r11g11b10_float_unpack_rgba_8unorm, &util_format_r11g11b10_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r11g11b10_float_unpack_rgba_float, &util_format_r11g11b10_float_pack_rgba_float, &util_format_r11g11b10_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r9g9b9e5_float_description = { PIPE_FORMAT_R9G9B9E5_FLOAT, "PIPE_FORMAT_R9G9B9E5_FLOAT", "r9g9b9e5_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r9g9b9e5_float_unpack_rgba_8unorm, &util_format_r9g9b9e5_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r9g9b9e5_float_unpack_rgba_float, &util_format_r9g9b9e5_float_pack_rgba_float, &util_format_r9g9b9e5_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r1_unorm_description = { PIPE_FORMAT_R1_UNORM, "PIPE_FORMAT_R1_UNORM", "r1_unorm", {8, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r1_unorm_unpack_rgba_8unorm, &util_format_r1_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r1_unorm_unpack_rgba_float, &util_format_r1_unorm_pack_rgba_float, &util_format_r1_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8bx_snorm_description = { PIPE_FORMAT_R8G8Bx_SNORM, "PIPE_FORMAT_R8G8Bx_SNORM", "r8g8bx_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 2, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* x = x */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* y = y */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = y */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8bx_snorm_unpack_rgba_8unorm, &util_format_r8g8bx_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8bx_snorm_unpack_rgba_float, &util_format_r8g8bx_snorm_pack_rgba_float, &util_format_r8g8bx_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt1_rgb_description = { PIPE_FORMAT_DXT1_RGB, "PIPE_FORMAT_DXT1_RGB", "dxt1_rgb", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_dxt1_rgb_unpack_rgba_8unorm, &util_format_dxt1_rgb_pack_rgba_8unorm, &util_format_dxt1_rgb_fetch_rgba_8unorm, &util_format_dxt1_rgb_unpack_rgba_float, &util_format_dxt1_rgb_pack_rgba_float, &util_format_dxt1_rgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt1_rgba_description = { PIPE_FORMAT_DXT1_RGBA, "PIPE_FORMAT_DXT1_RGBA", "dxt1_rgba", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_dxt1_rgba_unpack_rgba_8unorm, &util_format_dxt1_rgba_pack_rgba_8unorm, &util_format_dxt1_rgba_fetch_rgba_8unorm, &util_format_dxt1_rgba_unpack_rgba_float, &util_format_dxt1_rgba_pack_rgba_float, &util_format_dxt1_rgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt3_rgba_description = { PIPE_FORMAT_DXT3_RGBA, "PIPE_FORMAT_DXT3_RGBA", "dxt3_rgba", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_dxt3_rgba_unpack_rgba_8unorm, &util_format_dxt3_rgba_pack_rgba_8unorm, &util_format_dxt3_rgba_fetch_rgba_8unorm, &util_format_dxt3_rgba_unpack_rgba_float, &util_format_dxt3_rgba_pack_rgba_float, &util_format_dxt3_rgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt5_rgba_description = { PIPE_FORMAT_DXT5_RGBA, "PIPE_FORMAT_DXT5_RGBA", "dxt5_rgba", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_dxt5_rgba_unpack_rgba_8unorm, &util_format_dxt5_rgba_pack_rgba_8unorm, &util_format_dxt5_rgba_fetch_rgba_8unorm, &util_format_dxt5_rgba_unpack_rgba_float, &util_format_dxt5_rgba_pack_rgba_float, &util_format_dxt5_rgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt1_srgb_description = { PIPE_FORMAT_DXT1_SRGB, "PIPE_FORMAT_DXT1_SRGB", "dxt1_srgb", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_dxt1_srgb_unpack_rgba_8unorm, &util_format_dxt1_srgb_pack_rgba_8unorm, &util_format_dxt1_srgb_fetch_rgba_8unorm, &util_format_dxt1_srgb_unpack_rgba_float, &util_format_dxt1_srgb_pack_rgba_float, &util_format_dxt1_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt1_srgba_description = { PIPE_FORMAT_DXT1_SRGBA, "PIPE_FORMAT_DXT1_SRGBA", "dxt1_srgba", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_dxt1_srgba_unpack_rgba_8unorm, &util_format_dxt1_srgba_pack_rgba_8unorm, &util_format_dxt1_srgba_fetch_rgba_8unorm, &util_format_dxt1_srgba_unpack_rgba_float, &util_format_dxt1_srgba_pack_rgba_float, &util_format_dxt1_srgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt3_srgba_description = { PIPE_FORMAT_DXT3_SRGBA, "PIPE_FORMAT_DXT3_SRGBA", "dxt3_srgba", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_dxt3_srgba_unpack_rgba_8unorm, &util_format_dxt3_srgba_pack_rgba_8unorm, &util_format_dxt3_srgba_fetch_rgba_8unorm, &util_format_dxt3_srgba_unpack_rgba_float, &util_format_dxt3_srgba_pack_rgba_float, &util_format_dxt3_srgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_dxt5_srgba_description = { PIPE_FORMAT_DXT5_SRGBA, "PIPE_FORMAT_DXT5_SRGBA", "dxt5_srgba", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_S3TC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_dxt5_srgba_unpack_rgba_8unorm, &util_format_dxt5_srgba_pack_rgba_8unorm, &util_format_dxt5_srgba_fetch_rgba_8unorm, &util_format_dxt5_srgba_unpack_rgba_float, &util_format_dxt5_srgba_pack_rgba_float, &util_format_dxt5_srgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_rgtc1_unorm_description = { PIPE_FORMAT_RGTC1_UNORM, "PIPE_FORMAT_RGTC1_UNORM", "rgtc1_unorm", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_rgtc1_unorm_unpack_rgba_8unorm, &util_format_rgtc1_unorm_pack_rgba_8unorm, &util_format_rgtc1_unorm_fetch_rgba_8unorm, &util_format_rgtc1_unorm_unpack_rgba_float, &util_format_rgtc1_unorm_pack_rgba_float, &util_format_rgtc1_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_rgtc1_snorm_description = { PIPE_FORMAT_RGTC1_SNORM, "PIPE_FORMAT_RGTC1_SNORM", "rgtc1_snorm", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_rgtc1_snorm_unpack_rgba_8unorm, &util_format_rgtc1_snorm_pack_rgba_8unorm, &util_format_rgtc1_snorm_fetch_rgba_8unorm, &util_format_rgtc1_snorm_unpack_rgba_float, &util_format_rgtc1_snorm_pack_rgba_float, &util_format_rgtc1_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_rgtc2_unorm_description = { PIPE_FORMAT_RGTC2_UNORM, "PIPE_FORMAT_RGTC2_UNORM", "rgtc2_unorm", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_rgtc2_unorm_unpack_rgba_8unorm, &util_format_rgtc2_unorm_pack_rgba_8unorm, &util_format_rgtc2_unorm_fetch_rgba_8unorm, &util_format_rgtc2_unorm_unpack_rgba_float, &util_format_rgtc2_unorm_pack_rgba_float, &util_format_rgtc2_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_rgtc2_snorm_description = { PIPE_FORMAT_RGTC2_SNORM, "PIPE_FORMAT_RGTC2_SNORM", "rgtc2_snorm", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_rgtc2_snorm_unpack_rgba_8unorm, &util_format_rgtc2_snorm_pack_rgba_8unorm, &util_format_rgtc2_snorm_fetch_rgba_8unorm, &util_format_rgtc2_snorm_unpack_rgba_float, &util_format_rgtc2_snorm_pack_rgba_float, &util_format_rgtc2_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_latc1_unorm_description = { PIPE_FORMAT_LATC1_UNORM, "PIPE_FORMAT_LATC1_UNORM", "latc1_unorm", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_latc1_unorm_unpack_rgba_8unorm, &util_format_latc1_unorm_pack_rgba_8unorm, &util_format_latc1_unorm_fetch_rgba_8unorm, &util_format_latc1_unorm_unpack_rgba_float, &util_format_latc1_unorm_pack_rgba_float, &util_format_latc1_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_latc1_snorm_description = { PIPE_FORMAT_LATC1_SNORM, "PIPE_FORMAT_LATC1_SNORM", "latc1_snorm", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_latc1_snorm_unpack_rgba_8unorm, &util_format_latc1_snorm_pack_rgba_8unorm, &util_format_latc1_snorm_fetch_rgba_8unorm, &util_format_latc1_snorm_unpack_rgba_float, &util_format_latc1_snorm_pack_rgba_float, &util_format_latc1_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_latc2_unorm_description = { PIPE_FORMAT_LATC2_UNORM, "PIPE_FORMAT_LATC2_UNORM", "latc2_unorm", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_latc2_unorm_unpack_rgba_8unorm, &util_format_latc2_unorm_pack_rgba_8unorm, &util_format_latc2_unorm_fetch_rgba_8unorm, &util_format_latc2_unorm_unpack_rgba_float, &util_format_latc2_unorm_pack_rgba_float, &util_format_latc2_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_latc2_snorm_description = { PIPE_FORMAT_LATC2_SNORM, "PIPE_FORMAT_LATC2_SNORM", "latc2_snorm", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_RGTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_latc2_snorm_unpack_rgba_8unorm, &util_format_latc2_snorm_pack_rgba_8unorm, &util_format_latc2_snorm_fetch_rgba_8unorm, &util_format_latc2_snorm_unpack_rgba_float, &util_format_latc2_snorm_pack_rgba_float, &util_format_latc2_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_etc1_rgb8_description = { PIPE_FORMAT_ETC1_RGB8, "PIPE_FORMAT_ETC1_RGB8", "etc1_rgb8", {4, 4, 64}, /* block */ UTIL_FORMAT_LAYOUT_ETC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 64, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_etc1_rgb8_unpack_rgba_8unorm, &util_format_etc1_rgb8_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_etc1_rgb8_unpack_rgba_float, &util_format_etc1_rgb8_pack_rgba_float, &util_format_etc1_rgb8_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_bptc_rgba_unorm_description = { PIPE_FORMAT_BPTC_RGBA_UNORM, "PIPE_FORMAT_BPTC_RGBA_UNORM", "bptc_rgba_unorm", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_BPTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_bptc_rgba_unorm_unpack_rgba_8unorm, &util_format_bptc_rgba_unorm_pack_rgba_8unorm, &util_format_bptc_rgba_unorm_fetch_rgba_8unorm, &util_format_bptc_rgba_unorm_unpack_rgba_float, &util_format_bptc_rgba_unorm_pack_rgba_float, &util_format_bptc_rgba_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_bptc_srgba_description = { PIPE_FORMAT_BPTC_SRGBA, "PIPE_FORMAT_BPTC_SRGBA", "bptc_srgba", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_BPTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_W /* a */ }, UTIL_FORMAT_COLORSPACE_SRGB, &util_format_bptc_srgba_unpack_rgba_8unorm, &util_format_bptc_srgba_pack_rgba_8unorm, &util_format_bptc_srgba_fetch_rgba_8unorm, &util_format_bptc_srgba_unpack_rgba_float, &util_format_bptc_srgba_pack_rgba_float, &util_format_bptc_srgba_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_bptc_rgb_float_description = { PIPE_FORMAT_BPTC_RGB_FLOAT, "PIPE_FORMAT_BPTC_RGB_FLOAT", "bptc_rgb_float", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_BPTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_bptc_rgb_float_unpack_rgba_8unorm, &util_format_bptc_rgb_float_pack_rgba_8unorm, &util_format_bptc_rgb_float_fetch_rgba_8unorm, &util_format_bptc_rgb_float_unpack_rgba_float, &util_format_bptc_rgb_float_pack_rgba_float, &util_format_bptc_rgb_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_bptc_rgb_ufloat_description = { PIPE_FORMAT_BPTC_RGB_UFLOAT, "PIPE_FORMAT_BPTC_RGB_UFLOAT", "bptc_rgb_ufloat", {4, 4, 128}, /* block */ UTIL_FORMAT_LAYOUT_BPTC, 1, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 128, 0}, /* x = x */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_bptc_rgb_ufloat_unpack_rgba_8unorm, &util_format_bptc_rgb_ufloat_pack_rgba_8unorm, &util_format_bptc_rgb_ufloat_fetch_rgba_8unorm, &util_format_bptc_rgb_ufloat_unpack_rgba_float, &util_format_bptc_rgb_ufloat_pack_rgba_float, &util_format_bptc_rgb_ufloat_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r64_float_description = { PIPE_FORMAT_R64_FLOAT, "PIPE_FORMAT_R64_FLOAT", "r64_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r64_float_unpack_rgba_8unorm, &util_format_r64_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r64_float_unpack_rgba_float, &util_format_r64_float_pack_rgba_float, &util_format_r64_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r64g64_float_description = { PIPE_FORMAT_R64G64_FLOAT, "PIPE_FORMAT_R64G64_FLOAT", "r64g64_float", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r64g64_float_unpack_rgba_8unorm, &util_format_r64g64_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r64g64_float_unpack_rgba_float, &util_format_r64g64_float_pack_rgba_float, &util_format_r64g64_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r64g64b64_float_description = { PIPE_FORMAT_R64G64B64_FLOAT, "PIPE_FORMAT_R64G64B64_FLOAT", "r64g64b64_float", {1, 1, 192}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 128}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 128}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r64g64b64_float_unpack_rgba_8unorm, &util_format_r64g64b64_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r64g64b64_float_unpack_rgba_float, &util_format_r64g64b64_float_pack_rgba_float, &util_format_r64g64b64_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r64g64b64a64_float_description = { PIPE_FORMAT_R64G64B64A64_FLOAT, "PIPE_FORMAT_R64G64B64A64_FLOAT", "r64g64b64a64_float", {1, 1, 256}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 192}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 128}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 128}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 64, 192} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r64g64b64a64_float_unpack_rgba_8unorm, &util_format_r64g64b64a64_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r64g64b64a64_float_unpack_rgba_float, &util_format_r64g64b64a64_float_pack_rgba_float, &util_format_r64g64b64a64_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_float_description = { PIPE_FORMAT_R32_FLOAT, "PIPE_FORMAT_R32_FLOAT", "r32_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_float_unpack_rgba_8unorm, &util_format_r32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_float_unpack_rgba_float, &util_format_r32_float_pack_rgba_float, &util_format_r32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_float_description = { PIPE_FORMAT_R32G32_FLOAT, "PIPE_FORMAT_R32G32_FLOAT", "r32g32_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_float_unpack_rgba_8unorm, &util_format_r32g32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_float_unpack_rgba_float, &util_format_r32g32_float_pack_rgba_float, &util_format_r32g32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_float_description = { PIPE_FORMAT_R32G32B32_FLOAT, "PIPE_FORMAT_R32G32B32_FLOAT", "r32g32b32_float", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_float_unpack_rgba_8unorm, &util_format_r32g32b32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_float_unpack_rgba_float, &util_format_r32g32b32_float_pack_rgba_float, &util_format_r32g32b32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_float_description = { PIPE_FORMAT_R32G32B32A32_FLOAT, "PIPE_FORMAT_R32G32B32A32_FLOAT", "r32g32b32a32_float", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_float_unpack_rgba_8unorm, &util_format_r32g32b32a32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_float_unpack_rgba_float, &util_format_r32g32b32a32_float_pack_rgba_float, &util_format_r32g32b32a32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_unorm_description = { PIPE_FORMAT_R32_UNORM, "PIPE_FORMAT_R32_UNORM", "r32_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_unorm_unpack_rgba_8unorm, &util_format_r32_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_unorm_unpack_rgba_float, &util_format_r32_unorm_pack_rgba_float, &util_format_r32_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_unorm_description = { PIPE_FORMAT_R32G32_UNORM, "PIPE_FORMAT_R32G32_UNORM", "r32g32_unorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_unorm_unpack_rgba_8unorm, &util_format_r32g32_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_unorm_unpack_rgba_float, &util_format_r32g32_unorm_pack_rgba_float, &util_format_r32g32_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_unorm_description = { PIPE_FORMAT_R32G32B32_UNORM, "PIPE_FORMAT_R32G32B32_UNORM", "r32g32b32_unorm", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_unorm_unpack_rgba_8unorm, &util_format_r32g32b32_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_unorm_unpack_rgba_float, &util_format_r32g32b32_unorm_pack_rgba_float, &util_format_r32g32b32_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_unorm_description = { PIPE_FORMAT_R32G32B32A32_UNORM, "PIPE_FORMAT_R32G32B32A32_UNORM", "r32g32b32a32_unorm", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_unorm_unpack_rgba_8unorm, &util_format_r32g32b32a32_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_unorm_unpack_rgba_float, &util_format_r32g32b32a32_unorm_pack_rgba_float, &util_format_r32g32b32a32_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_uscaled_description = { PIPE_FORMAT_R32_USCALED, "PIPE_FORMAT_R32_USCALED", "r32_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_uscaled_unpack_rgba_8unorm, &util_format_r32_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_uscaled_unpack_rgba_float, &util_format_r32_uscaled_pack_rgba_float, &util_format_r32_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_uscaled_description = { PIPE_FORMAT_R32G32_USCALED, "PIPE_FORMAT_R32G32_USCALED", "r32g32_uscaled", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_uscaled_unpack_rgba_8unorm, &util_format_r32g32_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_uscaled_unpack_rgba_float, &util_format_r32g32_uscaled_pack_rgba_float, &util_format_r32g32_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_uscaled_description = { PIPE_FORMAT_R32G32B32_USCALED, "PIPE_FORMAT_R32G32B32_USCALED", "r32g32b32_uscaled", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_uscaled_unpack_rgba_8unorm, &util_format_r32g32b32_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_uscaled_unpack_rgba_float, &util_format_r32g32b32_uscaled_pack_rgba_float, &util_format_r32g32b32_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_uscaled_description = { PIPE_FORMAT_R32G32B32A32_USCALED, "PIPE_FORMAT_R32G32B32A32_USCALED", "r32g32b32a32_uscaled", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_uscaled_unpack_rgba_8unorm, &util_format_r32g32b32a32_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_uscaled_unpack_rgba_float, &util_format_r32g32b32a32_uscaled_pack_rgba_float, &util_format_r32g32b32a32_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_snorm_description = { PIPE_FORMAT_R32_SNORM, "PIPE_FORMAT_R32_SNORM", "r32_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_snorm_unpack_rgba_8unorm, &util_format_r32_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_snorm_unpack_rgba_float, &util_format_r32_snorm_pack_rgba_float, &util_format_r32_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_snorm_description = { PIPE_FORMAT_R32G32_SNORM, "PIPE_FORMAT_R32G32_SNORM", "r32g32_snorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_snorm_unpack_rgba_8unorm, &util_format_r32g32_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_snorm_unpack_rgba_float, &util_format_r32g32_snorm_pack_rgba_float, &util_format_r32g32_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_snorm_description = { PIPE_FORMAT_R32G32B32_SNORM, "PIPE_FORMAT_R32G32B32_SNORM", "r32g32b32_snorm", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_snorm_unpack_rgba_8unorm, &util_format_r32g32b32_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_snorm_unpack_rgba_float, &util_format_r32g32b32_snorm_pack_rgba_float, &util_format_r32g32b32_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_snorm_description = { PIPE_FORMAT_R32G32B32A32_SNORM, "PIPE_FORMAT_R32G32B32A32_SNORM", "r32g32b32a32_snorm", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_snorm_unpack_rgba_8unorm, &util_format_r32g32b32a32_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_snorm_unpack_rgba_float, &util_format_r32g32b32a32_snorm_pack_rgba_float, &util_format_r32g32b32a32_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_sscaled_description = { PIPE_FORMAT_R32_SSCALED, "PIPE_FORMAT_R32_SSCALED", "r32_sscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_sscaled_unpack_rgba_8unorm, &util_format_r32_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_sscaled_unpack_rgba_float, &util_format_r32_sscaled_pack_rgba_float, &util_format_r32_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_sscaled_description = { PIPE_FORMAT_R32G32_SSCALED, "PIPE_FORMAT_R32G32_SSCALED", "r32g32_sscaled", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_sscaled_unpack_rgba_8unorm, &util_format_r32g32_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_sscaled_unpack_rgba_float, &util_format_r32g32_sscaled_pack_rgba_float, &util_format_r32g32_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_sscaled_description = { PIPE_FORMAT_R32G32B32_SSCALED, "PIPE_FORMAT_R32G32B32_SSCALED", "r32g32b32_sscaled", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_sscaled_unpack_rgba_8unorm, &util_format_r32g32b32_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_sscaled_unpack_rgba_float, &util_format_r32g32b32_sscaled_pack_rgba_float, &util_format_r32g32b32_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_sscaled_description = { PIPE_FORMAT_R32G32B32A32_SSCALED, "PIPE_FORMAT_R32G32B32A32_SSCALED", "r32g32b32a32_sscaled", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_sscaled_unpack_rgba_8unorm, &util_format_r32g32b32a32_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_sscaled_unpack_rgba_float, &util_format_r32g32b32a32_sscaled_pack_rgba_float, &util_format_r32g32b32a32_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_float_description = { PIPE_FORMAT_R16_FLOAT, "PIPE_FORMAT_R16_FLOAT", "r16_float", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16_float_unpack_rgba_8unorm, &util_format_r16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16_float_unpack_rgba_float, &util_format_r16_float_pack_rgba_float, &util_format_r16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_float_description = { PIPE_FORMAT_R16G16_FLOAT, "PIPE_FORMAT_R16G16_FLOAT", "r16g16_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16_float_unpack_rgba_8unorm, &util_format_r16g16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16_float_unpack_rgba_float, &util_format_r16g16_float_pack_rgba_float, &util_format_r16g16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_float_description = { PIPE_FORMAT_R16G16B16_FLOAT, "PIPE_FORMAT_R16G16B16_FLOAT", "r16g16b16_float", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16_float_unpack_rgba_8unorm, &util_format_r16g16b16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16_float_unpack_rgba_float, &util_format_r16g16b16_float_pack_rgba_float, &util_format_r16g16b16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_float_description = { PIPE_FORMAT_R16G16B16A16_FLOAT, "PIPE_FORMAT_R16G16B16A16_FLOAT", "r16g16b16a16_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16a16_float_unpack_rgba_8unorm, &util_format_r16g16b16a16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16a16_float_unpack_rgba_float, &util_format_r16g16b16a16_float_pack_rgba_float, &util_format_r16g16b16a16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_unorm_description = { PIPE_FORMAT_R16_UNORM, "PIPE_FORMAT_R16_UNORM", "r16_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16_unorm_unpack_rgba_8unorm, &util_format_r16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16_unorm_unpack_rgba_float, &util_format_r16_unorm_pack_rgba_float, &util_format_r16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_unorm_description = { PIPE_FORMAT_R16G16_UNORM, "PIPE_FORMAT_R16G16_UNORM", "r16g16_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16_unorm_unpack_rgba_8unorm, &util_format_r16g16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16_unorm_unpack_rgba_float, &util_format_r16g16_unorm_pack_rgba_float, &util_format_r16g16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_unorm_description = { PIPE_FORMAT_R16G16B16_UNORM, "PIPE_FORMAT_R16G16B16_UNORM", "r16g16b16_unorm", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16_unorm_unpack_rgba_8unorm, &util_format_r16g16b16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16_unorm_unpack_rgba_float, &util_format_r16g16b16_unorm_pack_rgba_float, &util_format_r16g16b16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_unorm_description = { PIPE_FORMAT_R16G16B16A16_UNORM, "PIPE_FORMAT_R16G16B16A16_UNORM", "r16g16b16a16_unorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16a16_unorm_unpack_rgba_8unorm, &util_format_r16g16b16a16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16a16_unorm_unpack_rgba_float, &util_format_r16g16b16a16_unorm_pack_rgba_float, &util_format_r16g16b16a16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_uscaled_description = { PIPE_FORMAT_R16_USCALED, "PIPE_FORMAT_R16_USCALED", "r16_uscaled", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16_uscaled_unpack_rgba_8unorm, &util_format_r16_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16_uscaled_unpack_rgba_float, &util_format_r16_uscaled_pack_rgba_float, &util_format_r16_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_uscaled_description = { PIPE_FORMAT_R16G16_USCALED, "PIPE_FORMAT_R16G16_USCALED", "r16g16_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16_uscaled_unpack_rgba_8unorm, &util_format_r16g16_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16_uscaled_unpack_rgba_float, &util_format_r16g16_uscaled_pack_rgba_float, &util_format_r16g16_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_uscaled_description = { PIPE_FORMAT_R16G16B16_USCALED, "PIPE_FORMAT_R16G16B16_USCALED", "r16g16b16_uscaled", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16_uscaled_unpack_rgba_8unorm, &util_format_r16g16b16_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16_uscaled_unpack_rgba_float, &util_format_r16g16b16_uscaled_pack_rgba_float, &util_format_r16g16b16_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_uscaled_description = { PIPE_FORMAT_R16G16B16A16_USCALED, "PIPE_FORMAT_R16G16B16A16_USCALED", "r16g16b16a16_uscaled", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16a16_uscaled_unpack_rgba_8unorm, &util_format_r16g16b16a16_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16a16_uscaled_unpack_rgba_float, &util_format_r16g16b16a16_uscaled_pack_rgba_float, &util_format_r16g16b16a16_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_snorm_description = { PIPE_FORMAT_R16_SNORM, "PIPE_FORMAT_R16_SNORM", "r16_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16_snorm_unpack_rgba_8unorm, &util_format_r16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16_snorm_unpack_rgba_float, &util_format_r16_snorm_pack_rgba_float, &util_format_r16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_snorm_description = { PIPE_FORMAT_R16G16_SNORM, "PIPE_FORMAT_R16G16_SNORM", "r16g16_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16_snorm_unpack_rgba_8unorm, &util_format_r16g16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16_snorm_unpack_rgba_float, &util_format_r16g16_snorm_pack_rgba_float, &util_format_r16g16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_snorm_description = { PIPE_FORMAT_R16G16B16_SNORM, "PIPE_FORMAT_R16G16B16_SNORM", "r16g16b16_snorm", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16_snorm_unpack_rgba_8unorm, &util_format_r16g16b16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16_snorm_unpack_rgba_float, &util_format_r16g16b16_snorm_pack_rgba_float, &util_format_r16g16b16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_snorm_description = { PIPE_FORMAT_R16G16B16A16_SNORM, "PIPE_FORMAT_R16G16B16A16_SNORM", "r16g16b16a16_snorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16a16_snorm_unpack_rgba_8unorm, &util_format_r16g16b16a16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16a16_snorm_unpack_rgba_float, &util_format_r16g16b16a16_snorm_pack_rgba_float, &util_format_r16g16b16a16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_sscaled_description = { PIPE_FORMAT_R16_SSCALED, "PIPE_FORMAT_R16_SSCALED", "r16_sscaled", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16_sscaled_unpack_rgba_8unorm, &util_format_r16_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16_sscaled_unpack_rgba_float, &util_format_r16_sscaled_pack_rgba_float, &util_format_r16_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_sscaled_description = { PIPE_FORMAT_R16G16_SSCALED, "PIPE_FORMAT_R16G16_SSCALED", "r16g16_sscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16_sscaled_unpack_rgba_8unorm, &util_format_r16g16_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16_sscaled_unpack_rgba_float, &util_format_r16g16_sscaled_pack_rgba_float, &util_format_r16g16_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_sscaled_description = { PIPE_FORMAT_R16G16B16_SSCALED, "PIPE_FORMAT_R16G16B16_SSCALED", "r16g16b16_sscaled", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16_sscaled_unpack_rgba_8unorm, &util_format_r16g16b16_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16_sscaled_unpack_rgba_float, &util_format_r16g16b16_sscaled_pack_rgba_float, &util_format_r16g16b16_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_sscaled_description = { PIPE_FORMAT_R16G16B16A16_SSCALED, "PIPE_FORMAT_R16G16B16A16_SSCALED", "r16g16b16a16_sscaled", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16a16_sscaled_unpack_rgba_8unorm, &util_format_r16g16b16a16_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16a16_sscaled_unpack_rgba_float, &util_format_r16g16b16a16_sscaled_pack_rgba_float, &util_format_r16g16b16a16_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_unorm_description = { PIPE_FORMAT_R8_UNORM, "PIPE_FORMAT_R8_UNORM", "r8_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8_unorm_unpack_rgba_8unorm, &util_format_r8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8_unorm_unpack_rgba_float, &util_format_r8_unorm_pack_rgba_float, &util_format_r8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_unorm_description = { PIPE_FORMAT_R8G8_UNORM, "PIPE_FORMAT_R8G8_UNORM", "r8g8_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_unorm_unpack_rgba_8unorm, &util_format_r8g8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_unorm_unpack_rgba_float, &util_format_r8g8_unorm_pack_rgba_float, &util_format_r8g8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_unorm_description = { PIPE_FORMAT_R8G8B8_UNORM, "PIPE_FORMAT_R8G8B8_UNORM", "r8g8b8_unorm", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8_unorm_unpack_rgba_8unorm, &util_format_r8g8b8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8_unorm_unpack_rgba_float, &util_format_r8g8b8_unorm_pack_rgba_float, &util_format_r8g8b8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_unorm_description = { PIPE_FORMAT_R8G8B8A8_UNORM, "PIPE_FORMAT_R8G8B8A8_UNORM", "r8g8b8a8_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8a8_unorm_unpack_rgba_8unorm, &util_format_r8g8b8a8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8a8_unorm_unpack_rgba_float, &util_format_r8g8b8a8_unorm_pack_rgba_float, &util_format_r8g8b8a8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_uscaled_description = { PIPE_FORMAT_R8_USCALED, "PIPE_FORMAT_R8_USCALED", "r8_uscaled", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8_uscaled_unpack_rgba_8unorm, &util_format_r8_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8_uscaled_unpack_rgba_float, &util_format_r8_uscaled_pack_rgba_float, &util_format_r8_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_uscaled_description = { PIPE_FORMAT_R8G8_USCALED, "PIPE_FORMAT_R8G8_USCALED", "r8g8_uscaled", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_uscaled_unpack_rgba_8unorm, &util_format_r8g8_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_uscaled_unpack_rgba_float, &util_format_r8g8_uscaled_pack_rgba_float, &util_format_r8g8_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_uscaled_description = { PIPE_FORMAT_R8G8B8_USCALED, "PIPE_FORMAT_R8G8B8_USCALED", "r8g8b8_uscaled", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8_uscaled_unpack_rgba_8unorm, &util_format_r8g8b8_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8_uscaled_unpack_rgba_float, &util_format_r8g8b8_uscaled_pack_rgba_float, &util_format_r8g8b8_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_uscaled_description = { PIPE_FORMAT_R8G8B8A8_USCALED, "PIPE_FORMAT_R8G8B8A8_USCALED", "r8g8b8a8_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8a8_uscaled_unpack_rgba_8unorm, &util_format_r8g8b8a8_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8a8_uscaled_unpack_rgba_float, &util_format_r8g8b8a8_uscaled_pack_rgba_float, &util_format_r8g8b8a8_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_snorm_description = { PIPE_FORMAT_R8_SNORM, "PIPE_FORMAT_R8_SNORM", "r8_snorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8_snorm_unpack_rgba_8unorm, &util_format_r8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8_snorm_unpack_rgba_float, &util_format_r8_snorm_pack_rgba_float, &util_format_r8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_snorm_description = { PIPE_FORMAT_R8G8_SNORM, "PIPE_FORMAT_R8G8_SNORM", "r8g8_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_snorm_unpack_rgba_8unorm, &util_format_r8g8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_snorm_unpack_rgba_float, &util_format_r8g8_snorm_pack_rgba_float, &util_format_r8g8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_snorm_description = { PIPE_FORMAT_R8G8B8_SNORM, "PIPE_FORMAT_R8G8B8_SNORM", "r8g8b8_snorm", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8_snorm_unpack_rgba_8unorm, &util_format_r8g8b8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8_snorm_unpack_rgba_float, &util_format_r8g8b8_snorm_pack_rgba_float, &util_format_r8g8b8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_snorm_description = { PIPE_FORMAT_R8G8B8A8_SNORM, "PIPE_FORMAT_R8G8B8A8_SNORM", "r8g8b8a8_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8a8_snorm_unpack_rgba_8unorm, &util_format_r8g8b8a8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8a8_snorm_unpack_rgba_float, &util_format_r8g8b8a8_snorm_pack_rgba_float, &util_format_r8g8b8a8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_sscaled_description = { PIPE_FORMAT_R8_SSCALED, "PIPE_FORMAT_R8_SSCALED", "r8_sscaled", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8_sscaled_unpack_rgba_8unorm, &util_format_r8_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8_sscaled_unpack_rgba_float, &util_format_r8_sscaled_pack_rgba_float, &util_format_r8_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_sscaled_description = { PIPE_FORMAT_R8G8_SSCALED, "PIPE_FORMAT_R8G8_SSCALED", "r8g8_sscaled", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8_sscaled_unpack_rgba_8unorm, &util_format_r8g8_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8_sscaled_unpack_rgba_float, &util_format_r8g8_sscaled_pack_rgba_float, &util_format_r8g8_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_sscaled_description = { PIPE_FORMAT_R8G8B8_SSCALED, "PIPE_FORMAT_R8G8B8_SSCALED", "r8g8b8_sscaled", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8_sscaled_unpack_rgba_8unorm, &util_format_r8g8b8_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8_sscaled_unpack_rgba_float, &util_format_r8g8b8_sscaled_pack_rgba_float, &util_format_r8g8b8_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_sscaled_description = { PIPE_FORMAT_R8G8B8A8_SSCALED, "PIPE_FORMAT_R8G8B8A8_SSCALED", "r8g8b8a8_sscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8a8_sscaled_unpack_rgba_8unorm, &util_format_r8g8b8a8_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8a8_sscaled_unpack_rgba_float, &util_format_r8g8b8a8_sscaled_pack_rgba_float, &util_format_r8g8b8a8_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_fixed_description = { PIPE_FORMAT_R32_FIXED, "PIPE_FORMAT_R32_FIXED", "r32_fixed", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32_fixed_unpack_rgba_8unorm, &util_format_r32_fixed_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32_fixed_unpack_rgba_float, &util_format_r32_fixed_pack_rgba_float, &util_format_r32_fixed_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_fixed_description = { PIPE_FORMAT_R32G32_FIXED, "PIPE_FORMAT_R32G32_FIXED", "r32g32_fixed", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32_fixed_unpack_rgba_8unorm, &util_format_r32g32_fixed_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32_fixed_unpack_rgba_float, &util_format_r32g32_fixed_pack_rgba_float, &util_format_r32g32_fixed_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_fixed_description = { PIPE_FORMAT_R32G32B32_FIXED, "PIPE_FORMAT_R32G32B32_FIXED", "r32g32b32_fixed", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32_fixed_unpack_rgba_8unorm, &util_format_r32g32b32_fixed_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32_fixed_unpack_rgba_float, &util_format_r32g32b32_fixed_pack_rgba_float, &util_format_r32g32b32_fixed_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_fixed_description = { PIPE_FORMAT_R32G32B32A32_FIXED, "PIPE_FORMAT_R32G32B32A32_FIXED", "r32g32b32a32_fixed", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_FIXED, FALSE, FALSE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32a32_fixed_unpack_rgba_8unorm, &util_format_r32g32b32a32_fixed_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32a32_fixed_unpack_rgba_float, &util_format_r32g32b32a32_fixed_pack_rgba_float, &util_format_r32g32b32a32_fixed_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10x2_uscaled_description = { PIPE_FORMAT_R10G10B10X2_USCALED, "PIPE_FORMAT_R10G10B10X2_USCALED", "r10g10b10x2_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 30} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10x2_uscaled_unpack_rgba_8unorm, &util_format_r10g10b10x2_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10x2_uscaled_unpack_rgba_float, &util_format_r10g10b10x2_uscaled_pack_rgba_float, &util_format_r10g10b10x2_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10x2_snorm_description = { PIPE_FORMAT_R10G10B10X2_SNORM, "PIPE_FORMAT_R10G10B10X2_SNORM", "r10g10b10x2_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 30} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10x2_snorm_unpack_rgba_8unorm, &util_format_r10g10b10x2_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10x2_snorm_unpack_rgba_float, &util_format_r10g10b10x2_snorm_pack_rgba_float, &util_format_r10g10b10x2_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_yv12_description = { PIPE_FORMAT_YV12, "PIPE_FORMAT_YV12", "yv12", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 4, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = w */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = w */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_YUV, &util_format_yv12_unpack_rgba_8unorm, &util_format_yv12_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_yv12_unpack_rgba_float, &util_format_yv12_pack_rgba_float, &util_format_yv12_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_yv16_description = { PIPE_FORMAT_YV16, "PIPE_FORMAT_YV16", "yv16", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 4, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = w */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = w */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_YUV, &util_format_yv16_unpack_rgba_8unorm, &util_format_yv16_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_yv16_unpack_rgba_float, &util_format_yv16_pack_rgba_float, &util_format_yv16_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_iyuv_description = { PIPE_FORMAT_IYUV, "PIPE_FORMAT_IYUV", "iyuv", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 4, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = w */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = w */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_YUV, &util_format_iyuv_unpack_rgba_8unorm, &util_format_iyuv_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_iyuv_unpack_rgba_float, &util_format_iyuv_pack_rgba_float, &util_format_iyuv_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_nv12_description = { PIPE_FORMAT_NV12, "PIPE_FORMAT_NV12", "nv12", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 4, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = w */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = w */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_YUV, &util_format_nv12_unpack_rgba_8unorm, &util_format_nv12_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_nv12_unpack_rgba_float, &util_format_nv12_pack_rgba_float, &util_format_nv12_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_nv21_description = { PIPE_FORMAT_NV21, "PIPE_FORMAT_NV21", "nv21", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_OTHER, 4, /* nr_channels */ FALSE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = w */ }, #else { {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0}, /* x = x */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 8}, /* y = y */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 16}, /* z = z */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = w */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* y */ UTIL_FORMAT_SWIZZLE_Y, /* u */ UTIL_FORMAT_SWIZZLE_Z, /* v */ UTIL_FORMAT_SWIZZLE_W /* ignored */ }, #endif UTIL_FORMAT_COLORSPACE_YUV, &util_format_nv21_unpack_rgba_8unorm, &util_format_nv21_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_nv21_unpack_rgba_float, &util_format_nv21_pack_rgba_float, &util_format_nv21_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a4r4_unorm_description = { PIPE_FORMAT_A4R4_UNORM, "PIPE_FORMAT_A4R4_UNORM", "a4r4_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* y = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* y = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_a4r4_unorm_unpack_rgba_8unorm, &util_format_a4r4_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a4r4_unorm_unpack_rgba_float, &util_format_a4r4_unorm_pack_rgba_float, &util_format_a4r4_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r4a4_unorm_description = { PIPE_FORMAT_R4A4_UNORM, "PIPE_FORMAT_R4A4_UNORM", "r4a4_unorm", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 4, 4}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r4a4_unorm_unpack_rgba_8unorm, &util_format_r4a4_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r4a4_unorm_unpack_rgba_float, &util_format_r4a4_unorm_pack_rgba_float, &util_format_r4a4_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8a8_unorm_description = { PIPE_FORMAT_R8A8_UNORM, "PIPE_FORMAT_R8A8_UNORM", "r8a8_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8a8_unorm_unpack_rgba_8unorm, &util_format_r8a8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8a8_unorm_unpack_rgba_float, &util_format_r8a8_unorm_pack_rgba_float, &util_format_r8a8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8r8_unorm_description = { PIPE_FORMAT_A8R8_UNORM, "PIPE_FORMAT_A8R8_UNORM", "a8r8_unorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* y = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = a */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Y, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_a8r8_unorm_unpack_rgba_8unorm, &util_format_a8r8_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_a8r8_unorm_unpack_rgba_float, &util_format_a8r8_unorm_pack_rgba_float, &util_format_a8r8_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10a2_uscaled_description = { PIPE_FORMAT_R10G10B10A2_USCALED, "PIPE_FORMAT_R10G10B10A2_USCALED", "r10g10b10a2_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10a2_uscaled_unpack_rgba_8unorm, &util_format_r10g10b10a2_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10a2_uscaled_unpack_rgba_float, &util_format_r10g10b10a2_uscaled_pack_rgba_float, &util_format_r10g10b10a2_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10a2_sscaled_description = { PIPE_FORMAT_R10G10B10A2_SSCALED, "PIPE_FORMAT_R10G10B10A2_SSCALED", "r10g10b10a2_sscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10a2_sscaled_unpack_rgba_8unorm, &util_format_r10g10b10a2_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10a2_sscaled_unpack_rgba_float, &util_format_r10g10b10a2_sscaled_pack_rgba_float, &util_format_r10g10b10a2_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10a2_snorm_description = { PIPE_FORMAT_R10G10B10A2_SNORM, "PIPE_FORMAT_R10G10B10A2_SNORM", "r10g10b10a2_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r10g10b10a2_snorm_unpack_rgba_8unorm, &util_format_r10g10b10a2_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r10g10b10a2_snorm_unpack_rgba_float, &util_format_r10g10b10a2_snorm_pack_rgba_float, &util_format_r10g10b10a2_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10a2_uscaled_description = { PIPE_FORMAT_B10G10R10A2_USCALED, "PIPE_FORMAT_B10G10R10A2_USCALED", "b10g10r10a2_uscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b10g10r10a2_uscaled_unpack_rgba_8unorm, &util_format_b10g10r10a2_uscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b10g10r10a2_uscaled_unpack_rgba_float, &util_format_b10g10r10a2_uscaled_pack_rgba_float, &util_format_b10g10r10a2_uscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10a2_sscaled_description = { PIPE_FORMAT_B10G10R10A2_SSCALED, "PIPE_FORMAT_B10G10R10A2_SSCALED", "b10g10r10a2_sscaled", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b10g10r10a2_sscaled_unpack_rgba_8unorm, &util_format_b10g10r10a2_sscaled_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b10g10r10a2_sscaled_unpack_rgba_float, &util_format_b10g10r10a2_sscaled_pack_rgba_float, &util_format_b10g10r10a2_sscaled_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10a2_snorm_description = { PIPE_FORMAT_B10G10R10A2_SNORM, "PIPE_FORMAT_B10G10R10A2_SNORM", "b10g10r10a2_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b10g10r10a2_snorm_unpack_rgba_8unorm, &util_format_b10g10r10a2_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b10g10r10a2_snorm_unpack_rgba_float, &util_format_b10g10r10a2_snorm_pack_rgba_float, &util_format_b10g10r10a2_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_uint_description = { PIPE_FORMAT_R8_UINT, "PIPE_FORMAT_R8_UINT", "r8_uint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_uint_description = { PIPE_FORMAT_R8G8_UINT, "PIPE_FORMAT_R8G8_UINT", "r8g8_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8g8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_uint_description = { PIPE_FORMAT_R8G8B8_UINT, "PIPE_FORMAT_R8G8B8_UINT", "r8g8b8_uint", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8g8b8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_uint_description = { PIPE_FORMAT_R8G8B8A8_UINT, "PIPE_FORMAT_R8G8B8A8_UINT", "r8g8b8a8_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8a8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8a8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8a8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8a8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8g8b8a8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8_sint_description = { PIPE_FORMAT_R8_SINT, "PIPE_FORMAT_R8_SINT", "r8_sint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8_sint_description = { PIPE_FORMAT_R8G8_SINT, "PIPE_FORMAT_R8G8_SINT", "r8g8_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8g8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8_sint_description = { PIPE_FORMAT_R8G8B8_SINT, "PIPE_FORMAT_R8G8B8_SINT", "r8g8b8_sint", {1, 1, 24}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8g8b8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8a8_sint_description = { PIPE_FORMAT_R8G8B8A8_SINT, "PIPE_FORMAT_R8G8B8A8_SINT", "r8g8b8a8_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 24} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8a8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8a8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8a8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8a8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8g8b8a8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_uint_description = { PIPE_FORMAT_R16_UINT, "PIPE_FORMAT_R16_UINT", "r16_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_uint_description = { PIPE_FORMAT_R16G16_UINT, "PIPE_FORMAT_R16G16_UINT", "r16g16_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16g16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_uint_description = { PIPE_FORMAT_R16G16B16_UINT, "PIPE_FORMAT_R16G16B16_UINT", "r16g16b16_uint", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16g16b16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_uint_description = { PIPE_FORMAT_R16G16B16A16_UINT, "PIPE_FORMAT_R16G16B16A16_UINT", "r16g16b16a16_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16a16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16a16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16a16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16a16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16g16b16a16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16_sint_description = { PIPE_FORMAT_R16_SINT, "PIPE_FORMAT_R16_SINT", "r16_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16_sint_description = { PIPE_FORMAT_R16G16_SINT, "PIPE_FORMAT_R16G16_SINT", "r16g16_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16g16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16_sint_description = { PIPE_FORMAT_R16G16B16_SINT, "PIPE_FORMAT_R16G16B16_SINT", "r16g16b16_sint", {1, 1, 48}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16g16b16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16a16_sint_description = { PIPE_FORMAT_R16G16B16A16_SINT, "PIPE_FORMAT_R16G16B16A16_SINT", "r16g16b16a16_sint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 48} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16a16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16a16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16a16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16a16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16g16b16a16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_uint_description = { PIPE_FORMAT_R32_UINT, "PIPE_FORMAT_R32_UINT", "r32_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_uint_description = { PIPE_FORMAT_R32G32_UINT, "PIPE_FORMAT_R32G32_UINT", "r32g32_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32g32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_uint_description = { PIPE_FORMAT_R32G32B32_UINT, "PIPE_FORMAT_R32G32B32_UINT", "r32g32b32_uint", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32g32b32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_uint_description = { PIPE_FORMAT_R32G32B32A32_UINT, "PIPE_FORMAT_R32G32B32A32_UINT", "r32g32b32a32_uint", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32a32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32a32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32a32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32a32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32g32b32a32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32_sint_description = { PIPE_FORMAT_R32_SINT, "PIPE_FORMAT_R32_SINT", "r32_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32_sint_description = { PIPE_FORMAT_R32G32_SINT, "PIPE_FORMAT_R32G32_SINT", "r32g32_sint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32g32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32_sint_description = { PIPE_FORMAT_R32G32B32_SINT, "PIPE_FORMAT_R32G32B32_SINT", "r32g32b32_sint", {1, 1, 96}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* z = b */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32g32b32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32a32_sint_description = { PIPE_FORMAT_R32G32B32A32_SINT, "PIPE_FORMAT_R32G32B32A32_SINT", "r32g32b32a32_sint", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 96} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32a32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32a32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32a32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32a32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32g32b32a32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8_uint_description = { PIPE_FORMAT_A8_UINT, "PIPE_FORMAT_A8_UINT", "a8_uint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_a8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_a8_uint_pack_signed, /* pack_rgba_sint */ &util_format_a8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i8_uint_description = { PIPE_FORMAT_I8_UINT, "PIPE_FORMAT_I8_UINT", "i8_uint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_i8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_i8_uint_pack_signed, /* pack_rgba_sint */ &util_format_i8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8_uint_description = { PIPE_FORMAT_L8_UINT, "PIPE_FORMAT_L8_UINT", "l8_uint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l8_uint_pack_signed, /* pack_rgba_sint */ &util_format_l8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8a8_uint_description = { PIPE_FORMAT_L8A8_UINT, "PIPE_FORMAT_L8A8_UINT", "l8a8_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l8a8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l8a8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l8a8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l8a8_uint_pack_signed, /* pack_rgba_sint */ &util_format_l8a8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a8_sint_description = { PIPE_FORMAT_A8_SINT, "PIPE_FORMAT_A8_SINT", "a8_sint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_a8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_a8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_a8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_i8_sint_description = { PIPE_FORMAT_I8_SINT, "PIPE_FORMAT_I8_SINT", "i8_sint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_i8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_i8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_i8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8_sint_description = { PIPE_FORMAT_L8_SINT, "PIPE_FORMAT_L8_SINT", "l8_sint", {1, 1, 8}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l8a8_sint_description = { PIPE_FORMAT_L8A8_SINT, "PIPE_FORMAT_L8A8_SINT", "l8a8_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l8a8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l8a8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l8a8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l8a8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l8a8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_a16_uint_description = { PIPE_FORMAT_A16_UINT, "PIPE_FORMAT_A16_UINT", "a16_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_a16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_a16_uint_pack_signed, /* pack_rgba_sint */ &util_format_a16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i16_uint_description = { PIPE_FORMAT_I16_UINT, "PIPE_FORMAT_I16_UINT", "i16_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_i16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_i16_uint_pack_signed, /* pack_rgba_sint */ &util_format_i16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16_uint_description = { PIPE_FORMAT_L16_UINT, "PIPE_FORMAT_L16_UINT", "l16_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l16_uint_pack_signed, /* pack_rgba_sint */ &util_format_l16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16a16_uint_description = { PIPE_FORMAT_L16A16_UINT, "PIPE_FORMAT_L16A16_UINT", "l16a16_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l16a16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l16a16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l16a16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l16a16_uint_pack_signed, /* pack_rgba_sint */ &util_format_l16a16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a16_sint_description = { PIPE_FORMAT_A16_SINT, "PIPE_FORMAT_A16_SINT", "a16_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_a16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_a16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_a16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_i16_sint_description = { PIPE_FORMAT_I16_SINT, "PIPE_FORMAT_I16_SINT", "i16_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_i16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_i16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_i16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16_sint_description = { PIPE_FORMAT_L16_SINT, "PIPE_FORMAT_L16_SINT", "l16_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l16a16_sint_description = { PIPE_FORMAT_L16A16_SINT, "PIPE_FORMAT_L16A16_SINT", "l16a16_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l16a16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l16a16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l16a16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l16a16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l16a16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_a32_uint_description = { PIPE_FORMAT_A32_UINT, "PIPE_FORMAT_A32_UINT", "a32_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_a32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_a32_uint_pack_signed, /* pack_rgba_sint */ &util_format_a32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_i32_uint_description = { PIPE_FORMAT_I32_UINT, "PIPE_FORMAT_I32_UINT", "i32_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_i32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_i32_uint_pack_signed, /* pack_rgba_sint */ &util_format_i32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32_uint_description = { PIPE_FORMAT_L32_UINT, "PIPE_FORMAT_L32_UINT", "l32_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l32_uint_pack_signed, /* pack_rgba_sint */ &util_format_l32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32a32_uint_description = { PIPE_FORMAT_L32A32_UINT, "PIPE_FORMAT_L32A32_UINT", "l32a32_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l32a32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l32a32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_l32a32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_l32a32_uint_pack_signed, /* pack_rgba_sint */ &util_format_l32a32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_a32_sint_description = { PIPE_FORMAT_A32_SINT, "PIPE_FORMAT_A32_SINT", "a32_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_0, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_a32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_a32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_a32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_a32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_a32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_i32_sint_description = { PIPE_FORMAT_I32_SINT, "PIPE_FORMAT_I32_SINT", "i32_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = rgba */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_X /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_i32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_i32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_i32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_i32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_i32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32_sint_description = { PIPE_FORMAT_L32_SINT, "PIPE_FORMAT_L32_SINT", "l32_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 1, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = rgb */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_l32a32_sint_description = { PIPE_FORMAT_L32A32_SINT, "PIPE_FORMAT_L32A32_SINT", "l32a32_sint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = rgb */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_X, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_l32a32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_l32a32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_l32a32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_l32a32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_l32a32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10a2_uint_description = { PIPE_FORMAT_B10G10R10A2_UINT, "PIPE_FORMAT_B10G10R10A2_UINT", "b10g10r10a2_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_b10g10r10a2_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_b10g10r10a2_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_b10g10r10a2_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_b10g10r10a2_uint_pack_signed, /* pack_rgba_sint */ &util_format_b10g10r10a2_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8x8_snorm_description = { PIPE_FORMAT_R8G8B8X8_SNORM, "PIPE_FORMAT_R8G8B8X8_SNORM", "r8g8b8x8_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8g8b8x8_snorm_unpack_rgba_8unorm, &util_format_r8g8b8x8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8x8_snorm_unpack_rgba_float, &util_format_r8g8b8x8_snorm_pack_rgba_float, &util_format_r8g8b8x8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8x8_srgb_description = { PIPE_FORMAT_R8G8B8X8_SRGB, "PIPE_FORMAT_R8G8B8X8_SRGB", "r8g8b8x8_srgb", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_Z, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_r8g8b8x8_srgb_unpack_rgba_8unorm, &util_format_r8g8b8x8_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8g8b8x8_srgb_unpack_rgba_float, &util_format_r8g8b8x8_srgb_pack_rgba_float, &util_format_r8g8b8x8_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8x8_uint_description = { PIPE_FORMAT_R8G8B8X8_UINT, "PIPE_FORMAT_R8G8B8X8_UINT", "r8g8b8x8_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8x8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8x8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8x8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8x8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8g8b8x8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8g8b8x8_sint_description = { PIPE_FORMAT_R8G8B8X8_SINT, "PIPE_FORMAT_R8G8B8X8_SINT", "r8g8b8x8_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 24}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 8, 24} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8g8b8x8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8g8b8x8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8g8b8x8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8g8b8x8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8g8b8x8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_b10g10r10x2_unorm_description = { PIPE_FORMAT_B10G10R10X2_UNORM, "PIPE_FORMAT_B10G10R10X2_UNORM", "b10g10r10x2_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 22}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 2}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 10, 20}, /* z = r */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 2, 30} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_X, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_b10g10r10x2_unorm_unpack_rgba_8unorm, &util_format_b10g10r10x2_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b10g10r10x2_unorm_unpack_rgba_float, &util_format_b10g10r10x2_unorm_pack_rgba_float, &util_format_b10g10r10x2_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16x16_unorm_description = { PIPE_FORMAT_R16G16B16X16_UNORM, "PIPE_FORMAT_R16G16B16X16_UNORM", "r16g16b16x16_unorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 48} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16x16_unorm_unpack_rgba_8unorm, &util_format_r16g16b16x16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16x16_unorm_unpack_rgba_float, &util_format_r16g16b16x16_unorm_pack_rgba_float, &util_format_r16g16b16x16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16x16_snorm_description = { PIPE_FORMAT_R16G16B16X16_SNORM, "PIPE_FORMAT_R16G16B16X16_SNORM", "r16g16b16x16_snorm", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 48} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16x16_snorm_unpack_rgba_8unorm, &util_format_r16g16b16x16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16x16_snorm_unpack_rgba_float, &util_format_r16g16b16x16_snorm_pack_rgba_float, &util_format_r16g16b16x16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16x16_float_description = { PIPE_FORMAT_R16G16B16X16_FLOAT, "PIPE_FORMAT_R16G16B16X16_FLOAT", "r16g16b16x16_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 48} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16g16b16x16_float_unpack_rgba_8unorm, &util_format_r16g16b16x16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16g16b16x16_float_unpack_rgba_float, &util_format_r16g16b16x16_float_pack_rgba_float, &util_format_r16g16b16x16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16x16_uint_description = { PIPE_FORMAT_R16G16B16X16_UINT, "PIPE_FORMAT_R16G16B16X16_UINT", "r16g16b16x16_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 48} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16x16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16x16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16x16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16x16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16g16b16x16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16g16b16x16_sint_description = { PIPE_FORMAT_R16G16B16X16_SINT, "PIPE_FORMAT_R16G16B16X16_SINT", "r16g16b16x16_sint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 48}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 16, 48} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16g16b16x16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16g16b16x16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16g16b16x16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16g16b16x16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16g16b16x16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32x32_float_description = { PIPE_FORMAT_R32G32B32X32_FLOAT, "PIPE_FORMAT_R32G32B32X32_FLOAT", "r32g32b32x32_float", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 96} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32g32b32x32_float_unpack_rgba_8unorm, &util_format_r32g32b32x32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32g32b32x32_float_unpack_rgba_float, &util_format_r32g32b32x32_float_pack_rgba_float, &util_format_r32g32b32x32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32x32_uint_description = { PIPE_FORMAT_R32G32B32X32_UINT, "PIPE_FORMAT_R32G32B32X32_UINT", "r32g32b32x32_uint", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 96} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32x32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32x32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32x32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32x32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32g32b32x32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32g32b32x32_sint_description = { PIPE_FORMAT_R32G32B32X32_SINT, "PIPE_FORMAT_R32G32B32X32_SINT", "r32g32b32x32_sint", {1, 1, 128}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 96}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 0} /* w = x */ }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = g */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 64}, /* z = b */ {UTIL_FORMAT_TYPE_VOID, FALSE, FALSE, 32, 96} /* w = x */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32g32b32x32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32g32b32x32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32g32b32x32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32g32b32x32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32g32b32x32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8a8_snorm_description = { PIPE_FORMAT_R8A8_SNORM, "PIPE_FORMAT_R8A8_SNORM", "r8a8_snorm", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r8a8_snorm_unpack_rgba_8unorm, &util_format_r8a8_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r8a8_snorm_unpack_rgba_float, &util_format_r8a8_snorm_pack_rgba_float, &util_format_r8a8_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16a16_unorm_description = { PIPE_FORMAT_R16A16_UNORM, "PIPE_FORMAT_R16A16_UNORM", "r16a16_unorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16a16_unorm_unpack_rgba_8unorm, &util_format_r16a16_unorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16a16_unorm_unpack_rgba_float, &util_format_r16a16_unorm_pack_rgba_float, &util_format_r16a16_unorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16a16_snorm_description = { PIPE_FORMAT_R16A16_SNORM, "PIPE_FORMAT_R16A16_SNORM", "r16a16_snorm", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, TRUE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16a16_snorm_unpack_rgba_8unorm, &util_format_r16a16_snorm_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16a16_snorm_unpack_rgba_float, &util_format_r16a16_snorm_pack_rgba_float, &util_format_r16a16_snorm_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16a16_float_description = { PIPE_FORMAT_R16A16_FLOAT, "PIPE_FORMAT_R16A16_FLOAT", "r16a16_float", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r16a16_float_unpack_rgba_8unorm, &util_format_r16a16_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r16a16_float_unpack_rgba_float, &util_format_r16a16_float_pack_rgba_float, &util_format_r16a16_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32a32_float_description = { PIPE_FORMAT_R32A32_FLOAT, "PIPE_FORMAT_R32A32_FLOAT", "r32a32_float", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_FLOAT, FALSE, FALSE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, &util_format_r32a32_float_unpack_rgba_8unorm, &util_format_r32a32_float_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_r32a32_float_unpack_rgba_float, &util_format_r32a32_float_pack_rgba_float, &util_format_r32a32_float_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8a8_uint_description = { PIPE_FORMAT_R8A8_UINT, "PIPE_FORMAT_R8A8_UINT", "r8a8_uint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8a8_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8a8_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8a8_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8a8_uint_pack_signed, /* pack_rgba_sint */ &util_format_r8a8_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r8a8_sint_description = { PIPE_FORMAT_R8A8_SINT, "PIPE_FORMAT_R8A8_SINT", "r8a8_sint", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 8, 8}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r8a8_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r8a8_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r8a8_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r8a8_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r8a8_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16a16_uint_description = { PIPE_FORMAT_R16A16_UINT, "PIPE_FORMAT_R16A16_UINT", "r16a16_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16a16_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16a16_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16a16_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16a16_uint_pack_signed, /* pack_rgba_sint */ &util_format_r16a16_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r16a16_sint_description = { PIPE_FORMAT_R16A16_SINT, "PIPE_FORMAT_R16A16_SINT", "r16a16_sint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 16, 16}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r16a16_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r16a16_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r16a16_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r16a16_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r16a16_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32a32_uint_description = { PIPE_FORMAT_R32A32_UINT, "PIPE_FORMAT_R32A32_UINT", "r32a32_uint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32a32_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32a32_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32a32_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32a32_uint_pack_signed, /* pack_rgba_sint */ &util_format_r32a32_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_r32a32_sint_description = { PIPE_FORMAT_R32A32_SINT, "PIPE_FORMAT_R32A32_SINT", "r32a32_sint", {1, 1, 64}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 2, /* nr_channels */ TRUE, /* is_array */ FALSE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 0}, /* x = r */ {UTIL_FORMAT_TYPE_SIGNED, FALSE, TRUE, 32, 32}, /* y = a */ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_0, /* g */ UTIL_FORMAT_SWIZZLE_0, /* b */ UTIL_FORMAT_SWIZZLE_Y /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r32a32_sint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r32a32_sint_pack_unsigned, /* pack_rgba_uint */ &util_format_r32a32_sint_unpack_signed, /* unpack_rgba_sint */ &util_format_r32a32_sint_pack_signed, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ &util_format_r32a32_sint_fetch_signed /* fetch_rgba_sint */ }; const struct util_format_description util_format_r10g10b10a2_uint_description = { PIPE_FORMAT_R10G10B10A2_UINT, "PIPE_FORMAT_R10G10B10A2_UINT", "r10g10b10a2_uint", {1, 1, 32}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 4, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 22}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 12}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 2}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 2, 0} /* w = a */ }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 0}, /* x = r */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 10}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 10, 20}, /* z = b */ {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, TRUE, 2, 30} /* w = a */ }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #else { UTIL_FORMAT_SWIZZLE_X, /* r */ UTIL_FORMAT_SWIZZLE_Y, /* g */ UTIL_FORMAT_SWIZZLE_Z, /* b */ UTIL_FORMAT_SWIZZLE_W /* a */ }, #endif UTIL_FORMAT_COLORSPACE_RGB, NULL, /* unpack_rgba_8unorm */ NULL, /* pack_rgba_8unorm */ NULL, /* fetch_rgba_8unorm */ NULL, /* unpack_rgba_float */ NULL, /* pack_rgba_float */ NULL, /* fetch_rgba_float */ NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ &util_format_r10g10b10a2_uint_unpack_unsigned, /* unpack_rgba_uint */ &util_format_r10g10b10a2_uint_pack_unsigned, /* pack_rgba_uint */ &util_format_r10g10b10a2_uint_unpack_signed, /* unpack_rgba_sint */ &util_format_r10g10b10a2_uint_pack_signed, /* pack_rgba_sint */ &util_format_r10g10b10a2_uint_fetch_unsigned, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description util_format_b5g6r5_srgb_description = { PIPE_FORMAT_B5G6R5_SRGB, "PIPE_FORMAT_B5G6R5_SRGB", "b5g6r5_srgb", {1, 1, 16}, /* block */ UTIL_FORMAT_LAYOUT_PLAIN, 3, /* nr_channels */ FALSE, /* is_array */ TRUE, /* is_bitmask */ FALSE, /* is_mixed */ #ifdef PIPE_ARCH_BIG_ENDIAN { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* z = r */ {0, 0, 0, 0, 0} }, #else { {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 0}, /* x = b */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 6, 5}, /* y = g */ {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, FALSE, 5, 11}, /* z = r */ {0, 0, 0, 0, 0} }, #endif #ifdef PIPE_ARCH_BIG_ENDIAN { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #else { UTIL_FORMAT_SWIZZLE_Z, /* sr */ UTIL_FORMAT_SWIZZLE_Y, /* sg */ UTIL_FORMAT_SWIZZLE_X, /* sb */ UTIL_FORMAT_SWIZZLE_1 /* a */ }, #endif UTIL_FORMAT_COLORSPACE_SRGB, &util_format_b5g6r5_srgb_unpack_rgba_8unorm, &util_format_b5g6r5_srgb_pack_rgba_8unorm, NULL, /* fetch_rgba_8unorm */ &util_format_b5g6r5_srgb_unpack_rgba_float, &util_format_b5g6r5_srgb_pack_rgba_float, &util_format_b5g6r5_srgb_fetch_rgba_float, NULL, /* unpack_z_32unorm */ NULL, /* pack_z_32unorm */ NULL, /* unpack_z_float */ NULL, /* pack_z_float */ NULL, /* unpack_s_8uint */ NULL, /* pack_s_8uint */ NULL, /* unpack_rgba_uint */ NULL, /* pack_rgba_uint */ NULL, /* unpack_rgba_sint */ NULL, /* pack_rgba_sint */ NULL, /* fetch_rgba_uint */ NULL /* fetch_rgba_sint */ }; const struct util_format_description * util_format_description(enum pipe_format format) { if (format >= PIPE_FORMAT_COUNT) { return NULL; } switch (format) { case PIPE_FORMAT_NONE: return &util_format_none_description; case PIPE_FORMAT_B8G8R8A8_UNORM: return &util_format_b8g8r8a8_unorm_description; case PIPE_FORMAT_B8G8R8X8_UNORM: return &util_format_b8g8r8x8_unorm_description; case PIPE_FORMAT_A8R8G8B8_UNORM: return &util_format_a8r8g8b8_unorm_description; case PIPE_FORMAT_X8R8G8B8_UNORM: return &util_format_x8r8g8b8_unorm_description; case PIPE_FORMAT_A8B8G8R8_UNORM: return &util_format_a8b8g8r8_unorm_description; case PIPE_FORMAT_X8B8G8R8_UNORM: return &util_format_x8b8g8r8_unorm_description; case PIPE_FORMAT_R8G8B8X8_UNORM: return &util_format_r8g8b8x8_unorm_description; case PIPE_FORMAT_B5G5R5X1_UNORM: return &util_format_b5g5r5x1_unorm_description; case PIPE_FORMAT_B5G5R5A1_UNORM: return &util_format_b5g5r5a1_unorm_description; case PIPE_FORMAT_B4G4R4A4_UNORM: return &util_format_b4g4r4a4_unorm_description; case PIPE_FORMAT_B4G4R4X4_UNORM: return &util_format_b4g4r4x4_unorm_description; case PIPE_FORMAT_B5G6R5_UNORM: return &util_format_b5g6r5_unorm_description; case PIPE_FORMAT_R10G10B10A2_UNORM: return &util_format_r10g10b10a2_unorm_description; case PIPE_FORMAT_B10G10R10A2_UNORM: return &util_format_b10g10r10a2_unorm_description; case PIPE_FORMAT_B2G3R3_UNORM: return &util_format_b2g3r3_unorm_description; case PIPE_FORMAT_L8_UNORM: return &util_format_l8_unorm_description; case PIPE_FORMAT_A8_UNORM: return &util_format_a8_unorm_description; case PIPE_FORMAT_I8_UNORM: return &util_format_i8_unorm_description; case PIPE_FORMAT_L4A4_UNORM: return &util_format_l4a4_unorm_description; case PIPE_FORMAT_L8A8_UNORM: return &util_format_l8a8_unorm_description; case PIPE_FORMAT_L16_UNORM: return &util_format_l16_unorm_description; case PIPE_FORMAT_A16_UNORM: return &util_format_a16_unorm_description; case PIPE_FORMAT_I16_UNORM: return &util_format_i16_unorm_description; case PIPE_FORMAT_L16A16_UNORM: return &util_format_l16a16_unorm_description; case PIPE_FORMAT_A8_SNORM: return &util_format_a8_snorm_description; case PIPE_FORMAT_L8_SNORM: return &util_format_l8_snorm_description; case PIPE_FORMAT_L8A8_SNORM: return &util_format_l8a8_snorm_description; case PIPE_FORMAT_I8_SNORM: return &util_format_i8_snorm_description; case PIPE_FORMAT_A16_SNORM: return &util_format_a16_snorm_description; case PIPE_FORMAT_L16_SNORM: return &util_format_l16_snorm_description; case PIPE_FORMAT_L16A16_SNORM: return &util_format_l16a16_snorm_description; case PIPE_FORMAT_I16_SNORM: return &util_format_i16_snorm_description; case PIPE_FORMAT_A16_FLOAT: return &util_format_a16_float_description; case PIPE_FORMAT_L16_FLOAT: return &util_format_l16_float_description; case PIPE_FORMAT_L16A16_FLOAT: return &util_format_l16a16_float_description; case PIPE_FORMAT_I16_FLOAT: return &util_format_i16_float_description; case PIPE_FORMAT_A32_FLOAT: return &util_format_a32_float_description; case PIPE_FORMAT_L32_FLOAT: return &util_format_l32_float_description; case PIPE_FORMAT_L32A32_FLOAT: return &util_format_l32a32_float_description; case PIPE_FORMAT_I32_FLOAT: return &util_format_i32_float_description; case PIPE_FORMAT_L8_SRGB: return &util_format_l8_srgb_description; case PIPE_FORMAT_L8A8_SRGB: return &util_format_l8a8_srgb_description; case PIPE_FORMAT_R8G8B8_SRGB: return &util_format_r8g8b8_srgb_description; case PIPE_FORMAT_R8G8B8A8_SRGB: return &util_format_r8g8b8a8_srgb_description; case PIPE_FORMAT_A8B8G8R8_SRGB: return &util_format_a8b8g8r8_srgb_description; case PIPE_FORMAT_X8B8G8R8_SRGB: return &util_format_x8b8g8r8_srgb_description; case PIPE_FORMAT_B8G8R8A8_SRGB: return &util_format_b8g8r8a8_srgb_description; case PIPE_FORMAT_B8G8R8X8_SRGB: return &util_format_b8g8r8x8_srgb_description; case PIPE_FORMAT_A8R8G8B8_SRGB: return &util_format_a8r8g8b8_srgb_description; case PIPE_FORMAT_X8R8G8B8_SRGB: return &util_format_x8r8g8b8_srgb_description; case PIPE_FORMAT_R8SG8SB8UX8U_NORM: return &util_format_r8sg8sb8ux8u_norm_description; case PIPE_FORMAT_R10SG10SB10SA2U_NORM: return &util_format_r10sg10sb10sa2u_norm_description; case PIPE_FORMAT_R5SG5SB6U_NORM: return &util_format_r5sg5sb6u_norm_description; case PIPE_FORMAT_S8_UINT: return &util_format_s8_uint_description; case PIPE_FORMAT_Z16_UNORM: return &util_format_z16_unorm_description; case PIPE_FORMAT_Z32_UNORM: return &util_format_z32_unorm_description; case PIPE_FORMAT_Z32_FLOAT: return &util_format_z32_float_description; case PIPE_FORMAT_Z24_UNORM_S8_UINT: return &util_format_z24_unorm_s8_uint_description; case PIPE_FORMAT_S8_UINT_Z24_UNORM: return &util_format_s8_uint_z24_unorm_description; case PIPE_FORMAT_X24S8_UINT: return &util_format_x24s8_uint_description; case PIPE_FORMAT_S8X24_UINT: return &util_format_s8x24_uint_description; case PIPE_FORMAT_Z24X8_UNORM: return &util_format_z24x8_unorm_description; case PIPE_FORMAT_X8Z24_UNORM: return &util_format_x8z24_unorm_description; case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: return &util_format_z32_float_s8x24_uint_description; case PIPE_FORMAT_X32_S8X24_UINT: return &util_format_x32_s8x24_uint_description; case PIPE_FORMAT_UYVY: return &util_format_uyvy_description; case PIPE_FORMAT_YUYV: return &util_format_yuyv_description; case PIPE_FORMAT_R8G8_B8G8_UNORM: return &util_format_r8g8_b8g8_unorm_description; case PIPE_FORMAT_G8R8_G8B8_UNORM: return &util_format_g8r8_g8b8_unorm_description; case PIPE_FORMAT_G8R8_B8R8_UNORM: return &util_format_g8r8_b8r8_unorm_description; case PIPE_FORMAT_R8G8_R8B8_UNORM: return &util_format_r8g8_r8b8_unorm_description; case PIPE_FORMAT_R11G11B10_FLOAT: return &util_format_r11g11b10_float_description; case PIPE_FORMAT_R9G9B9E5_FLOAT: return &util_format_r9g9b9e5_float_description; case PIPE_FORMAT_R1_UNORM: return &util_format_r1_unorm_description; case PIPE_FORMAT_R8G8Bx_SNORM: return &util_format_r8g8bx_snorm_description; case PIPE_FORMAT_DXT1_RGB: return &util_format_dxt1_rgb_description; case PIPE_FORMAT_DXT1_RGBA: return &util_format_dxt1_rgba_description; case PIPE_FORMAT_DXT3_RGBA: return &util_format_dxt3_rgba_description; case PIPE_FORMAT_DXT5_RGBA: return &util_format_dxt5_rgba_description; case PIPE_FORMAT_DXT1_SRGB: return &util_format_dxt1_srgb_description; case PIPE_FORMAT_DXT1_SRGBA: return &util_format_dxt1_srgba_description; case PIPE_FORMAT_DXT3_SRGBA: return &util_format_dxt3_srgba_description; case PIPE_FORMAT_DXT5_SRGBA: return &util_format_dxt5_srgba_description; case PIPE_FORMAT_RGTC1_UNORM: return &util_format_rgtc1_unorm_description; case PIPE_FORMAT_RGTC1_SNORM: return &util_format_rgtc1_snorm_description; case PIPE_FORMAT_RGTC2_UNORM: return &util_format_rgtc2_unorm_description; case PIPE_FORMAT_RGTC2_SNORM: return &util_format_rgtc2_snorm_description; case PIPE_FORMAT_LATC1_UNORM: return &util_format_latc1_unorm_description; case PIPE_FORMAT_LATC1_SNORM: return &util_format_latc1_snorm_description; case PIPE_FORMAT_LATC2_UNORM: return &util_format_latc2_unorm_description; case PIPE_FORMAT_LATC2_SNORM: return &util_format_latc2_snorm_description; case PIPE_FORMAT_ETC1_RGB8: return &util_format_etc1_rgb8_description; case PIPE_FORMAT_BPTC_RGBA_UNORM: return &util_format_bptc_rgba_unorm_description; case PIPE_FORMAT_BPTC_SRGBA: return &util_format_bptc_srgba_description; case PIPE_FORMAT_BPTC_RGB_FLOAT: return &util_format_bptc_rgb_float_description; case PIPE_FORMAT_BPTC_RGB_UFLOAT: return &util_format_bptc_rgb_ufloat_description; case PIPE_FORMAT_R64_FLOAT: return &util_format_r64_float_description; case PIPE_FORMAT_R64G64_FLOAT: return &util_format_r64g64_float_description; case PIPE_FORMAT_R64G64B64_FLOAT: return &util_format_r64g64b64_float_description; case PIPE_FORMAT_R64G64B64A64_FLOAT: return &util_format_r64g64b64a64_float_description; case PIPE_FORMAT_R32_FLOAT: return &util_format_r32_float_description; case PIPE_FORMAT_R32G32_FLOAT: return &util_format_r32g32_float_description; case PIPE_FORMAT_R32G32B32_FLOAT: return &util_format_r32g32b32_float_description; case PIPE_FORMAT_R32G32B32A32_FLOAT: return &util_format_r32g32b32a32_float_description; case PIPE_FORMAT_R32_UNORM: return &util_format_r32_unorm_description; case PIPE_FORMAT_R32G32_UNORM: return &util_format_r32g32_unorm_description; case PIPE_FORMAT_R32G32B32_UNORM: return &util_format_r32g32b32_unorm_description; case PIPE_FORMAT_R32G32B32A32_UNORM: return &util_format_r32g32b32a32_unorm_description; case PIPE_FORMAT_R32_USCALED: return &util_format_r32_uscaled_description; case PIPE_FORMAT_R32G32_USCALED: return &util_format_r32g32_uscaled_description; case PIPE_FORMAT_R32G32B32_USCALED: return &util_format_r32g32b32_uscaled_description; case PIPE_FORMAT_R32G32B32A32_USCALED: return &util_format_r32g32b32a32_uscaled_description; case PIPE_FORMAT_R32_SNORM: return &util_format_r32_snorm_description; case PIPE_FORMAT_R32G32_SNORM: return &util_format_r32g32_snorm_description; case PIPE_FORMAT_R32G32B32_SNORM: return &util_format_r32g32b32_snorm_description; case PIPE_FORMAT_R32G32B32A32_SNORM: return &util_format_r32g32b32a32_snorm_description; case PIPE_FORMAT_R32_SSCALED: return &util_format_r32_sscaled_description; case PIPE_FORMAT_R32G32_SSCALED: return &util_format_r32g32_sscaled_description; case PIPE_FORMAT_R32G32B32_SSCALED: return &util_format_r32g32b32_sscaled_description; case PIPE_FORMAT_R32G32B32A32_SSCALED: return &util_format_r32g32b32a32_sscaled_description; case PIPE_FORMAT_R16_FLOAT: return &util_format_r16_float_description; case PIPE_FORMAT_R16G16_FLOAT: return &util_format_r16g16_float_description; case PIPE_FORMAT_R16G16B16_FLOAT: return &util_format_r16g16b16_float_description; case PIPE_FORMAT_R16G16B16A16_FLOAT: return &util_format_r16g16b16a16_float_description; case PIPE_FORMAT_R16_UNORM: return &util_format_r16_unorm_description; case PIPE_FORMAT_R16G16_UNORM: return &util_format_r16g16_unorm_description; case PIPE_FORMAT_R16G16B16_UNORM: return &util_format_r16g16b16_unorm_description; case PIPE_FORMAT_R16G16B16A16_UNORM: return &util_format_r16g16b16a16_unorm_description; case PIPE_FORMAT_R16_USCALED: return &util_format_r16_uscaled_description; case PIPE_FORMAT_R16G16_USCALED: return &util_format_r16g16_uscaled_description; case PIPE_FORMAT_R16G16B16_USCALED: return &util_format_r16g16b16_uscaled_description; case PIPE_FORMAT_R16G16B16A16_USCALED: return &util_format_r16g16b16a16_uscaled_description; case PIPE_FORMAT_R16_SNORM: return &util_format_r16_snorm_description; case PIPE_FORMAT_R16G16_SNORM: return &util_format_r16g16_snorm_description; case PIPE_FORMAT_R16G16B16_SNORM: return &util_format_r16g16b16_snorm_description; case PIPE_FORMAT_R16G16B16A16_SNORM: return &util_format_r16g16b16a16_snorm_description; case PIPE_FORMAT_R16_SSCALED: return &util_format_r16_sscaled_description; case PIPE_FORMAT_R16G16_SSCALED: return &util_format_r16g16_sscaled_description; case PIPE_FORMAT_R16G16B16_SSCALED: return &util_format_r16g16b16_sscaled_description; case PIPE_FORMAT_R16G16B16A16_SSCALED: return &util_format_r16g16b16a16_sscaled_description; case PIPE_FORMAT_R8_UNORM: return &util_format_r8_unorm_description; case PIPE_FORMAT_R8G8_UNORM: return &util_format_r8g8_unorm_description; case PIPE_FORMAT_R8G8B8_UNORM: return &util_format_r8g8b8_unorm_description; case PIPE_FORMAT_R8G8B8A8_UNORM: return &util_format_r8g8b8a8_unorm_description; case PIPE_FORMAT_R8_USCALED: return &util_format_r8_uscaled_description; case PIPE_FORMAT_R8G8_USCALED: return &util_format_r8g8_uscaled_description; case PIPE_FORMAT_R8G8B8_USCALED: return &util_format_r8g8b8_uscaled_description; case PIPE_FORMAT_R8G8B8A8_USCALED: return &util_format_r8g8b8a8_uscaled_description; case PIPE_FORMAT_R8_SNORM: return &util_format_r8_snorm_description; case PIPE_FORMAT_R8G8_SNORM: return &util_format_r8g8_snorm_description; case PIPE_FORMAT_R8G8B8_SNORM: return &util_format_r8g8b8_snorm_description; case PIPE_FORMAT_R8G8B8A8_SNORM: return &util_format_r8g8b8a8_snorm_description; case PIPE_FORMAT_R8_SSCALED: return &util_format_r8_sscaled_description; case PIPE_FORMAT_R8G8_SSCALED: return &util_format_r8g8_sscaled_description; case PIPE_FORMAT_R8G8B8_SSCALED: return &util_format_r8g8b8_sscaled_description; case PIPE_FORMAT_R8G8B8A8_SSCALED: return &util_format_r8g8b8a8_sscaled_description; case PIPE_FORMAT_R32_FIXED: return &util_format_r32_fixed_description; case PIPE_FORMAT_R32G32_FIXED: return &util_format_r32g32_fixed_description; case PIPE_FORMAT_R32G32B32_FIXED: return &util_format_r32g32b32_fixed_description; case PIPE_FORMAT_R32G32B32A32_FIXED: return &util_format_r32g32b32a32_fixed_description; case PIPE_FORMAT_R10G10B10X2_USCALED: return &util_format_r10g10b10x2_uscaled_description; case PIPE_FORMAT_R10G10B10X2_SNORM: return &util_format_r10g10b10x2_snorm_description; case PIPE_FORMAT_YV12: return &util_format_yv12_description; case PIPE_FORMAT_YV16: return &util_format_yv16_description; case PIPE_FORMAT_IYUV: return &util_format_iyuv_description; case PIPE_FORMAT_NV12: return &util_format_nv12_description; case PIPE_FORMAT_NV21: return &util_format_nv21_description; case PIPE_FORMAT_A4R4_UNORM: return &util_format_a4r4_unorm_description; case PIPE_FORMAT_R4A4_UNORM: return &util_format_r4a4_unorm_description; case PIPE_FORMAT_R8A8_UNORM: return &util_format_r8a8_unorm_description; case PIPE_FORMAT_A8R8_UNORM: return &util_format_a8r8_unorm_description; case PIPE_FORMAT_R10G10B10A2_USCALED: return &util_format_r10g10b10a2_uscaled_description; case PIPE_FORMAT_R10G10B10A2_SSCALED: return &util_format_r10g10b10a2_sscaled_description; case PIPE_FORMAT_R10G10B10A2_SNORM: return &util_format_r10g10b10a2_snorm_description; case PIPE_FORMAT_B10G10R10A2_USCALED: return &util_format_b10g10r10a2_uscaled_description; case PIPE_FORMAT_B10G10R10A2_SSCALED: return &util_format_b10g10r10a2_sscaled_description; case PIPE_FORMAT_B10G10R10A2_SNORM: return &util_format_b10g10r10a2_snorm_description; case PIPE_FORMAT_R8_UINT: return &util_format_r8_uint_description; case PIPE_FORMAT_R8G8_UINT: return &util_format_r8g8_uint_description; case PIPE_FORMAT_R8G8B8_UINT: return &util_format_r8g8b8_uint_description; case PIPE_FORMAT_R8G8B8A8_UINT: return &util_format_r8g8b8a8_uint_description; case PIPE_FORMAT_R8_SINT: return &util_format_r8_sint_description; case PIPE_FORMAT_R8G8_SINT: return &util_format_r8g8_sint_description; case PIPE_FORMAT_R8G8B8_SINT: return &util_format_r8g8b8_sint_description; case PIPE_FORMAT_R8G8B8A8_SINT: return &util_format_r8g8b8a8_sint_description; case PIPE_FORMAT_R16_UINT: return &util_format_r16_uint_description; case PIPE_FORMAT_R16G16_UINT: return &util_format_r16g16_uint_description; case PIPE_FORMAT_R16G16B16_UINT: return &util_format_r16g16b16_uint_description; case PIPE_FORMAT_R16G16B16A16_UINT: return &util_format_r16g16b16a16_uint_description; case PIPE_FORMAT_R16_SINT: return &util_format_r16_sint_description; case PIPE_FORMAT_R16G16_SINT: return &util_format_r16g16_sint_description; case PIPE_FORMAT_R16G16B16_SINT: return &util_format_r16g16b16_sint_description; case PIPE_FORMAT_R16G16B16A16_SINT: return &util_format_r16g16b16a16_sint_description; case PIPE_FORMAT_R32_UINT: return &util_format_r32_uint_description; case PIPE_FORMAT_R32G32_UINT: return &util_format_r32g32_uint_description; case PIPE_FORMAT_R32G32B32_UINT: return &util_format_r32g32b32_uint_description; case PIPE_FORMAT_R32G32B32A32_UINT: return &util_format_r32g32b32a32_uint_description; case PIPE_FORMAT_R32_SINT: return &util_format_r32_sint_description; case PIPE_FORMAT_R32G32_SINT: return &util_format_r32g32_sint_description; case PIPE_FORMAT_R32G32B32_SINT: return &util_format_r32g32b32_sint_description; case PIPE_FORMAT_R32G32B32A32_SINT: return &util_format_r32g32b32a32_sint_description; case PIPE_FORMAT_A8_UINT: return &util_format_a8_uint_description; case PIPE_FORMAT_I8_UINT: return &util_format_i8_uint_description; case PIPE_FORMAT_L8_UINT: return &util_format_l8_uint_description; case PIPE_FORMAT_L8A8_UINT: return &util_format_l8a8_uint_description; case PIPE_FORMAT_A8_SINT: return &util_format_a8_sint_description; case PIPE_FORMAT_I8_SINT: return &util_format_i8_sint_description; case PIPE_FORMAT_L8_SINT: return &util_format_l8_sint_description; case PIPE_FORMAT_L8A8_SINT: return &util_format_l8a8_sint_description; case PIPE_FORMAT_A16_UINT: return &util_format_a16_uint_description; case PIPE_FORMAT_I16_UINT: return &util_format_i16_uint_description; case PIPE_FORMAT_L16_UINT: return &util_format_l16_uint_description; case PIPE_FORMAT_L16A16_UINT: return &util_format_l16a16_uint_description; case PIPE_FORMAT_A16_SINT: return &util_format_a16_sint_description; case PIPE_FORMAT_I16_SINT: return &util_format_i16_sint_description; case PIPE_FORMAT_L16_SINT: return &util_format_l16_sint_description; case PIPE_FORMAT_L16A16_SINT: return &util_format_l16a16_sint_description; case PIPE_FORMAT_A32_UINT: return &util_format_a32_uint_description; case PIPE_FORMAT_I32_UINT: return &util_format_i32_uint_description; case PIPE_FORMAT_L32_UINT: return &util_format_l32_uint_description; case PIPE_FORMAT_L32A32_UINT: return &util_format_l32a32_uint_description; case PIPE_FORMAT_A32_SINT: return &util_format_a32_sint_description; case PIPE_FORMAT_I32_SINT: return &util_format_i32_sint_description; case PIPE_FORMAT_L32_SINT: return &util_format_l32_sint_description; case PIPE_FORMAT_L32A32_SINT: return &util_format_l32a32_sint_description; case PIPE_FORMAT_B10G10R10A2_UINT: return &util_format_b10g10r10a2_uint_description; case PIPE_FORMAT_R8G8B8X8_SNORM: return &util_format_r8g8b8x8_snorm_description; case PIPE_FORMAT_R8G8B8X8_SRGB: return &util_format_r8g8b8x8_srgb_description; case PIPE_FORMAT_R8G8B8X8_UINT: return &util_format_r8g8b8x8_uint_description; case PIPE_FORMAT_R8G8B8X8_SINT: return &util_format_r8g8b8x8_sint_description; case PIPE_FORMAT_B10G10R10X2_UNORM: return &util_format_b10g10r10x2_unorm_description; case PIPE_FORMAT_R16G16B16X16_UNORM: return &util_format_r16g16b16x16_unorm_description; case PIPE_FORMAT_R16G16B16X16_SNORM: return &util_format_r16g16b16x16_snorm_description; case PIPE_FORMAT_R16G16B16X16_FLOAT: return &util_format_r16g16b16x16_float_description; case PIPE_FORMAT_R16G16B16X16_UINT: return &util_format_r16g16b16x16_uint_description; case PIPE_FORMAT_R16G16B16X16_SINT: return &util_format_r16g16b16x16_sint_description; case PIPE_FORMAT_R32G32B32X32_FLOAT: return &util_format_r32g32b32x32_float_description; case PIPE_FORMAT_R32G32B32X32_UINT: return &util_format_r32g32b32x32_uint_description; case PIPE_FORMAT_R32G32B32X32_SINT: return &util_format_r32g32b32x32_sint_description; case PIPE_FORMAT_R8A8_SNORM: return &util_format_r8a8_snorm_description; case PIPE_FORMAT_R16A16_UNORM: return &util_format_r16a16_unorm_description; case PIPE_FORMAT_R16A16_SNORM: return &util_format_r16a16_snorm_description; case PIPE_FORMAT_R16A16_FLOAT: return &util_format_r16a16_float_description; case PIPE_FORMAT_R32A32_FLOAT: return &util_format_r32a32_float_description; case PIPE_FORMAT_R8A8_UINT: return &util_format_r8a8_uint_description; case PIPE_FORMAT_R8A8_SINT: return &util_format_r8a8_sint_description; case PIPE_FORMAT_R16A16_UINT: return &util_format_r16a16_uint_description; case PIPE_FORMAT_R16A16_SINT: return &util_format_r16a16_sint_description; case PIPE_FORMAT_R32A32_UINT: return &util_format_r32a32_uint_description; case PIPE_FORMAT_R32A32_SINT: return &util_format_r32a32_sint_description; case PIPE_FORMAT_R10G10B10A2_UINT: return &util_format_r10g10b10a2_uint_description; case PIPE_FORMAT_B5G6R5_SRGB: return &util_format_b5g6r5_srgb_description; default: return NULL; } }