summaryrefslogtreecommitdiff
path: root/src/intel/isl/isl_format.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/intel/isl/isl_format.c')
-rw-r--r--src/intel/isl/isl_format.c867
1 files changed, 479 insertions, 388 deletions
diff --git a/src/intel/isl/isl_format.c b/src/intel/isl/isl_format.c
index 6b848c2c53c..59f6c551e3b 100644
--- a/src/intel/isl/isl_format.c
+++ b/src/intel/isl/isl_format.c
@@ -25,40 +25,44 @@
#include "isl.h"
#include "isl_priv.h"
-#include "dev/gen_device_info.h"
+#include "dev/intel_device_info.h"
-#include "main/macros.h" /* Needed for MAX3 and MAX2 for format_rgb9e5 */
-#include "util/format_srgb.h"
-#include "util/format_rgb9e5.h"
-#include "util/format_r11g11b10f.h"
+#include "util/macros.h" /* Needed for MAX3 and MAX2 for format_rgb9e5 */
-/* Header-only format conversion include */
-#include "main/format_utils.h"
+#include "util/format/format_utils.h"
+#include "util/format_r11g11b10f.h"
+#include "util/format_rgb9e5.h"
+#include "util/format_srgb.h"
+#include "util/half_float.h"
+#include "util/rounding.h"
+#include "util/u_math.h"
struct surface_format_info {
bool exists;
- uint8_t sampling;
- uint8_t filtering;
- uint8_t shadow_compare;
- uint8_t chroma_key;
- uint8_t render_target;
- uint8_t alpha_blend;
- uint8_t input_vb;
- uint8_t streamed_output_vb;
- uint8_t color_processing;
- uint8_t typed_write;
- uint8_t typed_read;
- uint8_t ccs_e;
+ /* These fields must fit the largest verx10 value. */
+ uint16_t sampling;
+ uint16_t filtering;
+ uint16_t shadow_compare;
+ uint16_t chroma_key;
+ uint16_t render_target;
+ uint16_t alpha_blend;
+ uint16_t input_vb;
+ uint16_t streamed_output_vb;
+ uint16_t color_processing;
+ uint16_t typed_write;
+ uint16_t typed_read;
+ uint16_t typed_atomics;
+ uint16_t ccs_e;
};
/* This macro allows us to write the table almost as it appears in the PRM,
* while restructuring it to turn it into the C code we want.
*/
-#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, tw, tr, ccs_e, sf) \
- [ISL_FORMAT_##sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color, tw, tr, ccs_e},
+#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, tw, tr, ccs_e, ta, sf) \
+ [ISL_FORMAT_##sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color, tw, tr, ta, ccs_e},
#define Y 0
-#define x 255
+#define x 0xFFFF
/**
* This is the table of support for surface (texture, renderbuffer, and vertex
* buffer, but not depthbuffer) formats across the various hardware generations.
@@ -69,9 +73,9 @@ struct surface_format_info {
*
* Y*: 45
* Y+: 45 (g45/gm45)
- * Y~: 50 (gen5)
- * Y^: 60 (gen6)
- * Y#: 70 (gen7)
+ * Y~: 50 (gfx5)
+ * Y^: 60 (gfx6)
+ * Y#: 70 (gfx7)
*
* The abbreviations in the header below are:
* smpl - Sampling Engine
@@ -83,8 +87,11 @@ struct surface_format_info {
* VB - Input Vertex Buffer
* SO - Steamed Output Vertex Buffers (transform feedback)
* color - Color Processing
- * ccs_e - Lossless Compression Support (gen9+ only)
+ * TW - Typed Write
+ * TR - Typed Read
+ * ccs_e - Lossless Compression Support (gfx9+ only)
* sf - Surface Format
+ * TA - Typed Atomics
*
* See page 88 of the Sandybridge PRM VOL4_Part1 PDF.
*
@@ -97,278 +104,278 @@ struct surface_format_info {
* - Render Target Surface Types [SKL+]
*/
static const struct surface_format_info format_info[] = {
-/* smpl filt shad CK RT AB VB SO color TW TR ccs_e */
- SF( Y, 50, x, x, Y, Y, Y, Y, x, 70, 90, 90, R32G32B32A32_FLOAT)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, R32G32B32A32_SINT)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, R32G32B32A32_UINT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32A32_UNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32A32_SNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R64G64_FLOAT)
- SF( Y, 50, x, x, 100, 100, x, x, x, x, x, 100, R32G32B32X32_FLOAT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32A32_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32A32_USCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R32G32B32A32_SFIXED)
- SF( x, x, x, x, x, x, 80, x, x, x, x, x, R64G64_PASSTHRU)
- SF( Y, 50, x, x, x, x, Y, Y, x, x, x, x, R32G32B32_FLOAT)
- SF( Y, x, x, x, x, x, Y, Y, x, x, x, x, R32G32B32_SINT)
- SF( Y, x, x, x, x, x, Y, Y, x, x, x, x, R32G32B32_UINT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32_UNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32_SNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32B32_USCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R32G32B32_SFIXED)
- SF( Y, Y, x, x, Y, 45, Y, x, 60, 70, 110, 90, R16G16B16A16_UNORM)
- SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, R16G16B16A16_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, R16G16B16A16_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, R16G16B16A16_UINT)
- SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 90, R16G16B16A16_FLOAT)
- SF( Y, 50, x, x, Y, Y, Y, Y, x, 70, 90, 90, R32G32_FLOAT)
- SF( Y, 70, x, x, Y, Y, Y, Y, x, x, x, x, R32G32_FLOAT_LD)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, R32G32_SINT)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, R32G32_UINT)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, R32_FLOAT_X8X24_TYPELESS)
- SF( Y, x, x, x, x, x, x, x, x, x, x, x, X32_TYPELESS_G8X24_UINT)
- SF( Y, 50, x, x, x, x, x, x, x, x, x, x, L32A32_FLOAT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32_UNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32_SNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R64_FLOAT)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, R16G16B16X16_UNORM)
- SF( Y, Y, x, x, 90, 90, x, x, x, x, x, 90, R16G16B16X16_FLOAT)
- SF( Y, 50, x, x, x, x, x, x, x, x, x, x, A32X32_FLOAT)
- SF( Y, 50, x, x, x, x, x, x, x, x, x, x, L32X32_FLOAT)
- SF( Y, 50, x, x, x, x, x, x, x, x, x, x, I32X32_FLOAT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16B16A16_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16B16A16_USCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32G32_USCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R32G32_SFIXED)
- SF( x, x, x, x, x, x, 80, x, x, x, x, x, R64_PASSTHRU)
- SF( Y, Y, x, Y, Y, Y, Y, x, 60, 70, x, 90, B8G8R8A8_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 100, B8G8R8A8_UNORM_SRGB)
-/* smpl filt shad CK RT AB VB SO color TW TR ccs_e */
- SF( Y, Y, x, x, Y, Y, Y, x, 60, 70, x, 100, R10G10B10A2_UNORM)
- SF( Y, Y, x, x, x, x, x, x, 60, x, x, 120, R10G10B10A2_UNORM_SRGB)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, x, 100, R10G10B10A2_UINT)
- SF( Y, Y, x, x, x, x, Y, x, x, x, x, x, R10G10B10_SNORM_A2_UNORM)
- SF( Y, Y, x, x, Y, Y, Y, x, 60, 70, 110, 90, R8G8B8A8_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, 60, x, x, 100, R8G8B8A8_UNORM_SRGB)
- SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, R8G8B8A8_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, R8G8B8A8_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, R8G8B8A8_UINT)
- SF( Y, Y, x, x, Y, 45, Y, x, x, 70, 110, 90, R16G16_UNORM)
- SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, R16G16_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, R16G16_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, R16G16_UINT)
- SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 90, R16G16_FLOAT)
- SF( Y, Y, x, x, Y, Y, 75, x, 60, 70, x, 100, B10G10R10A2_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, 60, x, x, 100, B10G10R10A2_UNORM_SRGB)
- SF( Y, Y, x, x, Y, Y, Y, x, x, 70, x, 100, R11G11B10_FLOAT)
- SF(120, 120, x, x, 120, 120, x, x, x, x, x, 120, R10G10B10_FLOAT_A2_UNORM)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 70, 90, R32_SINT)
- SF( Y, x, x, x, Y, x, Y, Y, x, 70, 70, 90, R32_UINT)
- SF( Y, 50, Y, x, Y, Y, Y, Y, x, 70, 70, 90, R32_FLOAT)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, 120, R24_UNORM_X8_TYPELESS)
- SF( Y, x, x, x, x, x, x, x, x, x, x, x, X24_TYPELESS_G8_UINT)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, L16A16_UNORM)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, I24X8_UNORM)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, L24X8_UNORM)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, A24X8_UNORM)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, I32_FLOAT)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, L32_FLOAT)
- SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, A32_FLOAT)
- SF( Y, Y, x, Y, 80, 80, x, x, 60, x, x, 90, B8G8R8X8_UNORM)
- SF( Y, Y, x, x, 80, 80, x, x, x, x, x, 100, B8G8R8X8_UNORM_SRGB)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM_SRGB)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, R9G9B9E5_SHAREDEXP)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, B10G10R10X2_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, L16A16_FLOAT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32_UNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32_SNORM)
-/* smpl filt shad CK RT AB VB SO color TW TR ccs_e */
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R10G10B10X2_USCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8B8A8_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8B8A8_USCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16_USCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R32_USCALED)
- SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, B5G6R5_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, B5G6R5_UNORM_SRGB)
- SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, B5G5R5A1_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, B5G5R5A1_UNORM_SRGB)
- SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, B4G4R4A4_UNORM)
- SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, B4G4R4A4_UNORM_SRGB)
- SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 110, 120, R8G8_UNORM)
- SF( Y, Y, x, Y, Y, 60, Y, x, x, 70, 110, 120, R8G8_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, R8G8_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, R8G8_UINT)
- SF( Y, Y, Y, x, Y, 45, Y, x, 70, 70, 110, 120, R16_UNORM)
- SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 120, R16_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, R16_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, R16_UINT)
- SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 120, R16_FLOAT)
- SF( 50, 50, x, x, x, x, x, x, x, x, x, x, A8P8_UNORM_PALETTE0)
- SF( 50, 50, x, x, x, x, x, x, x, x, x, x, A8P8_UNORM_PALETTE1)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, I16_UNORM)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, L16_UNORM)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, A16_UNORM)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, L8A8_UNORM)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, I16_FLOAT)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, L16_FLOAT)
- SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, A16_FLOAT)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, L8A8_UNORM_SRGB)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, R5G5_SNORM_B6_UNORM)
- SF( x, x, x, x, Y, Y, x, x, x, 70, x, 120, B5G5R5X1_UNORM)
- SF( x, x, x, x, Y, Y, x, x, x, x, x, 120, B5G5R5X1_UNORM_SRGB)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8_USCALED)
-/* smpl filt shad CK RT AB VB SO color TW TR ccs_e */
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16_USCALED)
- SF( 50, 50, x, x, x, x, x, x, x, x, x, x, P8A8_UNORM_PALETTE0)
- SF( 50, 50, x, x, x, x, x, x, x, x, x, x, P8A8_UNORM_PALETTE1)
- SF(120, 120, x, x, 120, 120, x, x, x, x, x, 120, A1B5G5R5_UNORM)
+/* smpl filt shad CK RT AB VB SO color TW TR ccs_e TA */
+ SF( Y, 50, x, x, Y, Y, Y, Y, x, 70, 90, 90, x, R32G32B32A32_FLOAT)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, x, R32G32B32A32_SINT)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, x, R32G32B32A32_UINT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32A32_UNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32A32_SNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R64G64_FLOAT)
+ SF( Y, 50, x, x, 110, 110, x, x, x, x, x, 110, x, R32G32B32X32_FLOAT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32A32_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32A32_USCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R32G32B32A32_SFIXED)
+ SF( x, x, x, x, x, x, 80, x, x, x, x, x, x, R64G64_PASSTHRU)
+ SF( Y, 50, x, x, x, x, Y, Y, x, x, x, x, x, R32G32B32_FLOAT)
+ SF( Y, x, x, x, x, x, Y, Y, x, x, x, x, x, R32G32B32_SINT)
+ SF( Y, x, x, x, x, x, Y, Y, x, x, x, x, x, R32G32B32_UINT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32_UNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32_SNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32B32_USCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R32G32B32_SFIXED)
+ SF( Y, Y, x, x, Y, 45, Y, x, 60, 70, 110, 90, x, R16G16B16A16_UNORM)
+ SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, x, R16G16B16A16_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, x, R16G16B16A16_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, x, R16G16B16A16_UINT)
+ SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 90, x, R16G16B16A16_FLOAT)
+ SF( Y, 50, x, x, Y, Y, Y, Y, x, 70, 90, 90, x, R32G32_FLOAT)
+ SF( Y, 70, x, x, Y, Y, Y, Y, x, x, x, x, x, R32G32_FLOAT_LD)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, x, R32G32_SINT)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 90, 90, x, R32G32_UINT)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, R32_FLOAT_X8X24_TYPELESS)
+ SF( Y, x, x, x, x, x, x, x, x, x, x, x, x, X32_TYPELESS_G8X24_UINT)
+ SF( Y, 50, x, x, x, x, x, x, x, x, x, x, x, L32A32_FLOAT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32_UNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32_SNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, 90, R64_FLOAT)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, R16G16B16X16_UNORM)
+ SF( Y, Y, x, x, 90, 90, x, x, x, x, x, 90, x, R16G16B16X16_FLOAT)
+ SF( Y, 50, x, x, x, x, x, x, x, x, x, x, x, A32X32_FLOAT)
+ SF( Y, 50, x, x, x, x, x, x, x, x, x, x, x, L32X32_FLOAT)
+ SF( Y, 50, x, x, x, x, x, x, x, x, x, x, x, I32X32_FLOAT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16A16_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16A16_USCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32G32_USCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R32G32_SFIXED)
+ SF( x, x, x, x, x, x, 80, x, x, x, x, x, 90, R64_PASSTHRU)
+ SF( Y, Y, x, Y, Y, Y, Y, x, 60, 70, 125, 90, x, B8G8R8A8_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 110, x, B8G8R8A8_UNORM_SRGB)
+/* smpl filt shad CK RT AB VB SO color TW TR ccs_e TA */
+ SF( Y, Y, x, x, Y, Y, Y, x, 60, 70, 125, 110, x, R10G10B10A2_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, 60, x, x, 120, x, R10G10B10A2_UNORM_SRGB)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 125, 110, x, R10G10B10A2_UINT)
+ SF( Y, Y, x, x, x, x, Y, x, x, x, x, x, x, R10G10B10_SNORM_A2_UNORM)
+ SF( Y, Y, x, x, Y, Y, Y, x, 60, 70, 110, 90, x, R8G8B8A8_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, 60, x, x, 110, x, R8G8B8A8_UNORM_SRGB)
+ SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, x, R8G8B8A8_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, x, R8G8B8A8_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, x, R8G8B8A8_UINT)
+ SF( Y, Y, x, x, Y, 45, Y, x, x, 70, 110, 90, x, R16G16_UNORM)
+ SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 90, x, R16G16_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 90, x, R16G16_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 90, x, R16G16_UINT)
+ SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 90, x, R16G16_FLOAT)
+ SF( Y, Y, x, x, Y, Y, 75, x, 60, 70, 125, 110, x, B10G10R10A2_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, 60, x, x, 110, x, B10G10R10A2_UNORM_SRGB)
+ SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 125, 110, x, R11G11B10_FLOAT)
+ SF(120, 120, x, x, 120, 120, x, x, x, 125, 125, 120, x, R10G10B10_FLOAT_A2_UNORM)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 70, 90, 70, R32_SINT)
+ SF( Y, x, x, x, Y, x, Y, Y, x, 70, 70, 90, 70, R32_UINT)
+ SF( Y, 50, Y, x, Y, Y, Y, Y, x, 70, 70, 90, 110, R32_FLOAT)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, 120, x, R24_UNORM_X8_TYPELESS)
+ SF( Y, x, x, x, x, x, x, x, x, x, x, x, x, X24_TYPELESS_G8_UINT)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, L16A16_UNORM)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, I24X8_UNORM)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, L24X8_UNORM)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, A24X8_UNORM)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, I32_FLOAT)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, L32_FLOAT)
+ SF( Y, 50, Y, x, x, x, x, x, x, x, x, x, x, A32_FLOAT)
+ SF( Y, Y, x, Y, 80, 80, x, x, 60, x, x, 90, x, B8G8R8X8_UNORM)
+ SF( Y, Y, x, x, 80, 80, x, x, x, x, x, 110, x, B8G8R8X8_UNORM_SRGB)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM_SRGB)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, R9G9B9E5_SHAREDEXP)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, B10G10R10X2_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, L16A16_FLOAT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32_UNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32_SNORM)
+/* smpl filt shad CK RT AB VB SO color TW TR ccs_e TA */
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R10G10B10X2_USCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8A8_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8A8_USCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16_USCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R32_USCALED)
+ SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, x, B5G6R5_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, x, B5G6R5_UNORM_SRGB)
+ SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, x, B5G5R5A1_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, x, B5G5R5A1_UNORM_SRGB)
+ SF( Y, Y, x, Y, Y, Y, x, x, x, 70, x, 120, x, B4G4R4A4_UNORM)
+ SF( Y, Y, x, x, Y, Y, x, x, x, x, x, 120, x, B4G4R4A4_UNORM_SRGB)
+ SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 110, 120, x, R8G8_UNORM)
+ SF( Y, Y, x, Y, Y, 60, Y, x, x, 70, 110, 120, x, R8G8_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, x, R8G8_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, x, R8G8_UINT)
+ SF( Y, Y, Y, x, Y, 45, Y, x, 70, 70, 110, 120, x, R16_UNORM)
+ SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 120, x, R16_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, 120, R16_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, 120, R16_UINT)
+ SF( Y, Y, x, x, Y, Y, Y, x, x, 70, 90, 120, 120, R16_FLOAT)
+ SF( 50, 50, x, x, x, x, x, x, x, x, x, x, x, A8P8_UNORM_PALETTE0)
+ SF( 50, 50, x, x, x, x, x, x, x, x, x, x, x, A8P8_UNORM_PALETTE1)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, I16_UNORM)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, L16_UNORM)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, A16_UNORM)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, L8A8_UNORM)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, I16_FLOAT)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, L16_FLOAT)
+ SF( Y, Y, Y, x, x, x, x, x, x, x, x, x, x, A16_FLOAT)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, L8A8_UNORM_SRGB)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, R5G5_SNORM_B6_UNORM)
+ SF( x, x, x, x, Y, Y, x, x, x, 70, x, 120, x, B5G5R5X1_UNORM)
+ SF( x, x, x, x, Y, Y, x, x, x, x, x, 120, x, B5G5R5X1_UNORM_SRGB)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8_USCALED)
+/* smpl filt shad CK RT AB VB SO color TW TR ccs_e TA */
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16_USCALED)
+ SF( 50, 50, x, x, x, x, x, x, x, x, x, x, x, P8A8_UNORM_PALETTE0)
+ SF( 50, 50, x, x, x, x, x, x, x, x, x, x, x, P8A8_UNORM_PALETTE1)
+ SF(120, 120, x, x, 120, 120, x, x, x, x, x, 120, x, A1B5G5R5_UNORM)
/* According to the PRM, A4B4G4R4_UNORM isn't supported until Sky Lake
* but empirical testing indicates that at least sampling works just fine
* on Broadwell.
*/
- SF( 80, 80, x, x, 90, 120, x, x, x, x, x, 120, A4B4G4R4_UNORM)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, L8A8_UINT)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, L8A8_SINT)
- SF( Y, Y, x, 45, Y, Y, Y, x, x, 70, 110, 120, R8_UNORM)
- SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 120, R8_SNORM)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, R8_SINT)
- SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, R8_UINT)
- SF( Y, Y, x, Y, Y, Y, x, x, x, 70, 110, 120, A8_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, I8_UNORM)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, L8_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, P4A4_UNORM_PALETTE0)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, A4P4_UNORM_PALETTE0)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8_USCALED)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, P8_UNORM_PALETTE0)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, L8_UNORM_SRGB)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, P8_UNORM_PALETTE1)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, P4A4_UNORM_PALETTE1)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, A4P4_UNORM_PALETTE1)
- SF( x, x, x, x, x, x, x, x, x, x, x, x, Y8_UNORM)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, L8_UINT)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, L8_SINT)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, I8_UINT)
- SF( 90, x, x, x, x, x, x, x, x, x, x, x, I8_SINT)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, DXT1_RGB_SRGB)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, R1_UNORM)
- SF( Y, Y, x, Y, Y, x, x, x, 60, x, x, x, YCRCB_NORMAL)
- SF( Y, Y, x, Y, Y, x, x, x, 60, x, x, x, YCRCB_SWAPUVY)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, P2_UNORM_PALETTE0)
- SF( 45, 45, x, x, x, x, x, x, x, x, x, x, P2_UNORM_PALETTE1)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, BC1_UNORM)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, BC2_UNORM)
- SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, BC3_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC4_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC5_UNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC1_UNORM_SRGB)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC2_UNORM_SRGB)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC3_UNORM_SRGB)
- SF( Y, x, x, x, x, x, x, x, x, x, x, x, MONO8)
- SF( Y, Y, x, x, Y, x, x, x, 60, x, x, x, YCRCB_SWAPUV)
- SF( Y, Y, x, x, Y, x, x, x, 60, x, x, x, YCRCB_SWAPY)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, DXT1_RGB)
-/* smpl filt shad CK RT AB VB SO color TW TR ccs_e */
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, FXT1)
- SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, R8G8B8_UNORM)
- SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, R8G8B8_SNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8B8_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R8G8B8_USCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R64G64B64A64_FLOAT)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R64G64B64_FLOAT)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC4_SNORM)
- SF( Y, Y, x, x, x, x, x, x, x, x, x, x, BC5_SNORM)
- SF( 50, 50, x, x, x, x, 60, x, x, x, x, x, R16G16B16_FLOAT)
- SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, R16G16B16_UNORM)
- SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, R16G16B16_SNORM)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16B16_SSCALED)
- SF( x, x, x, x, x, x, Y, x, x, x, x, x, R16G16B16_USCALED)
- SF( 70, 70, x, x, x, x, x, x, x, x, x, x, BC6H_SF16)
- SF( 70, 70, x, x, x, x, x, x, x, x, x, x, BC7_UNORM)
- SF( 70, 70, x, x, x, x, x, x, x, x, x, x, BC7_UNORM_SRGB)
- SF( 70, 70, x, x, x, x, x, x, x, x, x, x, BC6H_UF16)
- SF( x, x, x, x, x, x, x, x, x, x, x, x, PLANAR_420_8)
+ SF( 80, 80, x, x, 90, 120, x, x, x, x, x, 120, x, A4B4G4R4_UNORM)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, L8A8_UINT)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, L8A8_SINT)
+ SF( Y, Y, x, 45, Y, Y, Y, x, x, 70, 110, 120, x, R8_UNORM)
+ SF( Y, Y, x, x, Y, 60, Y, x, x, 70, 110, 120, x, R8_SNORM)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 90, 120, x, R8_SINT)
+ SF( Y, x, x, x, Y, x, Y, x, x, 70, 75, 120, x, R8_UINT)
+ SF( Y, Y, x, Y, Y, Y, x, x, x, 70, 110, 120, x, A8_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, I8_UNORM)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, L8_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, P4A4_UNORM_PALETTE0)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, A4P4_UNORM_PALETTE0)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8_USCALED)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, P8_UNORM_PALETTE0)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, L8_UNORM_SRGB)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, P8_UNORM_PALETTE1)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, P4A4_UNORM_PALETTE1)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, A4P4_UNORM_PALETTE1)
+ SF( x, x, x, x, x, x, x, x, x, x, x, x, x, Y8_UNORM)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, L8_UINT)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, L8_SINT)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, I8_UINT)
+ SF( 90, x, x, x, x, x, x, x, x, x, x, x, x, I8_SINT)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, DXT1_RGB_SRGB)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, R1_UNORM)
+ SF( Y, Y, x, Y, Y, x, x, x, 60, x, x, 120, x, YCRCB_NORMAL)
+ SF( Y, Y, x, Y, Y, x, x, x, 60, x, x, x, x, YCRCB_SWAPUVY)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, P2_UNORM_PALETTE0)
+ SF( 45, 45, x, x, x, x, x, x, x, x, x, x, x, P2_UNORM_PALETTE1)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, BC1_UNORM)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, BC2_UNORM)
+ SF( Y, Y, x, Y, x, x, x, x, x, x, x, x, x, BC3_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC4_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC5_UNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC1_UNORM_SRGB)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC2_UNORM_SRGB)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC3_UNORM_SRGB)
+ SF( Y, x, x, x, x, x, x, x, x, x, x, x, x, MONO8)
+ SF( Y, Y, x, x, Y, x, x, x, 60, x, x, x, x, YCRCB_SWAPUV)
+ SF( Y, Y, x, x, Y, x, x, x, 60, x, x, 120, x, YCRCB_SWAPY)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, DXT1_RGB)
+/* smpl filt shad CK RT AB VB SO color TW TR ccs_e TA */
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, FXT1)
+ SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8_UNORM)
+ SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8_SNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R8G8B8_USCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R64G64B64A64_FLOAT)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R64G64B64_FLOAT)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC4_SNORM)
+ SF( Y, Y, x, x, x, x, x, x, x, x, x, x, x, BC5_SNORM)
+ SF( 50, 50, x, x, x, x, 60, x, x, x, x, x, x, R16G16B16_FLOAT)
+ SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16_UNORM)
+ SF( 75, 75, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16_SNORM)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16_SSCALED)
+ SF( x, x, x, x, x, x, Y, x, x, x, x, x, x, R16G16B16_USCALED)
+ SF( 70, 70, x, x, x, x, x, x, x, x, x, x, x, BC6H_SF16)
+ SF( 70, 70, x, x, x, x, x, x, x, x, x, x, x, BC7_UNORM)
+ SF( 70, 70, x, x, x, x, x, x, x, x, x, x, x, BC7_UNORM_SRGB)
+ SF( 70, 70, x, x, x, x, x, x, x, x, x, x, x, BC6H_UF16)
+ SF( x, x, x, x, x, x, x, x, x, x, x, x, x, PLANAR_420_8)
/* The format enum for R8G8B8_UNORM_SRGB first shows up in the HSW PRM but
* empirical testing indicates that it doesn't actually sRGB decode and
- * acts identical to R8G8B8_UNORM. It does work on gen8+.
+ * acts identical to R8G8B8_UNORM. It does work on gfx8+.
*/
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, R8G8B8_UNORM_SRGB)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC1_RGB8)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_RGB8)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, EAC_R11)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, EAC_RG11)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, EAC_SIGNED_R11)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, EAC_SIGNED_RG11)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_SRGB8)
- SF( 90, x, x, x, x, x, 75, x, x, x, x, x, R16G16B16_UINT)
- SF( 90, x, x, x, x, x, 75, x, x, x, x, x, R16G16B16_SINT)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R32_SFIXED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R10G10B10A2_SNORM)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R10G10B10A2_USCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R10G10B10A2_SSCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, R10G10B10A2_SINT)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, B10G10R10A2_SNORM)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, B10G10R10A2_USCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, B10G10R10A2_SSCALED)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, B10G10R10A2_UINT)
- SF( x, x, x, x, x, x, 75, x, x, x, x, x, B10G10R10A2_SINT)
- SF( x, x, x, x, x, x, 80, x, x, x, x, x, R64G64B64A64_PASSTHRU)
- SF( x, x, x, x, x, x, 80, x, x, x, x, x, R64G64B64_PASSTHRU)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_RGB8_PTA)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_SRGB8_PTA)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_EAC_RGBA8)
- SF( 80, 80, x, x, x, x, x, x, x, x, x, x, ETC2_EAC_SRGB8_A8)
- SF( 90, x, x, x, x, x, 75, x, x, x, x, x, R8G8B8_UINT)
- SF( 90, x, x, x, x, x, 75, x, x, x, x, x, R8G8B8_SINT)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_4X4_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X4_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X5_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X5_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X6_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X5_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X6_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X8_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X5_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X6_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X8_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X10_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X10_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X12_FLT16)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_4X4_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X4_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X5_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X5_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X6_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X5_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X6_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X8_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X5_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X6_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X8_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X10_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X10_U8SRGB)
- SF( 90, 90, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X12_U8SRGB)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_4X4_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_5X4_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_5X5_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_6X5_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_6X6_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X5_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X6_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X8_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X5_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X6_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X8_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X10_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_12X10_FLT16)
- SF(100, 100, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_12X12_FLT16)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, R8G8B8_UNORM_SRGB)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC1_RGB8)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_RGB8)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, EAC_R11)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, EAC_RG11)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, EAC_SIGNED_R11)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, EAC_SIGNED_RG11)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_SRGB8)
+ SF( 90, x, x, x, x, x, 75, x, x, x, x, x, x, R16G16B16_UINT)
+ SF( 90, x, x, x, x, x, 75, x, x, x, x, x, x, R16G16B16_SINT)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R32_SFIXED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R10G10B10A2_SNORM)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R10G10B10A2_USCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R10G10B10A2_SSCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, R10G10B10A2_SINT)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, B10G10R10A2_SNORM)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, B10G10R10A2_USCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, B10G10R10A2_SSCALED)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, B10G10R10A2_UINT)
+ SF( x, x, x, x, x, x, 75, x, x, x, x, x, x, B10G10R10A2_SINT)
+ SF( x, x, x, x, x, x, 80, x, x, x, x, x, x, R64G64B64A64_PASSTHRU)
+ SF( x, x, x, x, x, x, 80, x, x, x, x, x, x, R64G64B64_PASSTHRU)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_RGB8_PTA)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_SRGB8_PTA)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_EAC_RGBA8)
+ SF( 80, 80, x, x, x, x, x, x, x, x, x, x, x, ETC2_EAC_SRGB8_A8)
+ SF( 90, x, x, x, x, x, 75, x, x, x, x, x, x, R8G8B8_UINT)
+ SF( 90, x, x, x, x, x, 75, x, x, x, x, x, x, R8G8B8_SINT)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_4X4_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X4_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X5_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X5_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X6_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X5_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X6_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X8_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X5_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X6_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X8_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X10_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X10_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X12_FLT16)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_4X4_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X4_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_5X5_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X5_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_6X6_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X5_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X6_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_8X8_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X5_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X6_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X8_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_10X10_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X10_U8SRGB)
+ SF( 90, 90, x, x, x, x, x, x, x, x, x, x, x, ASTC_LDR_2D_12X12_U8SRGB)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_4X4_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_5X4_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_5X5_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_6X5_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_6X6_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X5_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X6_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_8X8_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X5_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X6_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X8_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_10X10_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_12X10_FLT16)
+ SF(110, 110, x, x, x, x, x, x, x, x, x, x, x, ASTC_HDR_2D_12X12_FLT16)
};
#undef x
#undef Y
@@ -597,6 +604,18 @@ isl_format_for_pipe_format(enum pipe_format pf)
[PIPE_FORMAT_ETC1_RGB8] = ISL_FORMAT_ETC1_RGB8,
+ /* The formats say YCrCb, but there's no colorspace conversion. */
+ [PIPE_FORMAT_R8G8_R8B8_UNORM] = ISL_FORMAT_YCRCB_NORMAL,
+ [PIPE_FORMAT_G8R8_B8R8_UNORM] = ISL_FORMAT_YCRCB_SWAPY,
+
+ /* We map these formats to help configure media compression. */
+ [PIPE_FORMAT_YUYV] = ISL_FORMAT_YCRCB_NORMAL,
+ [PIPE_FORMAT_UYVY] = ISL_FORMAT_YCRCB_SWAPY,
+ [PIPE_FORMAT_NV12] = ISL_FORMAT_PLANAR_420_8,
+ [PIPE_FORMAT_P010] = ISL_FORMAT_PLANAR_420_10,
+ [PIPE_FORMAT_P012] = ISL_FORMAT_PLANAR_420_12,
+ [PIPE_FORMAT_P016] = ISL_FORMAT_PLANAR_420_16,
+
[PIPE_FORMAT_R8G8B8X8_SRGB] = ISL_FORMAT_R8G8B8X8_UNORM_SRGB,
[PIPE_FORMAT_B10G10R10X2_UNORM] = ISL_FORMAT_B10G10R10X2_UNORM,
[PIPE_FORMAT_R16G16B16X16_UNORM] = ISL_FORMAT_R16G16B16X16_UNORM,
@@ -672,12 +691,6 @@ isl_format_for_pipe_format(enum pipe_format pf)
return table[pf];
}
-static unsigned
-format_gen(const struct gen_device_info *devinfo)
-{
- return devinfo->gen * 10 + (devinfo->is_g4x || devinfo->is_haswell) * 5;
-}
-
static bool
format_info_exists(enum isl_format format)
{
@@ -687,93 +700,88 @@ format_info_exists(enum isl_format format)
}
bool
-isl_format_supports_rendering(const struct gen_device_info *devinfo,
+isl_format_supports_rendering(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- return format_gen(devinfo) >= format_info[format].render_target;
+ /* If this fails, then we need to update struct surface_format_info */
+ assert(devinfo->verx10 <
+ (1ul << (8 * sizeof(format_info[format].render_target))));
+ return devinfo->verx10 >= format_info[format].render_target;
}
bool
-isl_format_supports_alpha_blending(const struct gen_device_info *devinfo,
+isl_format_supports_alpha_blending(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- return format_gen(devinfo) >= format_info[format].alpha_blend;
+ return devinfo->verx10 >= format_info[format].alpha_blend;
}
bool
-isl_format_supports_sampling(const struct gen_device_info *devinfo,
+isl_format_supports_sampling(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- if (devinfo->is_baytrail) {
+ if (devinfo->platform == INTEL_PLATFORM_BYT) {
const struct isl_format_layout *fmtl = isl_format_get_layout(format);
/* Support for ETC1 and ETC2 exists on Bay Trail even though big-core
* GPUs didn't get it until Broadwell.
*/
if (fmtl->txc == ISL_TXC_ETC1 || fmtl->txc == ISL_TXC_ETC2)
return true;
- } else if (devinfo->is_cherryview) {
- const struct isl_format_layout *fmtl = isl_format_get_layout(format);
- /* Support for ASTC LDR exists on Cherry View even though big-core
- * GPUs didn't get it until Skylake.
+ } else if (devinfo->platform == INTEL_PLATFORM_CHV) {
+ /* Support for ASTC LDR theoretically exists on Cherry View even though
+ * big-core GPUs didn't get it until Skylake. However, it's fairly
+ * badly broken and requires some nasty workarounds which no Mesa driver
+ * has ever implemented.
*/
- if (fmtl->txc == ISL_TXC_ASTC)
- return format < ISL_FORMAT_ASTC_HDR_2D_4X4_FLT16;
- } else if (gen_device_info_is_9lp(devinfo)) {
+ } else if (intel_device_info_is_9lp(devinfo)) {
const struct isl_format_layout *fmtl = isl_format_get_layout(format);
/* Support for ASTC HDR exists on Broxton even though big-core
* GPUs didn't get it until Cannonlake.
*/
if (fmtl->txc == ISL_TXC_ASTC)
return true;
+ } else if (devinfo->verx10 >= 125) {
+ const struct isl_format_layout *fmtl = isl_format_get_layout(format);
+ /* ASTC & FXT1 support was removed from the hardware on Gfx12.5.
+ * Annoyingly, our format_info table doesn't have a concept of things
+ * being removed so we handle it as yet another special case.
+ *
+ * See HSD 1408144932 (ASTC), 1407633611 (FXT1)
+ *
+ */
+ if (fmtl->txc == ISL_TXC_ASTC || fmtl->txc == ISL_TXC_FXT1)
+ return false;
}
- return format_gen(devinfo) >= format_info[format].sampling;
+ return devinfo->verx10 >= format_info[format].sampling;
}
bool
-isl_format_supports_filtering(const struct gen_device_info *devinfo,
+isl_format_supports_filtering(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- if (devinfo->is_baytrail) {
- const struct isl_format_layout *fmtl = isl_format_get_layout(format);
- /* Support for ETC1 and ETC2 exists on Bay Trail even though big-core
- * GPUs didn't get it until Broadwell.
- */
- if (fmtl->txc == ISL_TXC_ETC1 || fmtl->txc == ISL_TXC_ETC2)
- return true;
- } else if (devinfo->is_cherryview) {
- const struct isl_format_layout *fmtl = isl_format_get_layout(format);
- /* Support for ASTC LDR exists on Cherry View even though big-core
- * GPUs didn't get it until Skylake.
- */
- if (fmtl->txc == ISL_TXC_ASTC)
- return format < ISL_FORMAT_ASTC_HDR_2D_4X4_FLT16;
- } else if (gen_device_info_is_9lp(devinfo)) {
- const struct isl_format_layout *fmtl = isl_format_get_layout(format);
- /* Support for ASTC HDR exists on Broxton even though big-core
- * GPUs didn't get it until Cannonlake.
- */
- if (fmtl->txc == ISL_TXC_ASTC)
- return true;
+ if (isl_format_is_compressed(format)) {
+ assert(format_info[format].filtering == format_info[format].sampling);
+ return isl_format_supports_sampling(devinfo, format);
}
- return format_gen(devinfo) >= format_info[format].filtering;
+ return devinfo->verx10 >= format_info[format].filtering;
}
bool
-isl_format_supports_vertex_fetch(const struct gen_device_info *devinfo,
+isl_format_supports_vertex_fetch(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
@@ -782,25 +790,37 @@ isl_format_supports_vertex_fetch(const struct gen_device_info *devinfo,
/* For vertex fetch, Bay Trail supports the same set of formats as Haswell
* but is a superset of Ivy Bridge.
*/
- if (devinfo->is_baytrail)
+ if (devinfo->platform == INTEL_PLATFORM_BYT)
return 75 >= format_info[format].input_vb;
- return format_gen(devinfo) >= format_info[format].input_vb;
+ return devinfo->verx10 >= format_info[format].input_vb;
}
/**
* Returns true if the given format can support typed writes.
*/
bool
-isl_format_supports_typed_writes(const struct gen_device_info *devinfo,
+isl_format_supports_typed_writes(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- return format_gen(devinfo) >= format_info[format].typed_write;
+ return devinfo->verx10 >= format_info[format].typed_write;
}
+/**
+ * Returns true if the given format can support typed atomics.
+ */
+bool
+isl_format_supports_typed_atomics(const struct intel_device_info *devinfo,
+ enum isl_format format)
+{
+ if (!format_info_exists(format))
+ return false;
+
+ return devinfo->verx10 >= format_info[format].typed_atomics;
+}
/**
* Returns true if the given format can support typed reads with format
@@ -813,13 +833,13 @@ isl_format_supports_typed_writes(const struct gen_device_info *devinfo,
* occurrences.
*/
bool
-isl_format_supports_typed_reads(const struct gen_device_info *devinfo,
+isl_format_supports_typed_reads(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
return false;
- return format_gen(devinfo) >= format_info[format].typed_read;
+ return devinfo->verx10 >= format_info[format].typed_read;
}
/**
@@ -829,13 +849,13 @@ isl_format_supports_typed_reads(const struct gen_device_info *devinfo,
* and sample count. See isl_surf_get_ccs_surf for details.
*/
bool
-isl_format_supports_ccs_d(const struct gen_device_info *devinfo,
+isl_format_supports_ccs_d(const struct intel_device_info *devinfo,
enum isl_format format)
{
/* Clear-only compression was first added on Ivy Bridge and was last
* implemented on Ice lake (see BSpec: 43862).
*/
- if (devinfo->gen < 7 || devinfo->gen > 11)
+ if (devinfo->ver < 7 || devinfo->ver > 11)
return false;
if (!isl_format_supports_rendering(devinfo, format))
@@ -843,6 +863,12 @@ isl_format_supports_ccs_d(const struct gen_device_info *devinfo,
const struct isl_format_layout *fmtl = isl_format_get_layout(format);
+ /* From the Ivy Bridge PRM, Vol2 Part1 11.7 "MCS Buffer for Render
+ * Target(s)", beneath the "Fast Color Clear" bullet (p326):
+ *
+ * - MCS buffer for non-MSRT is supported only for RT formats 32bpp,
+ * 64bpp, and 128bpp.
+ */
return fmtl->bpb == 32 || fmtl->bpb == 64 || fmtl->bpb == 128;
}
@@ -853,7 +879,7 @@ isl_format_supports_ccs_d(const struct gen_device_info *devinfo,
* such as tiling and sample count. See isl_surf_get_ccs_surf for details.
*/
bool
-isl_format_supports_ccs_e(const struct gen_device_info *devinfo,
+isl_format_supports_ccs_e(const struct intel_device_info *devinfo,
enum isl_format format)
{
if (!format_info_exists(format))
@@ -861,18 +887,19 @@ isl_format_supports_ccs_e(const struct gen_device_info *devinfo,
/* For simplicity, only report that a format supports CCS_E if blorp can
* perform bit-for-bit copies with an image of that format while compressed.
- * Unfortunately, R11G11B10_FLOAT is in a compression class of its own and
- * there is no way to copy to/from it which doesn't potentially loose data
- * if one of the bit patterns being copied isn't valid finite floats.
+ * Unfortunately, R11G11B10_FLOAT is in a compression class of its own, and
+ * on ICL, there is no way to copy to/from it which doesn't potentially
+ * loose data if one of the bit patterns being copied isn't valid finite
+ * floats.
*/
- if (format == ISL_FORMAT_R11G11B10_FLOAT)
+ if (devinfo->ver == 11 && format == ISL_FORMAT_R11G11B10_FLOAT)
return false;
- return format_gen(devinfo) >= format_info[format].ccs_e;
+ return devinfo->verx10 >= format_info[format].ccs_e;
}
bool
-isl_format_supports_multisampling(const struct gen_device_info *devinfo,
+isl_format_supports_multisampling(const struct intel_device_info *devinfo,
enum isl_format format)
{
/* From the Sandybridge PRM, Volume 4 Part 1 p72, SURFACE_STATE, Surface
@@ -897,8 +924,23 @@ isl_format_supports_multisampling(const struct gen_device_info *devinfo,
/* On SKL+, HiZ is always single-sampled even when the primary surface
* is multisampled. See also isl_surf_get_hiz_surf().
*/
- return devinfo->gen <= 8;
- } else if (devinfo->gen < 7 && isl_format_get_layout(format)->bpb > 64) {
+ return devinfo->ver <= 8;
+ } else if (devinfo->ver == 7 && isl_format_has_sint_channel(format)) {
+ /* From the Ivy Bridge PRM, Vol4 Part1 p73 ("Number of Multisamples"):
+ *
+ * This field must be set to MULTISAMPLECOUNT_1 for SINT MSRTs when
+ * all RT channels are not written
+ *
+ * From the Ivy Bridge PRM, Vol4 Part1 p77 ("MCS Enable"):
+ *
+ * This field must be set to 0 for all SINT MSRTs when all RT channels
+ * are not written
+ *
+ * Disable multisampling support now as we don't handle the case when
+ * one of the render target channels is disabled.
+ */
+ return false;
+ } else if (devinfo->ver < 7 && isl_format_get_layout(format)->bpb > 64) {
return false;
} else if (isl_format_is_compressed(format)) {
return false;
@@ -910,6 +952,30 @@ isl_format_supports_multisampling(const struct gen_device_info *devinfo,
}
/**
+ * Returns true if the two formats are component size compatible meaning that
+ * each component from one format has the same number of bits as the other
+ * format.
+ *
+ * This is useful to check whether an image used with 2 different formats can
+ * be fast cleared with a non 0 clear color.
+ */
+bool
+isl_formats_have_same_bits_per_channel(enum isl_format format1,
+ enum isl_format format2)
+{
+ const struct isl_format_layout *fmtl1 = isl_format_get_layout(format1);
+ const struct isl_format_layout *fmtl2 = isl_format_get_layout(format2);
+
+ return fmtl1->channels.r.bits == fmtl2->channels.r.bits &&
+ fmtl1->channels.g.bits == fmtl2->channels.g.bits &&
+ fmtl1->channels.b.bits == fmtl2->channels.b.bits &&
+ fmtl1->channels.a.bits == fmtl2->channels.a.bits &&
+ fmtl1->channels.l.bits == fmtl2->channels.l.bits &&
+ fmtl1->channels.i.bits == fmtl2->channels.i.bits &&
+ fmtl1->channels.p.bits == fmtl2->channels.p.bits;
+}
+
+/**
* Returns true if the two formats are "CCS_E compatible" meaning that you can
* render in one format with CCS_E enabled and then texture using the other
* format without needing a resolve.
@@ -919,7 +985,7 @@ isl_format_supports_multisampling(const struct gen_device_info *devinfo,
* format-dependent.
*/
bool
-isl_formats_are_ccs_e_compatible(const struct gen_device_info *devinfo,
+isl_formats_are_ccs_e_compatible(const struct intel_device_info *devinfo,
enum isl_format format1,
enum isl_format format2)
{
@@ -928,25 +994,17 @@ isl_formats_are_ccs_e_compatible(const struct gen_device_info *devinfo,
!isl_format_supports_ccs_e(devinfo, format2))
return false;
- /* Gen12 added CCS_E support for A8_UNORM, A8_UNORM and R8_UNORM share the
- * same aux map format encoding so they are definitely compatible.
+ /* On TGL+, drivers may specify a compression format independently from the
+ * surface format. So, even if the surface format changes, hardware is
+ * still able to determine how to access the CCS.
*/
- if (format1 == ISL_FORMAT_A8_UNORM)
- format1 = ISL_FORMAT_R8_UNORM;
-
- if (format2 == ISL_FORMAT_A8_UNORM)
- format2 = ISL_FORMAT_R8_UNORM;
-
- const struct isl_format_layout *fmtl1 = isl_format_get_layout(format1);
- const struct isl_format_layout *fmtl2 = isl_format_get_layout(format2);
+ if (devinfo->ver >= 12)
+ return true;
/* The compression used by CCS is not dependent on the actual data encoding
* of the format but only depends on the bit-layout of the channels.
*/
- return fmtl1->channels.r.bits == fmtl2->channels.r.bits &&
- fmtl1->channels.g.bits == fmtl2->channels.g.bits &&
- fmtl1->channels.b.bits == fmtl2->channels.b.bits &&
- fmtl1->channels.a.bits == fmtl2->channels.a.bits;
+ return isl_formats_have_same_bits_per_channel(format1, format2);
}
static bool
@@ -1146,6 +1204,51 @@ isl_format_rgbx_to_rgba(enum isl_format rgbx)
}
}
+/*
+ * Xe2 allows route of LD messages from Sampler to LSC to improve performance
+ * when some restrictions are met, here checking the format restrictions.
+ *
+ * RENDER_SURFACE_STATE::Enable Sampler Route to LSC:
+ * "The Surface Format is one of the following:
+ *
+ * R8_UNORM, R8G8_UNORM, R16_UNORM, R16G16_UNORM, R16G16B16A16_UNORM
+ * R16_FLOAT, R16G16_FLOAT, R16G16B16A16_FLOAT
+ * R32_FLOAT, R32G32_FLOAT, R32G32B32A32_FLOAT, R32_UINT, R32G32_UINT, R32G32B32A32_UINT
+ * R10G10B10A2_UNORM, R11G11B10_FLOAT
+ * "
+ */
+bool
+isl_format_support_sampler_route_to_lsc(enum isl_format fmt)
+{
+ /* TODO/FIXME: even only enabling the optimization with formats below this
+ * is causing some tests to fail so completely disabling this optimization
+ * for now.
+ */
+ return false;
+
+ switch (fmt) {
+ case ISL_FORMAT_R8_UNORM:
+ case ISL_FORMAT_R8G8_UNORM:
+ case ISL_FORMAT_R16_UNORM:
+ case ISL_FORMAT_R16G16_UNORM:
+ case ISL_FORMAT_R16G16B16A16_UNORM:
+ case ISL_FORMAT_R16_FLOAT:
+ case ISL_FORMAT_R16G16_FLOAT:
+ case ISL_FORMAT_R16G16B16A16_FLOAT:
+ case ISL_FORMAT_R32_FLOAT:
+ case ISL_FORMAT_R32G32_FLOAT:
+ case ISL_FORMAT_R32G32B32A32_FLOAT:
+ case ISL_FORMAT_R32_UINT:
+ case ISL_FORMAT_R32G32_UINT:
+ case ISL_FORMAT_R32G32B32A32_UINT:
+ case ISL_FORMAT_R10G10B10A2_UNORM:
+ case ISL_FORMAT_R11G11B10_FLOAT:
+ return true;
+ default:
+ return false;
+ }
+}
+
static inline void
pack_channel(const union isl_color_value *value, unsigned i,
const struct isl_channel_layout *layout,
@@ -1184,11 +1287,11 @@ pack_channel(const union isl_color_value *value, unsigned i,
}
break;
case ISL_UINT:
- packed = MIN(value->u32[i], MAX_UINT(layout->bits));
+ packed = MIN(value->u32[i], u_uintN_max(layout->bits));
break;
case ISL_SINT:
- packed = MIN(MAX(value->u32[i], MIN_INT(layout->bits)),
- MAX_INT(layout->bits));
+ packed = CLAMP(value->u32[i], u_intN_min(layout->bits),
+ u_intN_max(layout->bits));
break;
default:
@@ -1198,7 +1301,7 @@ pack_channel(const union isl_color_value *value, unsigned i,
unsigned dword = layout->start_bit / 32;
unsigned bit = layout->start_bit % 32;
assert(bit + layout->bits <= 32);
- data_out[dword] |= (packed & MAX_UINT(layout->bits)) << bit;
+ data_out[dword] |= (packed & u_uintN_max(layout->bits)) << bit;
}
/**
@@ -1235,18 +1338,6 @@ isl_color_value_pack(const union isl_color_value *value,
assert(fmtl->channels.p.bits == 0);
}
-/** Extend an N-bit signed integer to 32 bits */
-static inline int32_t
-sign_extend(int32_t x, unsigned bits)
-{
- if (bits < 32) {
- unsigned shift = 32 - bits;
- return (x << shift) >> shift;
- } else {
- return x;
- }
-}
-
static inline void
unpack_channel(union isl_color_value *value,
unsigned start, unsigned count,
@@ -1260,7 +1351,7 @@ unpack_channel(union isl_color_value *value,
unsigned dword = layout->start_bit / 32;
unsigned bit = layout->start_bit % 32;
assert(bit + layout->bits <= 32);
- uint32_t packed = (data_in[dword] >> bit) & MAX_UINT(layout->bits);
+ uint32_t packed = (data_in[dword] >> bit) & u_uintN_max(layout->bits);
union {
uint32_t u32;
@@ -1284,7 +1375,7 @@ unpack_channel(union isl_color_value *value,
}
break;
case ISL_SNORM:
- unpacked.f32 = _mesa_snorm_to_float(sign_extend(packed, layout->bits),
+ unpacked.f32 = _mesa_snorm_to_float(util_sign_extend(packed, layout->bits),
layout->bits);
break;
case ISL_SFLOAT:
@@ -1299,7 +1390,7 @@ unpack_channel(union isl_color_value *value,
unpacked.u32 = packed;
break;
case ISL_SINT:
- unpacked.u32 = sign_extend(packed, layout->bits);
+ unpacked.u32 = util_sign_extend(packed, layout->bits);
break;
default:
@@ -1311,14 +1402,14 @@ unpack_channel(union isl_color_value *value,
}
/**
- * Take unpack an isl_color_value from the actual bits as specified by
+ * Unpack an isl_color_value from the actual bits as specified by
* the isl_format. This function is very slow for a format conversion
* function but should be fine for a single pixel worth of data.
*/
void
isl_color_value_unpack(union isl_color_value *value,
enum isl_format format,
- const uint32_t data_in[4])
+ const uint32_t *data_in)
{
const struct isl_format_layout *fmtl = isl_format_get_layout(format);
assert(fmtl->colorspace == ISL_COLORSPACE_LINEAR ||