1/* 2 * Copyright (C) 2016 Rob Clark <robclark@freedesktop.org> 3 * Copyright © 2018 Google, Inc. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 * 24 * Authors: 25 * Rob Clark <robclark@freedesktop.org> 26 */ 27 28#ifndef FD6_UTIL_H_ 29#define FD6_UTIL_H_ 30 31#include "freedreno_resource.h" 32#include "freedreno_util.h" 33 34#include "a6xx.xml.h" 35 36enum a6xx_vtx_fmt fd6_pipe2vtx(enum pipe_format format); 37enum a6xx_tex_fmt fd6_pipe2tex(enum pipe_format format); 38enum a6xx_color_fmt fd6_pipe2color(enum pipe_format format); 39enum a3xx_color_swap fd6_pipe2swap(enum pipe_format format); 40enum a6xx_tex_fetchsize fd6_pipe2fetchsize(enum pipe_format format); 41enum a6xx_depth_format fd6_pipe2depth(enum pipe_format format); 42enum a6xx_tex_swiz fd6_pipe2swiz(unsigned swiz); 43 44void fd6_tex_swiz(enum pipe_format format, unsigned char *swiz, 45 unsigned swizzle_r, unsigned swizzle_g, 46 unsigned swizzle_b, unsigned swizzle_a); 47 48uint32_t fd6_tex_const_0(struct pipe_resource *prsc, 49 unsigned level, enum pipe_format format, 50 unsigned swizzle_r, unsigned swizzle_g, 51 unsigned swizzle_b, unsigned swizzle_a); 52 53static inline enum a6xx_2d_ifmt 54fd6_ifmt(enum a6xx_color_fmt fmt) 55{ 56 switch (fmt) { 57 case RB6_A8_UNORM: 58 case RB6_R8_UNORM: 59 case RB6_R8_SNORM: 60 case RB6_R8G8_UNORM: 61 case RB6_R8G8_SNORM: 62 case RB6_R8G8B8A8_UNORM: 63 case RB6_R8G8B8_UNORM: 64 case RB6_R8G8B8A8_SNORM: 65 return R2D_UNORM8; 66 67 case RB6_R32_UINT: 68 case RB6_R32_SINT: 69 case RB6_R32G32_UINT: 70 case RB6_R32G32_SINT: 71 case RB6_R32G32B32A32_UINT: 72 case RB6_R32G32B32A32_SINT: 73 return R2D_INT32; 74 75 case RB6_R16_UINT: 76 case RB6_R16_SINT: 77 case RB6_R16G16_UINT: 78 case RB6_R16G16_SINT: 79 case RB6_R16G16B16A16_UINT: 80 case RB6_R16G16B16A16_SINT: 81 return R2D_INT16; 82 83 case RB6_R8_UINT: 84 case RB6_R8_SINT: 85 case RB6_R8G8_UINT: 86 case RB6_R8G8_SINT: 87 case RB6_R8G8B8A8_UINT: 88 case RB6_R8G8B8A8_SINT: 89 return R2D_INT8; 90 91 case RB6_R16_UNORM: 92 case RB6_R16_SNORM: 93 case RB6_R16G16_UNORM: 94 case RB6_R16G16_SNORM: 95 case RB6_R16G16B16A16_UNORM: 96 case RB6_R16G16B16A16_SNORM: 97 case RB6_R32_FLOAT: 98 case RB6_R32G32_FLOAT: 99 case RB6_R32G32B32A32_FLOAT: 100 return R2D_FLOAT32; 101 102 case RB6_R16_FLOAT: 103 case RB6_R16G16_FLOAT: 104 case RB6_R16G16B16A16_FLOAT: 105 return R2D_FLOAT16; 106 107 case RB6_R4G4B4A4_UNORM: 108 case RB6_R5G5B5A1_UNORM: 109 case RB6_R5G6B5_UNORM: 110 case RB6_R10G10B10A2_UNORM: 111 case RB6_R10G10B10A2_UINT: 112 case RB6_R11G11B10_FLOAT: 113 case RB6_X8Z24_UNORM: 114 // ??? 115 return 0; 116 default: 117 unreachable("bad format"); 118 return 0; 119 } 120} 121 122#endif /* FD6_UTIL_H_ */ 123