1 /* 2 * Mesa 3-D graphics library 3 * 4 * Copyright (C) 2012-2013 LunarG, Inc. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included 14 * in all copies or substantial portions of the 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 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: 25 * Chia-I Wu <olv (at) lunarg.com> 26 */ 27 28 #include "genhw/genhw.h" 29 #include "ilo_state_surface.h" 30 31 static bool 32 surface_valid_sampler_format(const struct ilo_dev *dev, 33 enum ilo_state_surface_access access, 34 enum gen_surface_format format) 35 { 36 /* 37 * This table is based on: 38 * 39 * - the Sandy Bridge PRM, volume 4 part 1, page 88-97 40 * - the Ivy Bridge PRM, volume 4 part 1, page 84-87 41 */ 42 static const struct sampler_cap { 43 int sampling; 44 int filtering; 45 int shadow_map; 46 int chroma_key; 47 } caps[] = { 48 #define CAP(sampling, filtering, shadow_map, chroma_key) \ 49 { ILO_GEN(sampling), ILO_GEN(filtering), ILO_GEN(shadow_map), ILO_GEN(chroma_key) } 50 [GEN6_FORMAT_R32G32B32A32_FLOAT] = CAP( 1, 5, 0, 0), 51 [GEN6_FORMAT_R32G32B32A32_SINT] = CAP( 1, 0, 0, 0), 52 [GEN6_FORMAT_R32G32B32A32_UINT] = CAP( 1, 0, 0, 0), 53 [GEN6_FORMAT_R32G32B32X32_FLOAT] = CAP( 1, 5, 0, 0), 54 [GEN6_FORMAT_R32G32B32_FLOAT] = CAP( 1, 5, 0, 0), 55 [GEN6_FORMAT_R32G32B32_SINT] = CAP( 1, 0, 0, 0), 56 [GEN6_FORMAT_R32G32B32_UINT] = CAP( 1, 0, 0, 0), 57 [GEN6_FORMAT_R16G16B16A16_UNORM] = CAP( 1, 1, 0, 0), 58 [GEN6_FORMAT_R16G16B16A16_SNORM] = CAP( 1, 1, 0, 0), 59 [GEN6_FORMAT_R16G16B16A16_SINT] = CAP( 1, 0, 0, 0), 60 [GEN6_FORMAT_R16G16B16A16_UINT] = CAP( 1, 0, 0, 0), 61 [GEN6_FORMAT_R16G16B16A16_FLOAT] = CAP( 1, 1, 0, 0), 62 [GEN6_FORMAT_R32G32_FLOAT] = CAP( 1, 5, 0, 0), 63 [GEN6_FORMAT_R32G32_SINT] = CAP( 1, 0, 0, 0), 64 [GEN6_FORMAT_R32G32_UINT] = CAP( 1, 0, 0, 0), 65 [GEN6_FORMAT_R32_FLOAT_X8X24_TYPELESS] = CAP( 1, 5, 1, 0), 66 [GEN6_FORMAT_X32_TYPELESS_G8X24_UINT] = CAP( 1, 0, 0, 0), 67 [GEN6_FORMAT_L32A32_FLOAT] = CAP( 1, 5, 0, 0), 68 [GEN6_FORMAT_R16G16B16X16_UNORM] = CAP( 1, 1, 0, 0), 69 [GEN6_FORMAT_R16G16B16X16_FLOAT] = CAP( 1, 1, 0, 0), 70 [GEN6_FORMAT_A32X32_FLOAT] = CAP( 1, 5, 0, 0), 71 [GEN6_FORMAT_L32X32_FLOAT] = CAP( 1, 5, 0, 0), 72 [GEN6_FORMAT_I32X32_FLOAT] = CAP( 1, 5, 0, 0), 73 [GEN6_FORMAT_B8G8R8A8_UNORM] = CAP( 1, 1, 0, 1), 74 [GEN6_FORMAT_B8G8R8A8_UNORM_SRGB] = CAP( 1, 1, 0, 0), 75 [GEN6_FORMAT_R10G10B10A2_UNORM] = CAP( 1, 1, 0, 0), 76 [GEN6_FORMAT_R10G10B10A2_UNORM_SRGB] = CAP( 1, 1, 0, 0), 77 [GEN6_FORMAT_R10G10B10A2_UINT] = CAP( 1, 0, 0, 0), 78 [GEN6_FORMAT_R10G10B10_SNORM_A2_UNORM] = CAP( 1, 1, 0, 0), 79 [GEN6_FORMAT_R8G8B8A8_UNORM] = CAP( 1, 1, 0, 0), 80 [GEN6_FORMAT_R8G8B8A8_UNORM_SRGB] = CAP( 1, 1, 0, 0), 81 [GEN6_FORMAT_R8G8B8A8_SNORM] = CAP( 1, 1, 0, 0), 82 [GEN6_FORMAT_R8G8B8A8_SINT] = CAP( 1, 0, 0, 0), 83 [GEN6_FORMAT_R8G8B8A8_UINT] = CAP( 1, 0, 0, 0), 84 [GEN6_FORMAT_R16G16_UNORM] = CAP( 1, 1, 0, 0), 85 [GEN6_FORMAT_R16G16_SNORM] = CAP( 1, 1, 0, 0), 86 [GEN6_FORMAT_R16G16_SINT] = CAP( 1, 0, 0, 0), 87 [GEN6_FORMAT_R16G16_UINT] = CAP( 1, 0, 0, 0), 88 [GEN6_FORMAT_R16G16_FLOAT] = CAP( 1, 1, 0, 0), 89 [GEN6_FORMAT_B10G10R10A2_UNORM] = CAP( 1, 1, 0, 0), 90 [GEN6_FORMAT_B10G10R10A2_UNORM_SRGB] = CAP( 1, 1, 0, 0), 91 [GEN6_FORMAT_R11G11B10_FLOAT] = CAP( 1, 1, 0, 0), 92 [GEN6_FORMAT_R32_SINT] = CAP( 1, 0, 0, 0), 93 [GEN6_FORMAT_R32_UINT] = CAP( 1, 0, 0, 0), 94 [GEN6_FORMAT_R32_FLOAT] = CAP( 1, 5, 1, 0), 95 [GEN6_FORMAT_R24_UNORM_X8_TYPELESS] = CAP( 1, 5, 1, 0), 96 [GEN6_FORMAT_X24_TYPELESS_G8_UINT] = CAP( 1, 0, 0, 0), 97 [GEN6_FORMAT_L16A16_UNORM] = CAP( 1, 1, 0, 0), 98 [GEN6_FORMAT_I24X8_UNORM] = CAP( 1, 5, 1, 0), 99 [GEN6_FORMAT_L24X8_UNORM] = CAP( 1, 5, 1, 0), 100 [GEN6_FORMAT_A24X8_UNORM] = CAP( 1, 5, 1, 0), 101 [GEN6_FORMAT_I32_FLOAT] = CAP( 1, 5, 1, 0), 102 [GEN6_FORMAT_L32_FLOAT] = CAP( 1, 5, 1, 0), 103 [GEN6_FORMAT_A32_FLOAT] = CAP( 1, 5, 1, 0), 104 [GEN6_FORMAT_B8G8R8X8_UNORM] = CAP( 1, 1, 0, 1), 105 [GEN6_FORMAT_B8G8R8X8_UNORM_SRGB] = CAP( 1, 1, 0, 0), 106 [GEN6_FORMAT_R8G8B8X8_UNORM] = CAP( 1, 1, 0, 0), 107 [GEN6_FORMAT_R8G8B8X8_UNORM_SRGB] = CAP( 1, 1, 0, 0), 108 [GEN6_FORMAT_R9G9B9E5_SHAREDEXP] = CAP( 1, 1, 0, 0), 109 [GEN6_FORMAT_B10G10R10X2_UNORM] = CAP( 1, 1, 0, 0), 110 [GEN6_FORMAT_L16A16_FLOAT] = CAP( 1, 1, 0, 0), 111 [GEN6_FORMAT_B5G6R5_UNORM] = CAP( 1, 1, 0, 1), 112 [GEN6_FORMAT_B5G6R5_UNORM_SRGB] = CAP( 1, 1, 0, 0), 113 [GEN6_FORMAT_B5G5R5A1_UNORM] = CAP( 1, 1, 0, 1), 114 [GEN6_FORMAT_B5G5R5A1_UNORM_SRGB] = CAP( 1, 1, 0, 0), 115 [GEN6_FORMAT_B4G4R4A4_UNORM] = CAP( 1, 1, 0, 1), 116 [GEN6_FORMAT_B4G4R4A4_UNORM_SRGB] = CAP( 1, 1, 0, 0), 117 [GEN6_FORMAT_R8G8_UNORM] = CAP( 1, 1, 0, 0), 118 [GEN6_FORMAT_R8G8_SNORM] = CAP( 1, 1, 0, 1), 119 [GEN6_FORMAT_R8G8_SINT] = CAP( 1, 0, 0, 0), 120 [GEN6_FORMAT_R8G8_UINT] = CAP( 1, 0, 0, 0), 121 [GEN6_FORMAT_R16_UNORM] = CAP( 1, 1, 1, 0), 122 [GEN6_FORMAT_R16_SNORM] = CAP( 1, 1, 0, 0), 123 [GEN6_FORMAT_R16_SINT] = CAP( 1, 0, 0, 0), 124 [GEN6_FORMAT_R16_UINT] = CAP( 1, 0, 0, 0), 125 [GEN6_FORMAT_R16_FLOAT] = CAP( 1, 1, 0, 0), 126 [GEN6_FORMAT_A8P8_UNORM_PALETTE0] = CAP( 5, 5, 0, 0), 127 [GEN6_FORMAT_A8P8_UNORM_PALETTE1] = CAP( 5, 5, 0, 0), 128 [GEN6_FORMAT_I16_UNORM] = CAP( 1, 1, 1, 0), 129 [GEN6_FORMAT_L16_UNORM] = CAP( 1, 1, 1, 0), 130 [GEN6_FORMAT_A16_UNORM] = CAP( 1, 1, 1, 0), 131 [GEN6_FORMAT_L8A8_UNORM] = CAP( 1, 1, 0, 1), 132 [GEN6_FORMAT_I16_FLOAT] = CAP( 1, 1, 1, 0), 133 [GEN6_FORMAT_L16_FLOAT] = CAP( 1, 1, 1, 0), 134 [GEN6_FORMAT_A16_FLOAT] = CAP( 1, 1, 1, 0), 135 [GEN6_FORMAT_L8A8_UNORM_SRGB] = CAP(4.5, 4.5, 0, 0), 136 [GEN6_FORMAT_R5G5_SNORM_B6_UNORM] = CAP( 1, 1, 0, 1), 137 [GEN6_FORMAT_P8A8_UNORM_PALETTE0] = CAP( 5, 5, 0, 0), 138 [GEN6_FORMAT_P8A8_UNORM_PALETTE1] = CAP( 5, 5, 0, 0), 139 [GEN6_FORMAT_R8_UNORM] = CAP( 1, 1, 0, 4.5), 140 [GEN6_FORMAT_R8_SNORM] = CAP( 1, 1, 0, 0), 141 [GEN6_FORMAT_R8_SINT] = CAP( 1, 0, 0, 0), 142 [GEN6_FORMAT_R8_UINT] = CAP( 1, 0, 0, 0), 143 [GEN6_FORMAT_A8_UNORM] = CAP( 1, 1, 0, 1), 144 [GEN6_FORMAT_I8_UNORM] = CAP( 1, 1, 0, 0), 145 [GEN6_FORMAT_L8_UNORM] = CAP( 1, 1, 0, 1), 146 [GEN6_FORMAT_P4A4_UNORM_PALETTE0] = CAP( 1, 1, 0, 0), 147 [GEN6_FORMAT_A4P4_UNORM_PALETTE0] = CAP( 1, 1, 0, 0), 148 [GEN6_FORMAT_P8_UNORM_PALETTE0] = CAP(4.5, 4.5, 0, 0), 149 [GEN6_FORMAT_L8_UNORM_SRGB] = CAP(4.5, 4.5, 0, 0), 150 [GEN6_FORMAT_P8_UNORM_PALETTE1] = CAP(4.5, 4.5, 0, 0), 151 [GEN6_FORMAT_P4A4_UNORM_PALETTE1] = CAP(4.5, 4.5, 0, 0), 152 [GEN6_FORMAT_A4P4_UNORM_PALETTE1] = CAP(4.5, 4.5, 0, 0), 153 [GEN6_FORMAT_DXT1_RGB_SRGB] = CAP(4.5, 4.5, 0, 0), 154 [GEN6_FORMAT_R1_UNORM] = CAP( 1, 1, 0, 0), 155 [GEN6_FORMAT_YCRCB_NORMAL] = CAP( 1, 1, 0, 1), 156 [GEN6_FORMAT_YCRCB_SWAPUVY] = CAP( 1, 1, 0, 1), 157 [GEN6_FORMAT_P2_UNORM_PALETTE0] = CAP(4.5, 4.5, 0, 0), 158 [GEN6_FORMAT_P2_UNORM_PALETTE1] = CAP(4.5, 4.5, 0, 0), 159 [GEN6_FORMAT_BC1_UNORM] = CAP( 1, 1, 0, 1), 160 [GEN6_FORMAT_BC2_UNORM] = CAP( 1, 1, 0, 1), 161 [GEN6_FORMAT_BC3_UNORM] = CAP( 1, 1, 0, 1), 162 [GEN6_FORMAT_BC4_UNORM] = CAP( 1, 1, 0, 0), 163 [GEN6_FORMAT_BC5_UNORM] = CAP( 1, 1, 0, 0), 164 [GEN6_FORMAT_BC1_UNORM_SRGB] = CAP( 1, 1, 0, 0), 165 [GEN6_FORMAT_BC2_UNORM_SRGB] = CAP( 1, 1, 0, 0), 166 [GEN6_FORMAT_BC3_UNORM_SRGB] = CAP( 1, 1, 0, 0), 167 [GEN6_FORMAT_MONO8] = CAP( 1, 0, 0, 0), 168 [GEN6_FORMAT_YCRCB_SWAPUV] = CAP( 1, 1, 0, 0), 169 [GEN6_FORMAT_YCRCB_SWAPY] = CAP( 1, 1, 0, 0), 170 [GEN6_FORMAT_DXT1_RGB] = CAP( 1, 1, 0, 0), 171 [GEN6_FORMAT_FXT1] = CAP( 1, 1, 0, 0), 172 [GEN6_FORMAT_BC4_SNORM] = CAP( 1, 1, 0, 0), 173 [GEN6_FORMAT_BC5_SNORM] = CAP( 1, 1, 0, 0), 174 [GEN6_FORMAT_R16G16B16_FLOAT] = CAP( 5, 5, 0, 0), 175 [GEN6_FORMAT_BC6H_SF16] = CAP( 7, 7, 0, 0), 176 [GEN6_FORMAT_BC7_UNORM] = CAP( 7, 7, 0, 0), 177 [GEN6_FORMAT_BC7_UNORM_SRGB] = CAP( 7, 7, 0, 0), 178 [GEN6_FORMAT_BC6H_UF16] = CAP( 7, 7, 0, 0), 179 #undef CAP 180 }; 181 182 ILO_DEV_ASSERT(dev, 6, 8); 183 184 return (format < ARRAY_SIZE(caps) && caps[format].sampling && 185 ilo_dev_gen(dev) >= caps[format].sampling); 186 } 187 188 static bool 189 surface_valid_dp_format(const struct ilo_dev *dev, 190 enum ilo_state_surface_access access, 191 enum gen_surface_format format) 192 { 193 /* 194 * This table is based on: 195 * 196 * - the Sandy Bridge PRM, volume 4 part 1, page 88-97 197 * - the Ivy Bridge PRM, volume 4 part 1, page 172, 252-253, and 277-278 198 * - the Haswell PRM, volume 7, page 262-264 199 */ 200 static const struct dp_cap { 201 int rt_write; 202 int rt_write_blending; 203 int typed_write; 204 int media_color_processing; 205 } caps[] = { 206 #define CAP(rt_write, rt_write_blending, typed_write, media_color_processing) \ 207 { ILO_GEN(rt_write), ILO_GEN(rt_write_blending), ILO_GEN(typed_write), ILO_GEN(media_color_processing) } 208 [GEN6_FORMAT_R32G32B32A32_FLOAT] = CAP( 1, 1, 7, 0), 209 [GEN6_FORMAT_R32G32B32A32_SINT] = CAP( 1, 0, 7, 0), 210 [GEN6_FORMAT_R32G32B32A32_UINT] = CAP( 1, 0, 7, 0), 211 [GEN6_FORMAT_R16G16B16A16_UNORM] = CAP( 1, 4.5, 7, 6), 212 [GEN6_FORMAT_R16G16B16A16_SNORM] = CAP( 1, 6, 7, 0), 213 [GEN6_FORMAT_R16G16B16A16_SINT] = CAP( 1, 0, 7, 0), 214 [GEN6_FORMAT_R16G16B16A16_UINT] = CAP( 1, 0, 7, 0), 215 [GEN6_FORMAT_R16G16B16A16_FLOAT] = CAP( 1, 1, 7, 0), 216 [GEN6_FORMAT_R32G32_FLOAT] = CAP( 1, 1, 7, 0), 217 [GEN6_FORMAT_R32G32_SINT] = CAP( 1, 0, 7, 0), 218 [GEN6_FORMAT_R32G32_UINT] = CAP( 1, 0, 7, 0), 219 [GEN6_FORMAT_B8G8R8A8_UNORM] = CAP( 1, 1, 7, 6), 220 [GEN6_FORMAT_B8G8R8A8_UNORM_SRGB] = CAP( 1, 1, 0, 0), 221 [GEN6_FORMAT_R10G10B10A2_UNORM] = CAP( 1, 1, 7, 6), 222 [GEN6_FORMAT_R10G10B10A2_UNORM_SRGB] = CAP( 0, 0, 0, 6), 223 [GEN6_FORMAT_R10G10B10A2_UINT] = CAP( 1, 0, 7, 0), 224 [GEN6_FORMAT_R8G8B8A8_UNORM] = CAP( 1, 1, 7, 6), 225 [GEN6_FORMAT_R8G8B8A8_UNORM_SRGB] = CAP( 1, 1, 0, 6), 226 [GEN6_FORMAT_R8G8B8A8_SNORM] = CAP( 1, 6, 7, 0), 227 [GEN6_FORMAT_R8G8B8A8_SINT] = CAP( 1, 0, 7, 0), 228 [GEN6_FORMAT_R8G8B8A8_UINT] = CAP( 1, 0, 7, 0), 229 [GEN6_FORMAT_R16G16_UNORM] = CAP( 1, 4.5, 7, 0), 230 [GEN6_FORMAT_R16G16_SNORM] = CAP( 1, 6, 7, 0), 231 [GEN6_FORMAT_R16G16_SINT] = CAP( 1, 0, 7, 0), 232 [GEN6_FORMAT_R16G16_UINT] = CAP( 1, 0, 7, 0), 233 [GEN6_FORMAT_R16G16_FLOAT] = CAP( 1, 1, 7, 0), 234 [GEN6_FORMAT_B10G10R10A2_UNORM] = CAP( 1, 1, 7, 6), 235 [GEN6_FORMAT_B10G10R10A2_UNORM_SRGB] = CAP( 1, 1, 0, 6), 236 [GEN6_FORMAT_R11G11B10_FLOAT] = CAP( 1, 1, 7, 0), 237 [GEN6_FORMAT_R32_SINT] = CAP( 1, 0, 7, 0), 238 [GEN6_FORMAT_R32_UINT] = CAP( 1, 0, 7, 0), 239 [GEN6_FORMAT_R32_FLOAT] = CAP( 1, 1, 7, 0), 240 [GEN6_FORMAT_B8G8R8X8_UNORM] = CAP( 0, 0, 0, 6), 241 [GEN6_FORMAT_B5G6R5_UNORM] = CAP( 1, 1, 7, 0), 242 [GEN6_FORMAT_B5G6R5_UNORM_SRGB] = CAP( 1, 1, 0, 0), 243 [GEN6_FORMAT_B5G5R5A1_UNORM] = CAP( 1, 1, 7, 0), 244 [GEN6_FORMAT_B5G5R5A1_UNORM_SRGB] = CAP( 1, 1, 0, 0), 245 [GEN6_FORMAT_B4G4R4A4_UNORM] = CAP( 1, 1, 7, 0), 246 [GEN6_FORMAT_B4G4R4A4_UNORM_SRGB] = CAP( 1, 1, 0, 0), 247 [GEN6_FORMAT_R8G8_UNORM] = CAP( 1, 1, 7, 0), 248 [GEN6_FORMAT_R8G8_SNORM] = CAP( 1, 6, 7, 0), 249 [GEN6_FORMAT_R8G8_SINT] = CAP( 1, 0, 7, 0), 250 [GEN6_FORMAT_R8G8_UINT] = CAP( 1, 0, 7, 0), 251 [GEN6_FORMAT_R16_UNORM] = CAP( 1, 4.5, 7, 7), 252 [GEN6_FORMAT_R16_SNORM] = CAP( 1, 6, 7, 0), 253 [GEN6_FORMAT_R16_SINT] = CAP( 1, 0, 7, 0), 254 [GEN6_FORMAT_R16_UINT] = CAP( 1, 0, 7, 0), 255 [GEN6_FORMAT_R16_FLOAT] = CAP( 1, 1, 7, 0), 256 [GEN6_FORMAT_B5G5R5X1_UNORM] = CAP( 1, 1, 7, 0), 257 [GEN6_FORMAT_B5G5R5X1_UNORM_SRGB] = CAP( 1, 1, 0, 0), 258 [GEN6_FORMAT_R8_UNORM] = CAP( 1, 1, 7, 0), 259 [GEN6_FORMAT_R8_SNORM] = CAP( 1, 6, 7, 0), 260 [GEN6_FORMAT_R8_SINT] = CAP( 1, 0, 7, 0), 261 [GEN6_FORMAT_R8_UINT] = CAP( 1, 0, 7, 0), 262 [GEN6_FORMAT_A8_UNORM] = CAP( 1, 1, 7, 0), 263 [GEN6_FORMAT_YCRCB_NORMAL] = CAP( 1, 0, 0, 6), 264 [GEN6_FORMAT_YCRCB_SWAPUVY] = CAP( 1, 0, 0, 6), 265 [GEN6_FORMAT_YCRCB_SWAPUV] = CAP( 1, 0, 0, 6), 266 [GEN6_FORMAT_YCRCB_SWAPY] = CAP( 1, 0, 0, 6), 267 #undef CAP 268 }; 269 270 ILO_DEV_ASSERT(dev, 6, 8); 271 272 if (format >= ARRAY_SIZE(caps)) 273 return false; 274 275 switch (access) { 276 case ILO_STATE_SURFACE_ACCESS_DP_RENDER: 277 return (caps[format].rt_write && 278 ilo_dev_gen(dev) >= caps[format].rt_write); 279 case ILO_STATE_SURFACE_ACCESS_DP_TYPED: 280 return (caps[format].typed_write && 281 ilo_dev_gen(dev) >= caps[format].typed_write); 282 case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED: 283 return (format == GEN6_FORMAT_RAW); 284 case ILO_STATE_SURFACE_ACCESS_DP_DATA: 285 /* ignored, but can it be raw? */ 286 assert(format != GEN6_FORMAT_RAW); 287 return true; 288 default: 289 return false; 290 } 291 } 292 293 static bool 294 surface_valid_svb_format(const struct ilo_dev *dev, 295 enum gen_surface_format format) 296 { 297 ILO_DEV_ASSERT(dev, 6, 8); 298 299 /* 300 * This table is based on: 301 * 302 * - the Sandy Bridge PRM, volume 4 part 1, page 88-97 303 * - the Ivy Bridge PRM, volume 2 part 1, page 195 304 * - the Haswell PRM, volume 7, page 535 305 */ 306 switch (format) { 307 case GEN6_FORMAT_R32G32B32A32_FLOAT: 308 case GEN6_FORMAT_R32G32B32A32_SINT: 309 case GEN6_FORMAT_R32G32B32A32_UINT: 310 case GEN6_FORMAT_R32G32B32_FLOAT: 311 case GEN6_FORMAT_R32G32B32_SINT: 312 case GEN6_FORMAT_R32G32B32_UINT: 313 case GEN6_FORMAT_R32G32_FLOAT: 314 case GEN6_FORMAT_R32G32_SINT: 315 case GEN6_FORMAT_R32G32_UINT: 316 case GEN6_FORMAT_R32_SINT: 317 case GEN6_FORMAT_R32_UINT: 318 case GEN6_FORMAT_R32_FLOAT: 319 return true; 320 default: 321 return false; 322 } 323 } 324 325 bool 326 ilo_state_surface_valid_format(const struct ilo_dev *dev, 327 enum ilo_state_surface_access access, 328 enum gen_surface_format format) 329 { 330 bool valid; 331 332 switch (access) { 333 case ILO_STATE_SURFACE_ACCESS_SAMPLER: 334 valid = surface_valid_sampler_format(dev, access, format); 335 break; 336 case ILO_STATE_SURFACE_ACCESS_DP_RENDER: 337 case ILO_STATE_SURFACE_ACCESS_DP_TYPED: 338 case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED: 339 case ILO_STATE_SURFACE_ACCESS_DP_DATA: 340 valid = surface_valid_dp_format(dev, access, format); 341 break; 342 case ILO_STATE_SURFACE_ACCESS_DP_SVB: 343 valid = surface_valid_svb_format(dev, format); 344 break; 345 default: 346 valid = false; 347 break; 348 } 349 350 return valid; 351 } 352