1c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell/************************************************************************** 2c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 3c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * All Rights Reserved. 5c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 6c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 7c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * copy of this software and associated documentation files (the 8c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * "Software"), to deal in the Software without restriction, including 9c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 10c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 11c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 12c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * the following conditions: 13c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 14c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * The above copyright notice and this permission notice (including the 15c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 16c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * of the Software. 17c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 18c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 26c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell **************************************************************************/ 27c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 28c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell /* 29c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * Authors: 30c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 31c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell */ 32c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 334f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_memory.h" 344b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca#include "util/u_format.h" 351acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák#include "util/u_half.h" 36fc431a58dc1446383edc11aec2a0b7de5b363e5eJosé Fonseca#include "util/u_math.h" 37c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell#include "pipe/p_state.h" 38c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell#include "translate.h" 39c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 40c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 41c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell#define DRAW_DBG 0 42c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 430a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšáktypedef void (*fetch_func)(void *dst, 444b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca const uint8_t *src, 454b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca unsigned i, unsigned j); 460a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšáktypedef void (*emit_func)(const void *attrib, void *ptr); 47c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 48c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 49c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 50c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstruct translate_generic { 51c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell struct translate translate; 52c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 53c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell struct { 54543b9566bdaa48fea2df1866fa1310c1cdbcde27Michal Krol enum translate_element_type type; 55543b9566bdaa48fea2df1866fa1310c1cdbcde27Michal Krol 56c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell fetch_func fetch; 57c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned buffer; 58c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned input_offset; 597ca0ce38340144794267609646048b3820d594abMichal Krol unsigned instance_divisor; 60c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 61c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell emit_func emit; 62c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned output_offset; 63c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 644b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca const uint8_t *input_ptr; 65c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned input_stride; 66fc431a58dc1446383edc11aec2a0b7de5b363e5eJosé Fonseca unsigned max_index; 67c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 68ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri /* this value is set to -1 if this is a normal element with output_format != input_format: 69ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri * in this case, u_format is used to do a full conversion 70ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri * 71ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri * this value is set to the format size in bytes if output_format == input_format or for 32-bit instance ids: 72ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri * in this case, memcpy is used to copy this amount of bytes 73ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri */ 74ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri int copy_size; 75ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri 76c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } attrib[PIPE_MAX_ATTRIBS]; 77c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 78c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned nr_attrib; 79c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell}; 80c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 81c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 82c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstatic struct translate_generic *translate_generic( struct translate *translate ) 83c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 84c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell return (struct translate_generic *)translate; 85c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 86c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 87c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell/** 880a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák * Fetch a dword[4] vertex attribute from memory, doing format/type 89c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * conversion as needed. 90c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * 91c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * This is probably needed/dupliocated elsewhere, eg format 92c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * conversion, texture sampling etc. 93c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell */ 940a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák#define ATTRIB( NAME, SZ, SRCTYPE, DSTTYPE, TO ) \ 95c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstatic void \ 960a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákemit_##NAME(const void *attrib, void *ptr) \ 97c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ \ 98c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned i; \ 990a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák SRCTYPE *in = (SRCTYPE *)attrib; \ 1000a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák DSTTYPE *out = (DSTTYPE *)ptr; \ 101c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell \ 102c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell for (i = 0; i < SZ; i++) { \ 1030a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[i] = TO(in[i]); \ 104c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } \ 105c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 106c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 107c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 108fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_64_FLOAT(x) ((double) x) 109fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_32_FLOAT(x) (x) 1101acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák#define TO_16_FLOAT(x) util_float_to_half(x) 111c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 112fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_8_USCALED(x) ((unsigned char) x) 113fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_16_USCALED(x) ((unsigned short) x) 114fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_32_USCALED(x) ((unsigned int) x) 115c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 116fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_8_SSCALED(x) ((char) x) 117fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_16_SSCALED(x) ((short) x) 118fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_32_SSCALED(x) ((int) x) 119c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 120fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_8_UNORM(x) ((unsigned char) (x * 255.0f)) 121fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_16_UNORM(x) ((unsigned short) (x * 65535.0f)) 122fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_32_UNORM(x) ((unsigned int) (x * 4294967295.0f)) 123c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 124fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_8_SNORM(x) ((char) (x * 127.0f)) 125fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_16_SNORM(x) ((short) (x * 32767.0f)) 126fd6acabd2f62fe006b078ae7640a944c7f65903cJosé Fonseca#define TO_32_SNORM(x) ((int) (x * 2147483647.0f)) 127c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 12889e9d6b6db933c870443714c3d7c9539d117cddfBrian Paul#define TO_32_FIXED(x) ((int) (x * 65536.0f)) 12989e9d6b6db933c870443714c3d7c9539d117cddfBrian Paul 1300a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák#define TO_INT(x) (x) 1310a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1320a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1330a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R64G64B64A64_FLOAT, 4, float, double, TO_64_FLOAT ) 1340a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R64G64B64_FLOAT, 3, float, double, TO_64_FLOAT ) 1350a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R64G64_FLOAT, 2, float, double, TO_64_FLOAT ) 1360a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R64_FLOAT, 1, float, double, TO_64_FLOAT ) 1370a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1380a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_FLOAT, 4, float, float, TO_32_FLOAT ) 1390a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_FLOAT, 3, float, float, TO_32_FLOAT ) 1400a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_FLOAT, 2, float, float, TO_32_FLOAT ) 1410a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_FLOAT, 1, float, float, TO_32_FLOAT ) 1420a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1430a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_FLOAT, 4, float, ushort, TO_16_FLOAT ) 1440a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_FLOAT, 3, float, ushort, TO_16_FLOAT ) 1450a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_FLOAT, 2, float, ushort, TO_16_FLOAT ) 1460a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_FLOAT, 1, float, ushort, TO_16_FLOAT ) 1470a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1480a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_USCALED, 4, float, unsigned, TO_32_USCALED ) 1490a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_USCALED, 3, float, unsigned, TO_32_USCALED ) 1500a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_USCALED, 2, float, unsigned, TO_32_USCALED ) 1510a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_USCALED, 1, float, unsigned, TO_32_USCALED ) 1520a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1530a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_SSCALED, 4, float, int, TO_32_SSCALED ) 1540a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_SSCALED, 3, float, int, TO_32_SSCALED ) 1550a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_SSCALED, 2, float, int, TO_32_SSCALED ) 1560a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_SSCALED, 1, float, int, TO_32_SSCALED ) 1570a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1580a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_UNORM, 4, float, unsigned, TO_32_UNORM ) 1590a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_UNORM, 3, float, unsigned, TO_32_UNORM ) 1600a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_UNORM, 2, float, unsigned, TO_32_UNORM ) 1610a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_UNORM, 1, float, unsigned, TO_32_UNORM ) 1620a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1630a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_SNORM, 4, float, int, TO_32_SNORM ) 1640a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_SNORM, 3, float, int, TO_32_SNORM ) 1650a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_SNORM, 2, float, int, TO_32_SNORM ) 1660a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_SNORM, 1, float, int, TO_32_SNORM ) 1670a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1680a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_USCALED, 4, float, ushort, TO_16_USCALED ) 1690a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_USCALED, 3, float, ushort, TO_16_USCALED ) 1700a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_USCALED, 2, float, ushort, TO_16_USCALED ) 1710a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_USCALED, 1, float, ushort, TO_16_USCALED ) 1720a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1730a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_SSCALED, 4, float, short, TO_16_SSCALED ) 1740a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_SSCALED, 3, float, short, TO_16_SSCALED ) 1750a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_SSCALED, 2, float, short, TO_16_SSCALED ) 1760a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_SSCALED, 1, float, short, TO_16_SSCALED ) 1770a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1780a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_UNORM, 4, float, ushort, TO_16_UNORM ) 1790a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_UNORM, 3, float, ushort, TO_16_UNORM ) 1800a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_UNORM, 2, float, ushort, TO_16_UNORM ) 1810a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_UNORM, 1, float, ushort, TO_16_UNORM ) 1820a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1830a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_SNORM, 4, float, short, TO_16_SNORM ) 1840a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_SNORM, 3, float, short, TO_16_SNORM ) 1850a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_SNORM, 2, float, short, TO_16_SNORM ) 1860a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_SNORM, 1, float, short, TO_16_SNORM ) 1870a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1880a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_USCALED, 4, float, ubyte, TO_8_USCALED ) 1890a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_USCALED, 3, float, ubyte, TO_8_USCALED ) 1900a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_USCALED, 2, float, ubyte, TO_8_USCALED ) 1910a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_USCALED, 1, float, ubyte, TO_8_USCALED ) 1920a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1930a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_SSCALED, 4, float, char, TO_8_SSCALED ) 1940a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_SSCALED, 3, float, char, TO_8_SSCALED ) 1950a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_SSCALED, 2, float, char, TO_8_SSCALED ) 1960a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_SSCALED, 1, float, char, TO_8_SSCALED ) 1970a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 1980a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_UNORM, 4, float, ubyte, TO_8_UNORM ) 1990a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_UNORM, 3, float, ubyte, TO_8_UNORM ) 2000a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_UNORM, 2, float, ubyte, TO_8_UNORM ) 2010a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_UNORM, 1, float, ubyte, TO_8_UNORM ) 2020a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2030a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_SNORM, 4, float, char, TO_8_SNORM ) 2040a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_SNORM, 3, float, char, TO_8_SNORM ) 2050a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_SNORM, 2, float, char, TO_8_SNORM ) 2060a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_SNORM, 1, float, char, TO_8_SNORM ) 2070a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2080a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_UINT, 4, uint32_t, unsigned, TO_INT ) 2090a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_UINT, 3, uint32_t, unsigned, TO_INT ) 2100a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_UINT, 2, uint32_t, unsigned, TO_INT ) 2110a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_UINT, 1, uint32_t, unsigned, TO_INT ) 2120a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2130a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_UINT, 4, uint32_t, ushort, TO_INT ) 2140a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_UINT, 3, uint32_t, ushort, TO_INT ) 2150a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_UINT, 2, uint32_t, ushort, TO_INT ) 2160a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_UINT, 1, uint32_t, ushort, TO_INT ) 2170a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2180a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_UINT, 4, uint32_t, ubyte, TO_INT ) 2190a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_UINT, 3, uint32_t, ubyte, TO_INT ) 2200a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_UINT, 2, uint32_t, ubyte, TO_INT ) 2210a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_UINT, 1, uint32_t, ubyte, TO_INT ) 2220a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2230a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32A32_SINT, 4, int32_t, int, TO_INT ) 2240a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32B32_SINT, 3, int32_t, int, TO_INT ) 2250a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32G32_SINT, 2, int32_t, int, TO_INT ) 2260a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R32_SINT, 1, int32_t, int, TO_INT ) 2270a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2280a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16A16_SINT, 4, int32_t, short, TO_INT ) 2290a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16B16_SINT, 3, int32_t, short, TO_INT ) 2300a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16G16_SINT, 2, int32_t, short, TO_INT ) 2310a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R16_SINT, 1, int32_t, short, TO_INT ) 2320a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 2330a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8A8_SINT, 4, int32_t, char, TO_INT ) 2340a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8B8_SINT, 3, int32_t, char, TO_INT ) 2350a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8G8_SINT, 2, int32_t, char, TO_INT ) 2360a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek OlšákATTRIB( R8_SINT, 1, int32_t, char, TO_INT ) 2374b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca 238684aeb366fb72a2dbf9dd7a0803f29880858cd06Luca Barbieristatic void 2390a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákemit_A8R8G8B8_UNORM( const void *attrib, void *ptr) 240684aeb366fb72a2dbf9dd7a0803f29880858cd06Luca Barbieri{ 2410a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák float *in = (float *)attrib; 242684aeb366fb72a2dbf9dd7a0803f29880858cd06Luca Barbieri ubyte *out = (ubyte *)ptr; 2430a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[0] = TO_8_UNORM(in[3]); 2440a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[1] = TO_8_UNORM(in[0]); 2450a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[2] = TO_8_UNORM(in[1]); 2460a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[3] = TO_8_UNORM(in[2]); 247684aeb366fb72a2dbf9dd7a0803f29880858cd06Luca Barbieri} 248c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 249c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstatic void 2500a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákemit_B8G8R8A8_UNORM( const void *attrib, void *ptr) 251c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 2520a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák float *in = (float *)attrib; 253c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell ubyte *out = (ubyte *)ptr; 2540a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[2] = TO_8_UNORM(in[0]); 2550a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[1] = TO_8_UNORM(in[1]); 2560a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[0] = TO_8_UNORM(in[2]); 2570a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák out[3] = TO_8_UNORM(in[3]); 258c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 259c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 260d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 261d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_B10G10R10A2_UNORM( const void *attrib, void *ptr ) 262d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 263d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 264d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 265d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff; 266d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 10; 267d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff) << 20; 268d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)(CLAMP(src[3], 0, 1) * 0x3)) << 30; 269d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 270d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 271d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 272d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 273d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 274d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 275d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 276d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_B10G10R10A2_USCALED( const void *attrib, void *ptr ) 277d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 278d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 279d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 280d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff; 281d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; 282d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 20; 283d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; 284d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 285d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 286d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 287d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 288d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 289d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 290d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 291d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_B10G10R10A2_SNORM( const void *attrib, void *ptr ) 292d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 293d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 294d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 295d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) ; 296d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; 297d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; 298d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)(CLAMP(src[3], -1, 1) * 0x1)) << 30) ; 299d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 300d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 301d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 302d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 303d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 304d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 305d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 306d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_B10G10R10A2_SSCALED( const void *attrib, void *ptr ) 307d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 308d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 309d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 310d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; 311d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; 312d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; 313d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; 314d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 315d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 316d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 317d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 318d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 319d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 320d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 321d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_R10G10B10A2_UNORM( const void *attrib, void *ptr ) 322d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 323d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 324d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 325d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)(CLAMP(src[0], 0, 1) * 0x3ff)) & 0x3ff; 326d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)(CLAMP(src[1], 0, 1) * 0x3ff)) & 0x3ff) << 10; 327d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)(CLAMP(src[2], 0, 1) * 0x3ff)) & 0x3ff) << 20; 328d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)(CLAMP(src[3], 0, 1) * 0x3)) << 30; 329d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 330d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 331d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 332d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 333d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 334d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 335d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 336d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_R10G10B10A2_USCALED( const void *attrib, void *ptr ) 337d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 338d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 339d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 340d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; 341d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; 342d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; 343d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= ((uint32_t)CLAMP(src[3], 0, 3)) << 30; 344d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 345d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 346d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 347d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 348d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 349d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 350d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 351d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_R10G10B10A2_SNORM( const void *attrib, void *ptr ) 352d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 353d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 354d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 355d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)(CLAMP(src[0], -1, 1) * 0x1ff)) & 0x3ff) ; 356d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)(CLAMP(src[1], -1, 1) * 0x1ff)) & 0x3ff) << 10) ; 357d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)(CLAMP(src[2], -1, 1) * 0x1ff)) & 0x3ff) << 20) ; 358d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)(CLAMP(src[3], -1, 1) * 0x1)) << 30) ; 359d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 360d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 361d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 362d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 363d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 364d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 365d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákstatic void 366d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšákemit_R10G10B10A2_SSCALED( const void *attrib, void *ptr) 367d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák{ 368d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák float *src = (float *)ptr; 369d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák uint32_t value = 0; 370d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; 371d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; 372d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)((((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; 373d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value |= (uint32_t)(((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; 374d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#ifdef PIPE_ARCH_BIG_ENDIAN 375d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák value = util_bswap32(value); 376d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák#endif 377d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák *(uint32_t *)attrib = value; 378d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák} 379d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 3805266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieristatic void 3810a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákemit_NULL( const void *attrib, void *ptr ) 3825266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri{ 3835266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri /* do nothing is the only sensible option */ 3845266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri} 3855266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri 386c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstatic emit_func get_emit_func( enum pipe_format format ) 387c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 388c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell switch (format) { 389c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R64_FLOAT: 39055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R64_FLOAT; 391c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R64G64_FLOAT: 39255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R64G64_FLOAT; 393c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R64G64B64_FLOAT: 39455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R64G64B64_FLOAT; 395c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R64G64B64A64_FLOAT: 39655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R64G64B64A64_FLOAT; 397c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 398c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32_FLOAT: 39955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32_FLOAT; 400c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32_FLOAT: 40155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32_FLOAT; 402c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32_FLOAT: 40355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32_FLOAT; 404c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32A32_FLOAT: 40555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32A32_FLOAT; 406c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 4071acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16_FLOAT: 4081acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák return &emit_R16_FLOAT; 4091acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16_FLOAT: 4101acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák return &emit_R16G16_FLOAT; 4111acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16B16_FLOAT: 4121acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák return &emit_R16G16B16_FLOAT; 4131acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16B16A16_FLOAT: 4141acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák return &emit_R16G16B16A16_FLOAT; 4151acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák 416c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32_UNORM: 41755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32_UNORM; 418c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32_UNORM: 41955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32_UNORM; 420c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32_UNORM: 42155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32_UNORM; 422c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32A32_UNORM: 42355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32A32_UNORM; 424c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 425c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32_USCALED: 42655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32_USCALED; 427c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32_USCALED: 42855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32_USCALED; 429c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32_USCALED: 43055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32_USCALED; 431c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32A32_USCALED: 43255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32A32_USCALED; 433c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 434c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32_SNORM: 43555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32_SNORM; 436c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32_SNORM: 43755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32_SNORM; 438c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32_SNORM: 43955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32_SNORM; 440c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32A32_SNORM: 44155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32A32_SNORM; 442c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 443c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32_SSCALED: 44455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32_SSCALED; 445c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32_SSCALED: 44655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32_SSCALED; 447c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32_SSCALED: 44855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32_SSCALED; 449c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R32G32B32A32_SSCALED: 45055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R32G32B32A32_SSCALED; 451c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 452c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16_UNORM: 45355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16_UNORM; 454c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16_UNORM: 45555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16_UNORM; 456c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16_UNORM: 45755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16_UNORM; 458c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16A16_UNORM: 45955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16A16_UNORM; 460c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 461c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16_USCALED: 46255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16_USCALED; 463c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16_USCALED: 46455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16_USCALED; 465c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16_USCALED: 46655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16_USCALED; 467c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16A16_USCALED: 46855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16A16_USCALED; 469c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 470c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16_SNORM: 47155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16_SNORM; 472c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16_SNORM: 47355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16_SNORM; 474c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16_SNORM: 47555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16_SNORM; 476c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16A16_SNORM: 47755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16A16_SNORM; 478c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 479c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16_SSCALED: 48055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16_SSCALED; 481c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16_SSCALED: 48255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16_SSCALED; 483c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16_SSCALED: 48455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16_SSCALED; 485c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R16G16B16A16_SSCALED: 48655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R16G16B16A16_SSCALED; 487c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 488c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8_UNORM: 48955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8_UNORM; 490c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8_UNORM: 49155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8_UNORM; 492c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8_UNORM: 49355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8_UNORM; 494c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8A8_UNORM: 49555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8A8_UNORM; 496c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 497c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8_USCALED: 49855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8_USCALED; 499c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8_USCALED: 50055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8_USCALED; 501c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8_USCALED: 50255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8_USCALED; 503c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8A8_USCALED: 50455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8A8_USCALED; 505c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 506c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8_SNORM: 50755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8_SNORM; 508c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8_SNORM: 50955d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8_SNORM; 510c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8_SNORM: 51155d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8_SNORM; 512c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8A8_SNORM: 51355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8A8_SNORM; 514c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 515c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8_SSCALED: 51655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8_SSCALED; 517c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8_SSCALED: 51855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8_SSCALED; 519c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8_SSCALED: 52055d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8_SSCALED; 521c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell case PIPE_FORMAT_R8G8B8A8_SSCALED: 52255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca return &emit_R8G8B8A8_SSCALED; 523c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 524a48975347126aacf3a82a5b3e3c69bffd491020aJosé Fonseca case PIPE_FORMAT_B8G8R8A8_UNORM: 525c16d04bd2939154c0360f1ac51fe61a86e5dd9e5Marek Olšák return &emit_B8G8R8A8_UNORM; 526c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 527a48975347126aacf3a82a5b3e3c69bffd491020aJosé Fonseca case PIPE_FORMAT_A8R8G8B8_UNORM: 528c16d04bd2939154c0360f1ac51fe61a86e5dd9e5Marek Olšák return &emit_A8R8G8B8_UNORM; 529c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 5300a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32_UINT: 5310a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32_UINT; 5320a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32_UINT: 5330a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32_UINT; 5340a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32_UINT: 5350a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32B32_UINT; 5360a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32A32_UINT: 5370a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32B32A32_UINT; 5380a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 5390a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16_UINT: 5400a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16_UINT; 5410a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16_UINT: 5420a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16_UINT; 5430a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16_UINT: 5440a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16B16_UINT; 5450a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16A16_UINT: 5460a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16B16A16_UINT; 5470a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 5480a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8_UINT: 5490a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8_UINT; 5500a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8_UINT: 5510a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8_UINT; 5520a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8_UINT: 5530a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8B8_UINT; 5540a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8A8_UINT: 5550a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8B8A8_UINT; 5560a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 5570a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32_SINT: 5580a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32_SINT; 5590a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32_SINT: 5600a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32_SINT; 5610a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32_SINT: 5620a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32B32_SINT; 5630a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32A32_SINT: 5640a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R32G32B32A32_SINT; 5650a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 5660a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16_SINT: 5670a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16_SINT; 5680a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16_SINT: 5690a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16_SINT; 5700a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16_SINT: 5710a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16B16_SINT; 5720a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16A16_SINT: 5730a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R16G16B16A16_SINT; 5740a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 5750a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8_SINT: 5760a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8_SINT; 5770a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8_SINT: 5780a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8_SINT; 5790a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8_SINT: 5800a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8B8_SINT; 5810a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8A8_SINT: 5820a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return &emit_R8G8B8A8_SINT; 5830a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 584d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_UNORM: 585d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_B10G10R10A2_UNORM; 586d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_USCALED: 587d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_B10G10R10A2_USCALED; 588d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_SNORM: 589d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_B10G10R10A2_SNORM; 590d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_SSCALED: 591d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_B10G10R10A2_SSCALED; 592d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 593d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_UNORM: 594d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_R10G10B10A2_UNORM; 595d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_USCALED: 596d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_R10G10B10A2_USCALED; 597d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_SNORM: 598d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_R10G10B10A2_SNORM; 599d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_SSCALED: 600d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák return &emit_R10G10B10A2_SSCALED; 601d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 602c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell default: 6035266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri assert(0); 6045266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri return &emit_NULL; 605c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } 606c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 607c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 6081cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieristatic ALWAYS_INLINE void PIPE_CDECL generic_run_one( struct translate_generic *tg, 6091cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri unsigned elt, 6101cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri unsigned instance_id, 6111cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri void *vert ) 6121cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri{ 6131cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri unsigned nr_attrs = tg->nr_attrib; 6141cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri unsigned attr; 6151cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6161cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri for (attr = 0; attr < nr_attrs; attr++) { 6171cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri float data[4]; 618ded92e5dd8eb39bf2a486a6ce95cbef595149582José Fonseca uint8_t *dst = (uint8_t *)vert + tg->attrib[attr].output_offset; 6191cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6201cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri if (tg->attrib[attr].type == TRANSLATE_ELEMENT_NORMAL) { 6211cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri const uint8_t *src; 6221cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri unsigned index; 6231cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri int copy_size; 6241cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6251cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri if (tg->attrib[attr].instance_divisor) { 6261cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri index = instance_id / tg->attrib[attr].instance_divisor; 6278b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul /* XXX we need to clamp the index here too, but to a 6288b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul * per-array max value, not the draw->pt.max_index value 6298b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul * that's being given to us via translate->set_buffer(). 6308b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul */ 6311cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6321cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri else { 6331cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri index = elt; 6348b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul /* clamp to avoid going out of bounds */ 6358b7f760f835f870b8f6af6c4d6613d44440f1dc5Brian Paul index = MIN2(index, tg->attrib[attr].max_index); 6361cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6371cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6381cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri src = tg->attrib[attr].input_ptr + 6391cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].input_stride * index; 6401cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6411cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri copy_size = tg->attrib[attr].copy_size; 6421cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri if(likely(copy_size >= 0)) 6431cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri memcpy(dst, src, copy_size); 6441cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri else 6451cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri { 6461cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].fetch( data, src, 0, 0 ); 6471cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6481cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri if (0) 6491cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri debug_printf("Fetch linear attr %d from %p stride %d index %d: " 6501cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri " %f, %f, %f, %f \n", 6511cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri attr, 6521cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].input_ptr, 6531cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].input_stride, 6541cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri index, 6551cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri data[0], data[1],data[2], data[3]); 6561cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 6571cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].emit( data, dst ); 6581cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6591cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } else { 6601cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri if(likely(tg->attrib[attr].copy_size >= 0)) 6611cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri memcpy(data, &instance_id, 4); 6621cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri else 6631cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri { 6641cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri data[0] = (float)instance_id; 6651cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri tg->attrib[attr].emit( data, dst ); 6661cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6671cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6681cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri } 6691cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri} 6701cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri 671c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell/** 672c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell * Fetch vertex attributes for 'count' vertices. 673c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell */ 674b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwellstatic void PIPE_CDECL generic_run_elts( struct translate *translate, 675b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell const unsigned *elts, 676b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell unsigned count, 6775007e39f76c897b8f3aa4acf6086c8b7ac30bdefMichal Krol unsigned instance_id, 678b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell void *output_buffer ) 679c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 680c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell struct translate_generic *tg = translate_generic(translate); 681c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell char *vert = output_buffer; 682c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned i; 683c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 684c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell for (i = 0; i < count; i++) { 6851cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri generic_run_one(tg, *elts++, instance_id, vert); 686a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell vert += tg->translate.key.output_stride; 687a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell } 688a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell} 689a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell 6904a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieristatic void PIPE_CDECL generic_run_elts16( struct translate *translate, 6914a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri const uint16_t *elts, 6924a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned count, 6934a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned instance_id, 6944a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri void *output_buffer ) 6954a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri{ 6964a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri struct translate_generic *tg = translate_generic(translate); 6974a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri char *vert = output_buffer; 6984a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned i; 6994a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri 7004a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri for (i = 0; i < count; i++) { 7014a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri generic_run_one(tg, *elts++, instance_id, vert); 7024a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri vert += tg->translate.key.output_stride; 7034a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri } 7044a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri} 7054a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri 7064a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieristatic void PIPE_CDECL generic_run_elts8( struct translate *translate, 7074a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri const uint8_t *elts, 7084a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned count, 7094a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned instance_id, 7104a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri void *output_buffer ) 7114a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri{ 7124a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri struct translate_generic *tg = translate_generic(translate); 7134a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri char *vert = output_buffer; 7144a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri unsigned i; 7154a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri 7164a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri for (i = 0; i < count; i++) { 7174a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri generic_run_one(tg, *elts++, instance_id, vert); 7184a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri vert += tg->translate.key.output_stride; 7194a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri } 7204a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri} 7214a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri 722b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwellstatic void PIPE_CDECL generic_run( struct translate *translate, 723b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell unsigned start, 724b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell unsigned count, 7257ca0ce38340144794267609646048b3820d594abMichal Krol unsigned instance_id, 726b5c8b3fba6ac90a0d83e02bfe432142f1adee9e5Keith Whitwell void *output_buffer ) 727a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell{ 728a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell struct translate_generic *tg = translate_generic(translate); 729a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell char *vert = output_buffer; 730a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell unsigned i; 731a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell 732a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell for (i = 0; i < count; i++) { 7331cb92fb92e69b5b138293398a98665c2a3c63a5bLuca Barbieri generic_run_one(tg, start + i, instance_id, vert); 734a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell vert += tg->translate.key.output_stride; 735c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } 736c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 737c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 738c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 739c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 740c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwellstatic void generic_set_buffer( struct translate *translate, 741c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned buf, 742c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell const void *ptr, 743fc431a58dc1446383edc11aec2a0b7de5b363e5eJosé Fonseca unsigned stride, 744fc431a58dc1446383edc11aec2a0b7de5b363e5eJosé Fonseca unsigned max_index ) 745c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 746c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell struct translate_generic *tg = translate_generic(translate); 747c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned i; 748c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 749c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell for (i = 0; i < tg->nr_attrib; i++) { 750c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell if (tg->attrib[i].buffer == buf) { 7514b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca tg->attrib[i].input_ptr = ((const uint8_t *)ptr + 752c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell tg->attrib[i].input_offset); 753c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell tg->attrib[i].input_stride = stride; 754fc431a58dc1446383edc11aec2a0b7de5b363e5eJosé Fonseca tg->attrib[i].max_index = max_index; 755c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } 756c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } 757c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 758c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 759c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 760a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwellstatic void generic_release( struct translate *translate ) 761c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 762a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell /* Refcount? 763a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell */ 764c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell FREE(translate); 765c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 766c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 7670a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákstatic boolean 7680a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšákis_legal_int_format_combo( const struct util_format_description *src, 7690a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák const struct util_format_description *dst ) 7700a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák{ 7710a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák unsigned i; 7720a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák unsigned nr = MIN2(src->nr_channels, dst->nr_channels); 7730a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 7740a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák for (i = 0; i < nr; i++) { 7750a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák /* The signs must match. */ 7767528e2104fdda88a9eca5d84d979a21f5c517dc9Vinson Lee if (src->channel[i].type != dst->channel[i].type) { 7770a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return FALSE; 7780a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 7790a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 7800a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák /* Integers must not lose precision at any point in the pipeline. */ 7810a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák if (src->channel[i].size > dst->channel[i].size) { 7820a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return FALSE; 7830a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 7840a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 7850a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return TRUE; 7860a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák} 7870a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 788a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwellstruct translate *translate_generic_create( const struct translate_key *key ) 789c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell{ 790c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell struct translate_generic *tg = CALLOC_STRUCT(translate_generic); 791c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell unsigned i; 792c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 793c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell if (tg == NULL) 794c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell return NULL; 795c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 796a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->translate.key = *key; 797a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->translate.release = generic_release; 798c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell tg->translate.set_buffer = generic_set_buffer; 799c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell tg->translate.run_elts = generic_run_elts; 8004a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri tg->translate.run_elts16 = generic_run_elts16; 8014a4e29a9ab96d44fca9bb25064e12715aac85cbdLuca Barbieri tg->translate.run_elts8 = generic_run_elts8; 802a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->translate.run = generic_run; 803a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell 804a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell for (i = 0; i < key->nr_elements; i++) { 8054b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca const struct util_format_description *format_desc = 8064b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca util_format_description(key->element[i].input_format); 8074b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca 8084b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca assert(format_desc); 8094b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca assert(format_desc->fetch_rgba_float); 8104b891234f81d441426a62abcff96720022d2ac3dJosé Fonseca 811543b9566bdaa48fea2df1866fa1310c1cdbcde27Michal Krol tg->attrib[i].type = key->element[i].type; 812a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell 8130a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák if (format_desc->channel[0].pure_integer) { 8140a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák const struct util_format_description *out_format_desc = 8150a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák util_format_description(key->element[i].output_format); 8160a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 8170a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák if (!is_legal_int_format_combo(format_desc, out_format_desc)) { 8180a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák FREE(tg); 8190a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák return NULL; 8200a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 8210a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 8220a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) { 8230a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák tg->attrib[i].fetch = (fetch_func)format_desc->fetch_rgba_sint; 8240a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } else { 8250a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák tg->attrib[i].fetch = (fetch_func)format_desc->fetch_rgba_uint; 8260a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 8270a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } else { 8280a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák tg->attrib[i].fetch = (fetch_func)format_desc->fetch_rgba_float; 8290a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák } 8300a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 831a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->attrib[i].buffer = key->element[i].input_buffer; 832a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->attrib[i].input_offset = key->element[i].input_offset; 8337ca0ce38340144794267609646048b3820d594abMichal Krol tg->attrib[i].instance_divisor = key->element[i].instance_divisor; 834c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 835a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->attrib[i].output_offset = key->element[i].output_offset; 8365266bc3c60033ccc3515b3a6d02f7219f981cbb1Luca Barbieri 837ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri tg->attrib[i].copy_size = -1; 838ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri if (tg->attrib[i].type == TRANSLATE_ELEMENT_INSTANCE_ID) 839ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri { 840ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri if(key->element[i].output_format == PIPE_FORMAT_R32_USCALED 841ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri || key->element[i].output_format == PIPE_FORMAT_R32_SSCALED) 842ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri tg->attrib[i].copy_size = 4; 843ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri } 844ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri else 845ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri { 846ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri if(key->element[i].input_format == key->element[i].output_format 847ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri && format_desc->block.width == 1 848ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri && format_desc->block.height == 1 849ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri && !(format_desc->block.bits & 7)) 850ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri tg->attrib[i].copy_size = format_desc->block.bits >> 3; 851ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri } 852ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri 853ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri if(tg->attrib[i].copy_size < 0) 854ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri tg->attrib[i].emit = get_emit_func(key->element[i].output_format); 855ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri else 856ddcf028aa0a1bd6f79381164c8b1c3b816792e47Luca Barbieri tg->attrib[i].emit = NULL; 857c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell } 858c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 859a5a7dc24ba2dcf9bbdd73709c4c182e324bdc3a5Keith Whitwell tg->nr_attrib = key->nr_elements; 860c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 861c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell 862c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell return &tg->translate; 863c81bbab6f6c0413996799800cac6fb49a698e765Keith Whitwell} 86410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 86510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieriboolean translate_generic_is_output_format_supported(enum pipe_format format) 86610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri{ 86710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri switch(format) 86810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri { 86910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R64G64B64A64_FLOAT: return TRUE; 87010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R64G64B64_FLOAT: return TRUE; 87110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R64G64_FLOAT: return TRUE; 87210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R64_FLOAT: return TRUE; 87310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 87410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32A32_FLOAT: return TRUE; 87510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32_FLOAT: return TRUE; 87610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32_FLOAT: return TRUE; 87710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32_FLOAT: return TRUE; 87810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 8791acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16B16A16_FLOAT: return TRUE; 8801acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16B16_FLOAT: return TRUE; 8811acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16G16_FLOAT: return TRUE; 8821acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák case PIPE_FORMAT_R16_FLOAT: return TRUE; 8831acef6a7465e8c54dc10a43c9e7278d4506c1d5eMarek Olšák 88410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32A32_USCALED: return TRUE; 88510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32_USCALED: return TRUE; 88610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32_USCALED: return TRUE; 88710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32_USCALED: return TRUE; 88810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 88910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32A32_SSCALED: return TRUE; 89010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32_SSCALED: return TRUE; 89110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32_SSCALED: return TRUE; 89210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32_SSCALED: return TRUE; 89310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 89410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32A32_UNORM: return TRUE; 89510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32_UNORM: return TRUE; 89610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32_UNORM: return TRUE; 89710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32_UNORM: return TRUE; 89810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 89910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32A32_SNORM: return TRUE; 90010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32B32_SNORM: return TRUE; 90110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32G32_SNORM: return TRUE; 90210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R32_SNORM: return TRUE; 90310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 90410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16A16_USCALED: return TRUE; 90510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16_USCALED: return TRUE; 90610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16_USCALED: return TRUE; 90710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16_USCALED: return TRUE; 90810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 90910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16A16_SSCALED: return TRUE; 91010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16_SSCALED: return TRUE; 91110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16_SSCALED: return TRUE; 91210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16_SSCALED: return TRUE; 91310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 91410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16A16_UNORM: return TRUE; 91510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16_UNORM: return TRUE; 91610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16_UNORM: return TRUE; 91710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16_UNORM: return TRUE; 91810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 91910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16A16_SNORM: return TRUE; 92010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16B16_SNORM: return TRUE; 92110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16G16_SNORM: return TRUE; 92210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R16_SNORM: return TRUE; 92310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 92410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8A8_USCALED: return TRUE; 92510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8_USCALED: return TRUE; 92610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8_USCALED: return TRUE; 92710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8_USCALED: return TRUE; 92810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 92910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8A8_SSCALED: return TRUE; 93010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8_SSCALED: return TRUE; 93110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8_SSCALED: return TRUE; 93210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8_SSCALED: return TRUE; 93310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 93410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8A8_UNORM: return TRUE; 93510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8_UNORM: return TRUE; 93610adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8_UNORM: return TRUE; 93710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8_UNORM: return TRUE; 93810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 93910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8A8_SNORM: return TRUE; 94010adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8B8_SNORM: return TRUE; 94110adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8G8_SNORM: return TRUE; 94210adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_R8_SNORM: return TRUE; 94310adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri 94410adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_A8R8G8B8_UNORM: return TRUE; 94510adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri case PIPE_FORMAT_B8G8R8A8_UNORM: return TRUE; 9460a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9470a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32A32_UINT: return TRUE; 9480a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32_UINT: return TRUE; 9490a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32_UINT: return TRUE; 9500a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32_UINT: return TRUE; 9510a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9520a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16A16_UINT: return TRUE; 9530a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16_UINT: return TRUE; 9540a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16_UINT: return TRUE; 9550a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16_UINT: return TRUE; 9560a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9570a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8A8_UINT: return TRUE; 9580a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8_UINT: return TRUE; 9590a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8_UINT: return TRUE; 9600a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8_UINT: return TRUE; 9610a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9620a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32A32_SINT: return TRUE; 9630a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32B32_SINT: return TRUE; 9640a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32G32_SINT: return TRUE; 9650a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R32_SINT: return TRUE; 9660a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9670a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16A16_SINT: return TRUE; 9680a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16B16_SINT: return TRUE; 9690a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16G16_SINT: return TRUE; 9700a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R16_SINT: return TRUE; 9710a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 9720a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8A8_SINT: return TRUE; 9730a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8B8_SINT: return TRUE; 9740a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8G8_SINT: return TRUE; 9750a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák case PIPE_FORMAT_R8_SINT: return TRUE; 9760a8a7144a152eba0e1bd955b7a423ed5336a9f31Marek Olšák 977d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_UNORM: return TRUE; 978d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_USCALED: return TRUE; 979d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_SNORM: return TRUE; 980d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_B10G10R10A2_SSCALED: return TRUE; 981d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 982d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_UNORM: return TRUE; 983d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_USCALED: return TRUE; 984d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_SNORM: return TRUE; 985d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák case PIPE_FORMAT_R10G10B10A2_SSCALED: return TRUE; 986d1f11ed3eff405561fd94ed05a9f0e5e049f0908Marek Olšák 98710adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri default: return FALSE; 98810adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri } 98910adb7840c3a37dedc940fe593b246336eebd71eLuca Barbieri} 990