kolibrios-fun/drivers/video/Gallium/auxiliary/util/u_format_table.c
Sergey Semyonov (Serge) edb28b33f3 Gallium 3D: initial commit
git-svn-id: svn://kolibrios.org@3770 a494cfbc-eb01-0410-851d-a64ba20cac60
2013-07-06 10:06:47 +00:00

28412 lines
905 KiB
C

/* 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 "pipe/p_compiler.h"
#include "u_math.h"
#include "u_half.h"
#include "u_format.h"
#include "u_format_other.h"
#include "u_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 {
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_b8g8r8x8_unorm {
uint32_t value;
struct {
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint32_t value = 0;
value |= (src[2]) & 0xff;
value |= ((src[1]) & 0xff) << 8;
value |= ((src[0]) & 0xff) << 16;
*(uint32_t *)dst = value;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_a8r8g8b8_unorm {
uint32_t value;
struct {
uint8_t a;
uint8_t r;
uint8_t g;
uint8_t b;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_x8r8g8b8_unorm {
uint32_t value;
struct {
uint8_t x;
uint8_t r;
uint8_t g;
uint8_t b;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint32_t value = 0;
value |= ((src[0]) & 0xff) << 8;
value |= ((src[1]) & 0xff) << 16;
value |= (src[2]) << 24;
*(uint32_t *)dst = value;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_a8b8g8r8_unorm {
uint32_t value;
struct {
uint8_t a;
uint8_t b;
uint8_t g;
uint8_t r;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_x8b8g8r8_unorm {
uint32_t value;
struct {
uint8_t x;
uint8_t b;
uint8_t g;
uint8_t r;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint32_t value = 0;
value |= ((src[2]) & 0xff) << 8;
value |= ((src[1]) & 0xff) << 16;
value |= (src[0]) << 24;
*(uint32_t *)dst = value;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8x8_unorm {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint32_t value = 0;
value |= (src[0]) & 0xff;
value |= ((src[1]) & 0xff) << 8;
value |= ((src[2]) & 0xff) << 16;
*(uint32_t *)dst = value;
src += 4;
dst += 4;
}
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 {
unsigned rgb:4;
unsigned a:4;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint8_t value = 0;
value |= ((uint8_t)(src[0] >> 4)) & 0xf;
value |= ((uint8_t)(src[3] >> 4)) << 4;
*(uint8_t *)dst = value;
src += 4;
dst += 1;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_l8a8_unorm {
uint16_t value;
struct {
uint8_t rgb;
uint8_t a;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= (float_to_ubyte(src[0])) & 0xff;
value |= (float_to_ubyte(src[3])) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
uint16_t value = 0;
value |= (src[0]) & 0xff;
value |= (src[3]) << 8;
*(uint16_t *)dst = value;
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 {
uint16_t rgb;
uint16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int8_t rgb;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int16_t rgb;
int16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
uint16_t rgb;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
float rgb;
float a;
} 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) {
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 */
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) {
union util_format_l32a32_float pixel;
pixel.chan.rgb = src[0];
pixel.chan.a = src[3];
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_l32a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
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_r8sg8sb8ux8u_norm {
uint32_t value;
struct {
int8_t r;
int8_t g;
uint8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r5sg5sb6u_norm {
uint16_t value;
struct {
int r:5;
int g:5;
unsigned b:6;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
double r;
double g;
} 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) {
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 */
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) {
union util_format_r64g64_float pixel;
pixel.chan.r = (double)src[0];
pixel.chan.g = (double)src[1];
memcpy(dst, &pixel, sizeof pixel);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 16;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r64g64b64_float {
struct {
double r;
double g;
double b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 24;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r64g64b64a64_float {
struct {
double r;
double g;
double b;
double a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
float r;
float g;
} 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) {
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 */
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) {
union util_format_r32g32_float pixel;
pixel.chan.r = src[0];
pixel.chan.g = src[1];
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_r32g32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_float {
struct {
float r;
float g;
float b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_float {
struct {
float r;
float g;
float b;
float a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint32_t r;
uint32_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_unorm {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_unorm {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
uint32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint32_t r;
uint32_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_uscaled {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_uscaled {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
uint32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int32_t r;
int32_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_snorm {
struct {
int32_t r;
int32_t g;
int32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_snorm {
struct {
int32_t r;
int32_t g;
int32_t b;
int32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int32_t r;
int32_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_sscaled {
struct {
int32_t r;
int32_t g;
int32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_sscaled {
struct {
int32_t r;
int32_t g;
int32_t b;
int32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint16_t r;
uint16_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_float {
struct {
uint16_t r;
uint16_t g;
uint16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_float {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint16_t r;
uint16_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_unorm {
struct {
uint16_t r;
uint16_t g;
uint16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_unorm {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint16_t r;
uint16_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_uscaled {
struct {
uint16_t r;
uint16_t g;
uint16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_uscaled {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int16_t r;
int16_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_snorm {
struct {
int16_t r;
int16_t g;
int16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_snorm {
uint64_t value;
struct {
int16_t r;
int16_t g;
int16_t b;
int16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int16_t r;
int16_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_sscaled {
struct {
int16_t r;
int16_t g;
int16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_sscaled {
uint64_t value;
struct {
int16_t r;
int16_t g;
int16_t b;
int16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint8_t r;
uint8_t g;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= (float_to_ubyte(src[0])) & 0xff;
value |= (float_to_ubyte(src[1])) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
uint16_t value = 0;
value |= (src[0]) & 0xff;
value |= (src[1]) << 8;
*(uint16_t *)dst = value;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_unorm {
struct {
uint8_t r;
uint8_t g;
uint8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_unorm {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
uint8_t r;
uint8_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_uscaled {
struct {
uint8_t r;
uint8_t g;
uint8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_uscaled {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int8_t r;
int8_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_snorm {
struct {
int8_t r;
int8_t g;
int8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_snorm {
uint32_t value;
struct {
int8_t r;
int8_t g;
int8_t b;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int8_t r;
int8_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_sscaled {
struct {
int8_t r;
int8_t g;
int8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_sscaled {
uint32_t value;
struct {
int8_t r;
int8_t g;
int8_t b;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int32_t r;
int32_t g;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_fixed {
struct {
int32_t r;
int32_t g;
int32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_fixed {
struct {
int32_t r;
int32_t g;
int32_t b;
int32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 16;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r10g10b10x2_uscaled {
uint32_t value;
struct {
unsigned r:10;
unsigned g:10;
unsigned b:10;
unsigned x:2;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r10g10b10x2_snorm {
uint32_t value;
struct {
int r:10;
int g:10;
int b:10;
unsigned x:2;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r4a4_unorm {
uint8_t value;
struct {
unsigned a:4;
unsigned r:4;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint8_t value = 0;
value |= ((uint8_t)(src[3] >> 4)) & 0xf;
value |= ((uint8_t)(src[0] >> 4)) << 4;
*(uint8_t *)dst = value;
src += 4;
dst += 1;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_a4r4_unorm {
uint8_t value;
struct {
unsigned r:4;
unsigned a:4;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
uint8_t value = 0;
value |= ((uint8_t)(src[0] >> 4)) & 0xf;
value |= ((uint8_t)(src[3] >> 4)) << 4;
*(uint8_t *)dst = value;
src += 4;
dst += 1;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8a8_unorm {
uint16_t value;
struct {
uint8_t r;
uint8_t a;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= (float_to_ubyte(src[0])) & 0xff;
value |= (float_to_ubyte(src[3])) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
uint16_t value = 0;
value |= (src[0]) & 0xff;
value |= (src[3]) << 8;
*(uint16_t *)dst = value;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_a8r8_unorm {
uint16_t value;
struct {
uint8_t a;
uint8_t r;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= (float_to_ubyte(src[3])) & 0xff;
value |= (float_to_ubyte(src[0])) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
uint16_t value = 0;
value |= (src[3]) & 0xff;
value |= (src[0]) << 8;
*(uint16_t *)dst = value;
src += 4;
dst += 2;
}
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 {
uint8_t r;
uint8_t g;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= ((uint8_t)MIN2(src[0], 255)) & 0xff;
value |= ((uint8_t)MIN2(src[1], 255)) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_uint {
struct {
uint8_t r;
uint8_t g;
uint8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_uint {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int8_t r;
int8_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8_sint {
struct {
int8_t r;
int8_t g;
int8_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 3;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8a8_sint {
uint32_t value;
struct {
int8_t r;
int8_t g;
int8_t b;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
uint16_t r;
uint16_t g;
} 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) {
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 */
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) {
uint32_t value = 0;
value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff;
value |= ((uint16_t)MIN2(src[1], 65535)) << 16;
*(uint32_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_uint {
struct {
uint16_t r;
uint16_t g;
uint16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_uint {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int16_t r;
int16_t g;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16_sint {
struct {
int16_t r;
int16_t g;
int16_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 6;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16a16_sint {
uint64_t value;
struct {
int16_t r;
int16_t g;
int16_t b;
int16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint32_t r;
uint32_t g;
} 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) {
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 */
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) {
union util_format_r32g32_uint pixel;
pixel.chan.r = src[0];
pixel.chan.g = src[1];
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_r32g32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_uint {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_uint {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
uint32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int32_t r;
int32_t g;
} 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) {
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 */
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) {
union util_format_r32g32_sint pixel;
pixel.chan.r = src[0];
pixel.chan.g = src[1];
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_r32g32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32_sint {
struct {
int32_t r;
int32_t g;
int32_t b;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 12;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32a32_sint {
struct {
int32_t r;
int32_t g;
int32_t b;
int32_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
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 {
uint8_t rgb;
uint8_t a;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= ((uint8_t)MIN2(src[0], 255)) & 0xff;
value |= ((uint8_t)MIN2(src[3], 255)) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int8_t rgb;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
uint16_t rgb;
uint16_t a;
} 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) {
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 */
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) {
uint32_t value = 0;
value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff;
value |= ((uint16_t)MIN2(src[3], 65535)) << 16;
*(uint32_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
int16_t rgb;
int16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
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 {
uint32_t rgb;
uint32_t a;
} 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) {
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 */
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) {
union util_format_l32a32_uint pixel;
pixel.chan.rgb = src[0];
pixel.chan.a = src[3];
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_l32a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
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 {
int32_t rgb;
int32_t a;
} 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) {
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 */
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) {
union util_format_l32a32_sint pixel;
pixel.chan.rgb = src[0];
pixel.chan.a = src[3];
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_l32a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8x8_snorm {
uint32_t value;
struct {
int8_t r;
int8_t g;
int8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8x8_srgb {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8x8_uint {
uint32_t value;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8g8b8x8_sint {
uint32_t value;
struct {
int8_t r;
int8_t g;
int8_t b;
uint8_t x;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16x16_unorm {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16x16_snorm {
uint64_t value;
struct {
int16_t r;
int16_t g;
int16_t b;
uint16_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16x16_float {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16x16_uint {
uint64_t value;
struct {
uint16_t r;
uint16_t g;
uint16_t b;
uint16_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16g16b16x16_sint {
uint64_t value;
struct {
int16_t r;
int16_t g;
int16_t b;
uint16_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32x32_float {
struct {
float r;
float g;
float b;
uint32_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 16;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32x32_uint {
struct {
uint32_t r;
uint32_t g;
uint32_t b;
uint32_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 16;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32g32b32x32_sint {
struct {
int32_t r;
int32_t g;
int32_t b;
uint32_t x;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 16;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8a8_snorm {
uint16_t value;
struct {
int8_t r;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16a16_unorm {
uint32_t value;
struct {
uint16_t r;
uint16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16a16_snorm {
uint32_t value;
struct {
int16_t r;
int16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16a16_float {
uint32_t value;
struct {
uint16_t r;
uint16_t a;
} 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) {
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 */
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) {
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);
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)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32a32_float {
uint64_t value;
struct {
float r;
float a;
} 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) {
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 */
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) {
union util_format_r32a32_float pixel;
pixel.chan.r = src[0];
pixel.chan.a = src[3];
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_r32a32_float_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8a8_uint {
uint16_t value;
struct {
uint8_t r;
uint8_t a;
} 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) {
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 */
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) {
uint16_t value = 0;
value |= ((uint8_t)MIN2(src[0], 255)) & 0xff;
value |= ((uint8_t)MIN2(src[3], 255)) << 8;
*(uint16_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r8a8_sint {
uint16_t value;
struct {
int8_t r;
int8_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 2;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16a16_uint {
uint32_t value;
struct {
uint16_t r;
uint16_t a;
} 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) {
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 */
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) {
uint32_t value = 0;
value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff;
value |= ((uint16_t)MIN2(src[3], 65535)) << 16;
*(uint32_t *)dst = value;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r16a16_sint {
uint32_t value;
struct {
int16_t r;
int16_t a;
} 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) {
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 */
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) {
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;
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)
{
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 */
}
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) {
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 */
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) {
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;
src += 4;
dst += 4;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32a32_uint {
uint64_t value;
struct {
uint32_t r;
uint32_t a;
} 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) {
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 */
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) {
union util_format_r32a32_uint pixel;
pixel.chan.r = src[0];
pixel.chan.a = src[3];
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_r32a32_uint_fetch_unsigned(unsigned *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
dst_row += dst_stride;
src_row += src_stride/sizeof(*src_row);
}
}
union util_format_r32a32_sint {
uint64_t value;
struct {
int32_t r;
int32_t a;
} 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) {
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 */
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) {
union util_format_r32a32_sint pixel;
pixel.chan.r = src[0];
pixel.chan.a = src[3];
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_r32a32_sint_fetch_signed(int *dst, const uint8_t *src, unsigned i, unsigned j)
{
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 */
}
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) {
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 */
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) {
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);
src += 4;
dst += 8;
}
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_Z, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_W /* a */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_Z, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_1 /* a */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_Y, /* r */
UTIL_FORMAT_SWIZZLE_Z, /* g */
UTIL_FORMAT_SWIZZLE_W, /* b */
UTIL_FORMAT_SWIZZLE_X /* a */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_Y, /* r */
UTIL_FORMAT_SWIZZLE_Z, /* g */
UTIL_FORMAT_SWIZZLE_W, /* b */
UTIL_FORMAT_SWIZZLE_1 /* a */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_W, /* r */
UTIL_FORMAT_SWIZZLE_Z, /* g */
UTIL_FORMAT_SWIZZLE_Y, /* b */
UTIL_FORMAT_SWIZZLE_X /* a */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_W, /* r */
UTIL_FORMAT_SWIZZLE_Z, /* g */
UTIL_FORMAT_SWIZZLE_Y, /* b */
UTIL_FORMAT_SWIZZLE_1 /* a */
},
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 */
{
{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 */
},
{
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_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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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_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 */
{
{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 */
},
{
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_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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* z */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_Y, /* 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 */
&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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_NONE, /* z */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* z */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_NONE, /* z */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
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_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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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}
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* y */
UTIL_FORMAT_SWIZZLE_Y, /* u */
UTIL_FORMAT_SWIZZLE_Z, /* v */
UTIL_FORMAT_SWIZZLE_W /* ignored */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* y */
UTIL_FORMAT_SWIZZLE_Y, /* u */
UTIL_FORMAT_SWIZZLE_Z, /* v */
UTIL_FORMAT_SWIZZLE_W /* ignored */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* y */
UTIL_FORMAT_SWIZZLE_Y, /* u */
UTIL_FORMAT_SWIZZLE_Z, /* v */
UTIL_FORMAT_SWIZZLE_W /* ignored */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* y */
UTIL_FORMAT_SWIZZLE_Y, /* u */
UTIL_FORMAT_SWIZZLE_Z, /* v */
UTIL_FORMAT_SWIZZLE_W /* ignored */
},
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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* y */
UTIL_FORMAT_SWIZZLE_Y, /* u */
UTIL_FORMAT_SWIZZLE_Z, /* v */
UTIL_FORMAT_SWIZZLE_W /* ignored */
},
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_Y, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_X /* a */
},
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_Y, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_X /* a */
},
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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* b */
UTIL_FORMAT_SWIZZLE_W /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_X, /* g */
UTIL_FORMAT_SWIZZLE_X, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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 */
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_Y, /* g */
UTIL_FORMAT_SWIZZLE_Z, /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* a */
},
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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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 */
{
{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}
},
{
UTIL_FORMAT_SWIZZLE_X, /* r */
UTIL_FORMAT_SWIZZLE_0, /* g */
UTIL_FORMAT_SWIZZLE_0, /* b */
UTIL_FORMAT_SWIZZLE_Y /* 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_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_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_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_R8SG8SB8UX8U_NORM:
return &util_format_r8sg8sb8ux8u_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_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_R4A4_UNORM:
return &util_format_r4a4_unorm_description;
case PIPE_FORMAT_A4R4_UNORM:
return &util_format_a4r4_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_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_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_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;
default:
return NULL;
}
}