1/* 2 * Copyright 2012 Red Hat Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 * SOFTWARE. 21 * 22 * Authors: Ben Skeggs 23 * 24 */ 25 26#include "nv30-40_3d.xml.h" 27#include "nv30_context.h" 28#include "nv30_format.h" 29 30#define NV30_3D_RT_FORMAT_COLOR_X1R5G5B5 2 31 32#define NV30_3D_TEX_FORMAT_FORMAT_A16L16 NV30_3D_TEX_FORMAT_FORMAT_HILO16 33#define NV30_3D_TEX_FORMAT_FORMAT_A16L16_RECT NV30_3D_TEX_FORMAT_FORMAT_HILO16_RECT 34#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F 0x00004a00 35#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA16F 36#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F 0x00004b00 37#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA32F 38#define NV30_3D_TEX_FORMAT_FORMAT_R32F 0x00004c00 39#define NV30_3D_TEX_FORMAT_FORMAT_R32F_RECT NV30_3D_TEX_FORMAT_FORMAT_R32F 40#define NV30_3D_TEX_FORMAT_FORMAT_DXT1_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT1 41#define NV30_3D_TEX_FORMAT_FORMAT_DXT3_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT3 42#define NV30_3D_TEX_FORMAT_FORMAT_DXT5_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT5 43#define NV30_3D_TEX_FORMAT_FORMAT_RG16F 0xdeadcafe 44#define NV30_3D_TEX_FORMAT_FORMAT_RG16F_RECT 0xdeadcafe 45 46#define NV40_3D_TEX_FORMAT_FORMAT_R32F 0x00001c00 47#define NV40_3D_TEX_FORMAT_FORMAT_RG16F 0x00001f00 48 49#define ____ 0 50#define S___ PIPE_BIND_SAMPLER_VIEW 51#define _R__ PIPE_BIND_RENDER_TARGET 52#define _B__ PIPE_BIND_RENDER_TARGET | PIPE_BIND_BLENDABLE 53#define _Z__ PIPE_BIND_DEPTH_STENCIL 54#define __V_ PIPE_BIND_VERTEX_BUFFER 55#define SR__ (S___ | _R__) 56#define SB__ (S___ | _B__) 57#define SZ__ (S___ | _Z__) 58#define S_V_ (S___ | __V_) 59#define SRV_ (SR__ | __V_) 60#define SBV_ (SB__ | __V_) 61 62#define _(a,b) [PIPE_FORMAT_##a] = { \ 63 .bindings = (b), \ 64} 65const struct nv30_format_info 66nv30_format_info_table[PIPE_FORMAT_COUNT] = { 67 _(L8_UNORM , S___), 68 _(L8_SNORM , S___), 69 _(L8_SRGB , S___), 70 _(I8_UNORM , S___), 71 _(I8_SNORM , S___), 72 _(A8_UNORM , S___), 73 _(A8_SNORM , S___), 74 _(R8_UNORM , S_V_), 75 _(R8_SNORM , S___), 76 _(B5G5R5X1_UNORM , SB__), 77 _(B5G5R5A1_UNORM , S___), 78 _(B4G4R4X4_UNORM , S___), 79 _(B4G4R4A4_UNORM , S___), 80 _(B5G6R5_UNORM , SB__), 81 _(B8G8R8X8_UNORM , SB__), 82 _(B8G8R8X8_SRGB , S___), 83 _(B8G8R8A8_UNORM , SB__), 84 _(B8G8R8A8_SRGB , S___), 85 _(R8G8B8A8_UNORM , __V_), 86 _(R8G8B8A8_SNORM , S___), 87 _(DXT1_RGB , S___), 88 _(DXT1_SRGB , S___), 89 _(DXT1_RGBA , S___), 90 _(DXT1_SRGBA , S___), 91 _(DXT3_RGBA , S___), 92 _(DXT3_SRGBA , S___), 93 _(DXT5_RGBA , S___), 94 _(DXT5_SRGBA , S___), 95 _(L8A8_UNORM , S___), 96 _(L8A8_SRGB , S___), 97 _(R8G8_UNORM , S_V_), 98 _(R8G8_SNORM , S___), 99 _(R8G8B8_UNORM , __V_), 100 _(Z16_UNORM , SZ__), 101 _(X8Z24_UNORM , SZ__), 102 _(S8_UINT_Z24_UNORM , SZ__), 103 _(L16_UNORM , S___), 104 _(L16_SNORM , S___), 105 _(I16_UNORM , S___), 106 _(I16_SNORM , S___), 107 _(A16_UNORM , S___), 108 _(A16_SNORM , S___), 109 _(R16_UNORM , S___), 110 _(R16_SNORM , S_V_), 111 _(R16G16_SNORM , __V_), 112 _(R16G16B16_SNORM , __V_), 113 _(R16G16B16A16_SNORM , __V_), 114 _(R8_USCALED , __V_), 115 _(R8G8_USCALED , __V_), 116 _(R8G8B8_USCALED , __V_), 117 _(R8G8B8A8_USCALED , __V_), 118 _(R16_FLOAT , __V_), 119 _(R16G16_FLOAT , __V_), //S_V_), 120 _(R16G16B16_FLOAT , __V_), 121 _(R16G16B16A16_FLOAT , __V_), //SBV_), 122 _(R16_SSCALED , __V_), 123 _(R16G16_SSCALED , __V_), 124 _(R16G16B16_SSCALED , __V_), 125 _(R16G16B16A16_SSCALED, __V_), 126 _(R32_FLOAT , __V_), //SRV_), 127 _(R32G32_FLOAT , __V_), 128 _(R32G32B32_FLOAT , __V_), 129 _(R32G32B32A32_FLOAT , __V_), //SRV_), 130}; 131#undef _ 132#undef ____ 133 134#define R_(a,b) [PIPE_FORMAT_##a] = { \ 135 .hw = NV30_3D_RT_FORMAT_COLOR_##b, \ 136} 137#define Z_(a,b) [PIPE_FORMAT_##a] = { \ 138 .hw = NV30_3D_RT_FORMAT_ZETA_##b, \ 139} 140const struct nv30_format 141nv30_format_table[PIPE_FORMAT_COUNT] = { 142 R_(B5G5R5X1_UNORM , X1R5G5B5 ), 143 R_(B5G6R5_UNORM , R5G6B5 ), 144 R_(B8G8R8X8_UNORM , X8R8G8B8 ), 145 R_(B8G8R8A8_UNORM , A8R8G8B8 ), 146 Z_(Z16_UNORM , Z16 ), 147 Z_(X8Z24_UNORM , Z24S8 ), 148 Z_(S8_UINT_Z24_UNORM , Z24S8 ), 149 R_(R16G16B16A16_FLOAT, A16B16G16R16_FLOAT), 150 R_(R32G32B32A32_FLOAT, A32B32G32R32_FLOAT), 151 R_(R32_FLOAT , R32_FLOAT ), 152}; 153 154#define _(a,b,c) [PIPE_FORMAT_##a] = { \ 155 .hw = NV30_3D_VTXFMT_TYPE_##b | ((c) << NV30_3D_VTXFMT_SIZE__SHIFT) \ 156} 157const struct nv30_vtxfmt 158nv30_vtxfmt_table[PIPE_FORMAT_COUNT] = { 159 _(R8_UNORM , U8_UNORM , 1), 160 _(R8G8_UNORM , U8_UNORM , 2), 161 _(R8G8B8_UNORM , U8_UNORM , 3), 162 _(R8G8B8A8_UNORM , U8_UNORM , 4), 163 _(R8_USCALED , U8_USCALED , 1), 164 _(R8G8_USCALED , U8_USCALED , 2), 165 _(R8G8B8_USCALED , U8_USCALED , 3), 166 _(R8G8B8A8_USCALED , U8_USCALED , 4), 167 _(R16_SNORM , V16_SNORM , 1), 168 _(R16G16_SNORM , V16_SNORM , 2), 169 _(R16G16B16_SNORM , V16_SNORM , 3), 170 _(R16G16B16A16_SNORM , V16_SNORM , 4), 171 _(R16_SSCALED , V16_SSCALED, 1), 172 _(R16G16_SSCALED , V16_SSCALED, 2), 173 _(R16G16B16_SSCALED , V16_SSCALED, 3), 174 _(R16G16B16A16_SSCALED, V16_SSCALED, 4), 175 _(R16_FLOAT , V16_FLOAT , 1), 176 _(R16G16_FLOAT , V16_FLOAT , 2), 177 _(R16G16B16_FLOAT , V16_FLOAT , 3), 178 _(R16G16B16A16_FLOAT , V16_FLOAT , 4), 179 _(R32_FLOAT , V32_FLOAT , 1), 180 _(R32G32_FLOAT , V32_FLOAT , 2), 181 _(R32G32B32_FLOAT , V32_FLOAT , 3), 182 _(R32G32B32A32_FLOAT , V32_FLOAT , 4), 183}; 184#undef _ 185 186#define SWZ_OUT_0 0 187#define SWZ_OUT_1 1 188#define SWZ_OUT_C 2 189 190#define SWZ_SRC_0 3 191#define SWZ_SRC_1 2 192#define SWZ_SRC_2 1 193#define SWZ_SRC_3 0 194#define SWZ_SRC_x 0 195 196#define NONE 0x00000000 197#define SRGB 0x00700000 198 199#define ____ 0x00000000 200#define SSSS 0xf0000000 201 202#define _(a,b,c,d,e,f,g,h,i,j,k,l,m) [PIPE_FORMAT_##a] = { \ 203 .nv30 = NV30_3D_TEX_FORMAT_FORMAT_##b, \ 204 .nv30_rect = NV30_3D_TEX_FORMAT_FORMAT_##b##_RECT, \ 205 .nv40 = NV40_3D_TEX_FORMAT_FORMAT_##b, \ 206 .swz[0] = { SWZ_OUT_##d, SWZ_SRC_##h }, \ 207 .swz[1] = { SWZ_OUT_##e, SWZ_SRC_##i }, \ 208 .swz[2] = { SWZ_OUT_##f, SWZ_SRC_##j }, \ 209 .swz[3] = { SWZ_OUT_##g, SWZ_SRC_##k }, \ 210 .swz[4] = { SWZ_OUT_0, SWZ_SRC_x }, \ 211 .swz[5] = { SWZ_OUT_1, SWZ_SRC_x }, \ 212 .swizzle = (c) * 0x00010000, \ 213 .wrap = (l), \ 214 .filter = (m), \ 215} 216const struct nv30_texfmt 217nv30_texfmt_table[PIPE_FORMAT_COUNT] = { 218 _(L8_UNORM , L8 , 0, C, C, C, 1, 0, 0, 0, x, NONE, ____), 219 _(L8_SNORM , L8 , 0, C, C, C, 1, 0, 0, 0, x, NONE, SSSS), 220 _(L8_SRGB , L8 , 0, C, C, C, 1, 0, 0, 0, x, SRGB, ____), 221 _(I8_UNORM , L8 , 0, C, C, C, C, 0, 0, 0, 0, NONE, ____), 222 _(I8_SNORM , L8 , 0, C, C, C, C, 0, 0, 0, 0, NONE, SSSS), 223 _(A8_UNORM , L8 , 0, 0, 0, 0, C, x, x, x, 0, NONE, ____), 224 _(A8_SNORM , L8 , 0, 0, 0, 0, C, x, x, x, 0, NONE, SSSS), 225 _(R8_UNORM , L8 , 0, C, 0, 0, 1, 0, x, x, x, NONE, ____), 226 _(R8_SNORM , L8 , 0, C, 0, 0, 1, 0, x, x, x, NONE, SSSS), 227 _(B5G5R5X1_UNORM , A1R5G5B5, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____), 228 _(B5G5R5A1_UNORM , A1R5G5B5, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 229 _(B4G4R4X4_UNORM , A4R4G4B4, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____), 230 _(B4G4R4A4_UNORM , A4R4G4B4, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 231 _(B5G6R5_UNORM , R5G6B5 , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____), 232 _(B8G8R8X8_UNORM , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____), 233 _(B8G8R8X8_SRGB , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____), 234 _(B8G8R8A8_UNORM , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 235 _(B8G8R8A8_SRGB , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____), 236 _(R8G8B8A8_SNORM , A8R8G8B8, 0, C, C, C, C, 0, 1, 2, 3, NONE, SSSS), 237 _(DXT1_RGB , DXT1 , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____), 238 _(DXT1_SRGB , DXT1 , 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____), 239 _(DXT1_RGBA , DXT1 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 240 _(DXT1_SRGBA , DXT1 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____), 241 _(DXT3_RGBA , DXT3 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 242 _(DXT3_SRGBA , DXT3 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____), 243 _(DXT5_RGBA , DXT5 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 244 _(DXT5_SRGBA , DXT5 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____), 245 _(L8A8_UNORM , A8L8 , 0, C, C, C, C, 0, 0, 0, 3, NONE, ____), 246 _(L8A8_SRGB , A8L8 , 0, C, C, C, C, 0, 0, 0, 3, SRGB, ____), 247 _(R8G8_UNORM , A8L8 , 0, C, C, 0, 1, 0, 3, x, x, NONE, ____), 248 _(R8G8_SNORM , A8L8 , 0, C, C, 0, 1, 0, 3, x, x, NONE, SSSS), 249 _(Z16_UNORM , Z16 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____), 250 _(X8Z24_UNORM , Z24 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____), 251 _(S8_UINT_Z24_UNORM , Z24 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____), 252 _(L16_UNORM , A16 , 0, C, C, C, 1, 1, 1, 1, 1, NONE, ____), 253 _(L16_SNORM , A16 , 0, C, C, C, 1, 1, 1, 1, 1, NONE, SSSS), 254 _(I16_UNORM , A16 , 0, C, C, C, C, 1, 1, 1, 1, NONE, ____), 255 _(I16_SNORM , A16 , 0, C, C, C, C, 1, 1, 1, 1, NONE, SSSS), 256 _(A16_UNORM , A16 , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, ____), 257 _(A16_SNORM , A16 , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, SSSS), 258 _(R16_UNORM , A16 , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, ____), 259 _(R16_SNORM , A16 , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, SSSS), 260 _(R16G16_FLOAT , RG16F , 0, C, C, 0, 1, 2, 1, 0, 3, NONE, ____), 261 _(R16G16B16A16_FLOAT, RGBA16F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 262 _(R32_FLOAT , R32F , 0, C, 0, 0, 1, 2, 1, 0, 3, NONE, ____), 263 _(R32G32B32A32_FLOAT, RGBA32F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____), 264}; 265#undef _ 266