summaryrefslogtreecommitdiff
path: root/lib/mesa/src/amd/addrlib
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2023-01-28 08:15:04 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2023-01-28 08:15:04 +0000
commit1c5c7896c1d54abd25c0f33ca996165b359eecb3 (patch)
treebc5a10bbe89ecd4008a5bed7a029babc992f66b5 /lib/mesa/src/amd/addrlib
parentc55dff45ea3a2c70e45601240b248017acc48198 (diff)
Import Mesa 22.3.4
Diffstat (limited to 'lib/mesa/src/amd/addrlib')
-rw-r--r--lib/mesa/src/amd/addrlib/inc/addrinterface.h17
-rw-r--r--lib/mesa/src/amd/addrlib/inc/addrtypes.h4
-rw-r--r--lib/mesa/src/amd/addrlib/meson.build6
-rw-r--r--lib/mesa/src/amd/addrlib/src/amdgpu_asic_addr.h130
-rw-r--r--lib/mesa/src/amd/addrlib/src/chip/gfx11/gfx11_gb_reg.h77
-rw-r--r--lib/mesa/src/amd/addrlib/src/core/addrlib.cpp6
-rw-r--r--lib/mesa/src/amd/addrlib/src/core/addrlib.h1
-rw-r--r--lib/mesa/src/amd/addrlib/src/core/addrlib2.cpp2
-rw-r--r--lib/mesa/src/amd/addrlib/src/core/addrlib2.h4
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx10/gfx10SwizzlePattern.h3
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp65
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.h10
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx11/gfx11SwizzlePattern.h3057
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.cpp4250
-rw-r--r--lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.h561
15 files changed, 8111 insertions, 82 deletions
diff --git a/lib/mesa/src/amd/addrlib/inc/addrinterface.h b/lib/mesa/src/amd/addrlib/inc/addrinterface.h
index 24d270ecf..11e9e8c2b 100644
--- a/lib/mesa/src/amd/addrlib/inc/addrinterface.h
+++ b/lib/mesa/src/amd/addrlib/inc/addrinterface.h
@@ -3757,6 +3757,14 @@ typedef union _ADDR2_BLOCK_SET
UINT_32 reserved : 24;
};
+ struct
+ {
+ UINT_32 : 5;
+ UINT_32 thin256KB : 1; // Thin 256KB block
+ UINT_32 thick256KB : 1; // Thick 256KB block
+ UINT_32 : 25;
+ } gfx11;
+
UINT_32 value;
} ADDR2_BLOCK_SET;
@@ -3836,6 +3844,15 @@ typedef union _ADDR2_SWMODE_SET
UINT_32 swVar_R_X : 1;
} gfx10;
+ struct
+ {
+ UINT_32 : 28;
+ UINT_32 sw256KB_Z_X : 1;
+ UINT_32 sw256KB_S_X : 1;
+ UINT_32 sw256KB_D_X : 1;
+ UINT_32 sw256KB_R_X : 1;
+ } gfx11;
+
UINT_32 value;
} ADDR2_SWMODE_SET;
diff --git a/lib/mesa/src/amd/addrlib/inc/addrtypes.h b/lib/mesa/src/amd/addrlib/inc/addrtypes.h
index 399c2b63e..ccecc2473 100644
--- a/lib/mesa/src/amd/addrlib/inc/addrtypes.h
+++ b/lib/mesa/src/amd/addrlib/inc/addrtypes.h
@@ -286,6 +286,10 @@ typedef enum _AddrSwizzleMode
ADDR_SW_VAR_Z_X = ADDR_SW_MISCDEF28,
ADDR_SW_VAR_R_X = ADDR_SW_MISCDEF31,
+ ADDR_SW_256KB_Z_X = ADDR_SW_MISCDEF28,
+ ADDR_SW_256KB_S_X = ADDR_SW_MISCDEF29,
+ ADDR_SW_256KB_D_X = ADDR_SW_MISCDEF30,
+ ADDR_SW_256KB_R_X = ADDR_SW_MISCDEF31,
} AddrSwizzleMode;
/**
diff --git a/lib/mesa/src/amd/addrlib/meson.build b/lib/mesa/src/amd/addrlib/meson.build
index 81c35f201..ebc3bbece 100644
--- a/lib/mesa/src/amd/addrlib/meson.build
+++ b/lib/mesa/src/amd/addrlib/meson.build
@@ -40,8 +40,12 @@ files_addrlib = files(
'src/gfx10/gfx10addrlib.cpp',
'src/gfx10/gfx10addrlib.h',
'src/gfx10/gfx10SwizzlePattern.h',
+ 'src/gfx11/gfx11addrlib.cpp',
+ 'src/gfx11/gfx11addrlib.h',
+ 'src/gfx11/gfx11SwizzlePattern.h',
'src/amdgpu_asic_addr.h',
'src/chip/gfx10/gfx10_gb_reg.h',
+ 'src/chip/gfx11/gfx11_gb_reg.h',
'src/chip/gfx9/gfx9_gb_reg.h',
'src/chip/r800/si_gb_reg.h',
'src/r800/ciaddrlib.cpp',
@@ -73,7 +77,7 @@ libamdgpu_addrlib = static_library(
include_directories : [
include_directories(
'inc', 'src', 'src/core', 'src/chip/gfx9', 'src/chip/r800',
- 'src/chip/gfx10',
+ 'src/chip/gfx10', 'src/chip/gfx11',
),
inc_amd_common, inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux,
],
diff --git a/lib/mesa/src/amd/addrlib/src/amdgpu_asic_addr.h b/lib/mesa/src/amd/addrlib/src/amdgpu_asic_addr.h
index 95c4e380d..36d39e5e4 100644
--- a/lib/mesa/src/amd/addrlib/src/amdgpu_asic_addr.h
+++ b/lib/mesa/src/amd/addrlib/src/amdgpu_asic_addr.h
@@ -33,18 +33,20 @@
#define AMDGPU_VENDOR_IS_AMD(v) ((v == ATI_VENDOR_ID) || (v == AMD_VENDOR_ID))
#define FAMILY_UNKNOWN 0x00
-#define FAMILY_TN 0x69
-#define FAMILY_SI 0x6E
-#define FAMILY_CI 0x78
-#define FAMILY_KV 0x7D
-#define FAMILY_VI 0x82
-#define FAMILY_POLARIS 0x82
-#define FAMILY_CZ 0x87
-#define FAMILY_AI 0x8D
-#define FAMILY_RV 0x8E
-#define FAMILY_NV 0x8F
-#define FAMILY_VGH 0x90
-#define FAMILY_YC 0x92
+#define FAMILY_TN 0x69 //# 105 / Trinity APUs
+#define FAMILY_SI 0x6E //# 110 / Southern Islands: Tahiti, Pitcairn, CapeVerde, Oland, Hainan
+#define FAMILY_CI 0x78 //# 120 / Sea Islands: Bonaire, Hawaii
+#define FAMILY_KV 0x7D //# 125 / Kaveri APUs: Spectre, Spooky, Kalindi, Godavari
+#define FAMILY_VI 0x82 //# 130 / Volcanic Islands: Iceland, Tonga, Fiji
+#define FAMILY_POLARIS 0x82 //# 130 / Polaris: 10, 11, 12
+#define FAMILY_CZ 0x87 //# 135 / Carrizo APUs: Carrizo, Stoney
+#define FAMILY_AI 0x8D //# 141 / Vega: 10, 20
+#define FAMILY_RV 0x8E //# 142 / Raven
+#define FAMILY_NV 0x8F //# 143 / Navi: 10
+#define FAMILY_VGH 0x90 //# 144 / Van Gogh
+#define FAMILY_GFX1100 0x91
+#define FAMILY_GFX1103 0x94
+#define FAMILY_RMB 0x92 //# 146 / Rembrandt
#define FAMILY_GC_10_3_6 0x95
#define FAMILY_GC_10_3_7 0x97
@@ -60,61 +62,67 @@
#define FAMILY_IS_AI(f) FAMILY_IS(f, AI)
#define FAMILY_IS_RV(f) FAMILY_IS(f, RV)
#define FAMILY_IS_NV(f) FAMILY_IS(f, NV)
-#define FAMILY_IS_YC(f) FAMILY_IS(f, YC)
+#define FAMILY_IS_GFX1100(f) FAMILY_IS(f, GFX1100)
+#define FAMILY_IS_RMB(f) FAMILY_IS(f, RMB)
#define AMDGPU_UNKNOWN 0xFF
-#define AMDGPU_TAHITI_RANGE 0x05, 0x14
-#define AMDGPU_PITCAIRN_RANGE 0x15, 0x28
-#define AMDGPU_CAPEVERDE_RANGE 0x29, 0x3C
-#define AMDGPU_OLAND_RANGE 0x3C, 0x46
-#define AMDGPU_HAINAN_RANGE 0x46, 0xFF
+#define AMDGPU_TAHITI_RANGE 0x05, 0x14 //# 5 <= x < 20
+#define AMDGPU_PITCAIRN_RANGE 0x15, 0x28 //# 21 <= x < 40
+#define AMDGPU_CAPEVERDE_RANGE 0x29, 0x3C //# 41 <= x < 60
+#define AMDGPU_OLAND_RANGE 0x3C, 0x46 //# 60 <= x < 70
+#define AMDGPU_HAINAN_RANGE 0x46, 0xFF //# 70 <= x < max
-#define AMDGPU_BONAIRE_RANGE 0x14, 0x28
-#define AMDGPU_HAWAII_RANGE 0x28, 0x3C
+#define AMDGPU_BONAIRE_RANGE 0x14, 0x28 //# 20 <= x < 40
+#define AMDGPU_HAWAII_RANGE 0x28, 0x3C //# 40 <= x < 60
-#define AMDGPU_SPECTRE_RANGE 0x01, 0x41
-#define AMDGPU_SPOOKY_RANGE 0x41, 0x81
-#define AMDGPU_KALINDI_RANGE 0x81, 0xA1
-#define AMDGPU_GODAVARI_RANGE 0xA1, 0xFF
+#define AMDGPU_SPECTRE_RANGE 0x01, 0x41 //# 1 <= x < 65
+#define AMDGPU_SPOOKY_RANGE 0x41, 0x81 //# 65 <= x < 129
+#define AMDGPU_KALINDI_RANGE 0x81, 0xA1 //# 129 <= x < 161
+#define AMDGPU_GODAVARI_RANGE 0xA1, 0xFF //# 161 <= x < max
-#define AMDGPU_ICELAND_RANGE 0x01, 0x14
-#define AMDGPU_TONGA_RANGE 0x14, 0x28
-#define AMDGPU_FIJI_RANGE 0x3C, 0x50
+#define AMDGPU_ICELAND_RANGE 0x01, 0x14 //# 1 <= x < 20
+#define AMDGPU_TONGA_RANGE 0x14, 0x28 //# 20 <= x < 40
+#define AMDGPU_FIJI_RANGE 0x3C, 0x50 //# 60 <= x < 80
-#define AMDGPU_POLARIS10_RANGE 0x50, 0x5A
-#define AMDGPU_POLARIS11_RANGE 0x5A, 0x64
-#define AMDGPU_POLARIS12_RANGE 0x64, 0x6E
-#define AMDGPU_VEGAM_RANGE 0x6E, 0xFF
+#define AMDGPU_POLARIS10_RANGE 0x50, 0x5A //# 80 <= x < 90
+#define AMDGPU_POLARIS11_RANGE 0x5A, 0x64 //# 90 <= x < 100
+#define AMDGPU_POLARIS12_RANGE 0x64, 0x6E //# 100 <= x < 110
+#define AMDGPU_VEGAM_RANGE 0x6E, 0xFF //# 110 <= x < max
-#define AMDGPU_CARRIZO_RANGE 0x01, 0x21
-#define AMDGPU_STONEY_RANGE 0x61, 0xFF
+#define AMDGPU_CARRIZO_RANGE 0x01, 0x21 //# 1 <= x < 33
+#define AMDGPU_BRISTOL_RANGE 0x10, 0x21 //# 16 <= x < 33
+#define AMDGPU_STONEY_RANGE 0x61, 0xFF //# 97 <= x < max
-#define AMDGPU_VEGA10_RANGE 0x01, 0x14
-#define AMDGPU_VEGA12_RANGE 0x14, 0x28
-#define AMDGPU_VEGA20_RANGE 0x28, 0x32
-#define AMDGPU_ARCTURUS_RANGE 0x32, 0x3C
-#define AMDGPU_ALDEBARAN_RANGE 0x3C, 0xFF
+#define AMDGPU_VEGA10_RANGE 0x01, 0x14 //# 1 <= x < 20
+#define AMDGPU_VEGA12_RANGE 0x14, 0x28 //# 20 <= x < 40
+#define AMDGPU_VEGA20_RANGE 0x28, 0xFF //# 40 <= x < max
-#define AMDGPU_RAVEN_RANGE 0x01, 0x81
-#define AMDGPU_RAVEN2_RANGE 0x81, 0x91
-#define AMDGPU_RENOIR_RANGE 0x91, 0xFF
+#define AMDGPU_RAVEN_RANGE 0x01, 0x81 //# 1 <= x < 129
+#define AMDGPU_RAVEN2_RANGE 0x81, 0x90 //# 129 <= x < 144
+#define AMDGPU_RENOIR_RANGE 0x91, 0xFF //# 145 <= x < max
-#define AMDGPU_NAVI10_RANGE 0x01, 0x0A
-#define AMDGPU_NAVI12_RANGE 0x0A, 0x14
-#define AMDGPU_NAVI14_RANGE 0x14, 0x28
-#define AMDGPU_SIENNA_CICHLID_RANGE 0x28, 0x32
-#define AMDGPU_NAVY_FLOUNDER_RANGE 0x32, 0x3C
-#define AMDGPU_DIMGREY_CAVEFISH_RANGE 0x3C, 0x46
-#define AMDGPU_BEIGE_GOBY_RANGE 0x46, 0x50
+#define AMDGPU_NAVI10_RANGE 0x01, 0x0A //# 1 <= x < 10
+#define AMDGPU_NAVI12_RANGE 0x0A, 0x14 //# 10 <= x < 20
+#define AMDGPU_NAVI14_RANGE 0x14, 0x28 //# 20 <= x < 40
+#define AMDGPU_NAVI21_RANGE 0x28, 0x32 //# 40 <= x < 50
+#define AMDGPU_NAVI22_RANGE 0x32, 0x3C //# 50 <= x < 60
+#define AMDGPU_NAVI23_RANGE 0x3C, 0x46 //# 60 <= x < 70
+#define AMDGPU_NAVI24_RANGE 0x46, 0x50 //# 70 <= x < 80
-#define AMDGPU_VANGOGH_RANGE 0x01, 0xFF
+#define AMDGPU_VANGOGH_RANGE 0x01, 0xFF //# 1 <= x < max
-#define AMDGPU_YELLOW_CARP_RANGE 0x01, 0xFF
+#define AMDGPU_GFX1100_RANGE 0x01, 0x10 //# 01 <= x < 16
+#define AMDGPU_GFX1101_RANGE 0x20, 0xFF //# 32 <= x < 255
+#define AMDGPU_GFX1102_RANGE 0x10, 0x20 //# 16 <= x < 32
-#define AMDGPU_GFX1036_RANGE 0x01, 0xFF
+#define AMDGPU_GFX1103_RANGE 0x01, 0xFF //# 1 <= x < max
-#define AMDGPU_GFX1037_RANGE 0x01, 0xFF
+#define AMDGPU_REMBRANDT_RANGE 0x01, 0xFF //# 01 <= x < 255
+
+#define AMDGPU_GFX1036_RANGE 0x01, 0xFF //# 1 <= x < max
+
+#define AMDGPU_GFX1037_RANGE 0x01, 0xFF //# 1 <= x < max
#define AMDGPU_EXPAND_FIX(x) x
#define AMDGPU_RANGE_HELPER(val, min, max) ((val >= min) && (val < max))
@@ -147,6 +155,7 @@
#define ASICREV_IS_VEGAM_P(r) ASICREV_IS(r, VEGAM)
#define ASICREV_IS_CARRIZO(r) ASICREV_IS(r, CARRIZO)
+#define ASICREV_IS_CARRIZO_BRISTOL(r) ASICREV_IS(r, BRISTOL)
#define ASICREV_IS_STONEY(r) ASICREV_IS(r, STONEY)
#define ASICREV_IS_VEGA10_M(r) ASICREV_IS(r, VEGA10)
@@ -154,8 +163,6 @@
#define ASICREV_IS_VEGA12_P(r) ASICREV_IS(r, VEGA12)
#define ASICREV_IS_VEGA12_p(r) ASICREV_IS(r, VEGA12)
#define ASICREV_IS_VEGA20_P(r) ASICREV_IS(r, VEGA20)
-#define ASICREV_IS_ARCTURUS(r) ASICREV_IS(r, ARCTURUS)
-#define ASICREV_IS_ALDEBARAN(r) ASICREV_IS(r, ALDEBARAN)
#define ASICREV_IS_RAVEN(r) ASICREV_IS(r, RAVEN)
#define ASICREV_IS_RAVEN2(r) ASICREV_IS(r, RAVEN2)
@@ -167,17 +174,22 @@
#define ASICREV_IS_NAVI14_M(r) ASICREV_IS(r, NAVI14)
-#define ASICREV_IS_SIENNA_CICHLID(r) ASICREV_IS(r, SIENNA_CICHLID)
+#define ASICREV_IS_NAVI21_M(r) ASICREV_IS(r, NAVI21)
-#define ASICREV_IS_NAVY_FLOUNDER(r) ASICREV_IS(r, NAVY_FLOUNDER)
+#define ASICREV_IS_NAVI22_P(r) ASICREV_IS(r, NAVI22)
-#define ASICREV_IS_DIMGREY_CAVEFISH(r) ASICREV_IS(r, DIMGREY_CAVEFISH)
+#define ASICREV_IS_NAVI23_P(r) ASICREV_IS(r, NAVI23)
-#define ASICREV_IS_BEIGE_GOBY(r) ASICREV_IS(r, BEIGE_GOBY)
+#define ASICREV_IS_NAVI24_P(r) ASICREV_IS(r, NAVI24)
#define ASICREV_IS_VANGOGH(r) ASICREV_IS(r, VANGOGH)
-#define ASICREV_IS_YELLOW_CARP(r) ASICREV_IS(r, YELLOW_CARP)
+#define ASICREV_IS_GFX1100(r) ASICREV_IS(r, GFX1100)
+#define ASICREV_IS_GFX1101(r) ASICREV_IS(r, GFX1101)
+#define ASICREV_IS_GFX1102(r) ASICREV_IS(r, GFX1102)
+#define ASICREV_IS_GFX1103(r) ASICREV_IS(r, GFX1103)
+
+#define ASICREV_IS_REMBRANDT(r) ASICREV_IS(r, REMBRANDT)
#define ASICREV_IS_GFX1036(r) ASICREV_IS(r, GFX1036)
diff --git a/lib/mesa/src/amd/addrlib/src/chip/gfx11/gfx11_gb_reg.h b/lib/mesa/src/amd/addrlib/src/chip/gfx11/gfx11_gb_reg.h
new file mode 100644
index 000000000..66aebf87d
--- /dev/null
+++ b/lib/mesa/src/amd/addrlib/src/chip/gfx11/gfx11_gb_reg.h
@@ -0,0 +1,77 @@
+/*
+************************************************************************************************************************
+*
+* Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE
+*
+***********************************************************************************************************************/
+
+#if !defined (__GFX11_GB_REG_H__)
+#define __GFX11_GB_REG_H__
+
+/*
+* gfx11_gb_reg.h
+*
+* Register Spec Release: 1.0
+*
+*/
+
+//
+// Make sure the necessary endian defines are there.
+//
+#if defined(LITTLEENDIAN_CPU)
+#elif defined(BIGENDIAN_CPU)
+#else
+#error "BIGENDIAN_CPU or LITTLEENDIAN_CPU must be defined"
+#endif
+
+union GB_ADDR_CONFIG_GFX11
+{
+ struct
+ {
+#if defined(LITTLEENDIAN_CPU)
+ unsigned int NUM_PIPES : 3;
+ unsigned int PIPE_INTERLEAVE_SIZE : 3;
+ unsigned int MAX_COMPRESSED_FRAGS : 2;
+ unsigned int NUM_PKRS : 3;
+ unsigned int : 8;
+ unsigned int NUM_SHADER_ENGINES : 2;
+ unsigned int : 5;
+ unsigned int NUM_RB_PER_SE : 2;
+ unsigned int : 4;
+#elif defined(BIGENDIAN_CPU)
+ unsigned int : 4;
+ unsigned int NUM_RB_PER_SE : 2;
+ unsigned int : 5;
+ unsigned int NUM_SHADER_ENGINES : 2;
+ unsigned int : 8;
+ unsigned int NUM_PKRS : 3;
+ unsigned int MAX_COMPRESSED_FRAGS : 2;
+ unsigned int PIPE_INTERLEAVE_SIZE : 3;
+ unsigned int NUM_PIPES : 3;
+#endif
+ } bitfields, bits;
+ unsigned int u32All;
+ int i32All;
+ float f32All;
+};
+
+#endif
+
diff --git a/lib/mesa/src/amd/addrlib/src/core/addrlib.cpp b/lib/mesa/src/amd/addrlib/src/core/addrlib.cpp
index 6e328e12e..4594271f9 100644
--- a/lib/mesa/src/amd/addrlib/src/core/addrlib.cpp
+++ b/lib/mesa/src/amd/addrlib/src/core/addrlib.cpp
@@ -227,11 +227,15 @@ ADDR_E_RETURNCODE Lib::Create(
break;
case FAMILY_NV:
case FAMILY_VGH:
- case FAMILY_YC:
+ case FAMILY_RMB:
case FAMILY_GC_10_3_6:
case FAMILY_GC_10_3_7:
pLib = Gfx10HwlInit(&client);
break;
+ case FAMILY_GFX1100:
+ case FAMILY_GFX1103:
+ pLib = Gfx11HwlInit(&client);
+ break;
default:
ADDR_ASSERT_ALWAYS();
break;
diff --git a/lib/mesa/src/amd/addrlib/src/core/addrlib.h b/lib/mesa/src/amd/addrlib/src/core/addrlib.h
index 334bbe140..91195a787 100644
--- a/lib/mesa/src/amd/addrlib/src/core/addrlib.h
+++ b/lib/mesa/src/amd/addrlib/src/core/addrlib.h
@@ -407,6 +407,7 @@ Lib* SiHwlInit (const Client* pClient);
Lib* CiHwlInit (const Client* pClient);
Lib* Gfx9HwlInit (const Client* pClient);
Lib* Gfx10HwlInit(const Client* pClient);
+Lib* Gfx11HwlInit(const Client* pClient);
} // Addr
#endif
diff --git a/lib/mesa/src/amd/addrlib/src/core/addrlib2.cpp b/lib/mesa/src/amd/addrlib/src/core/addrlib2.cpp
index a1638c2f4..e8e77d2d9 100644
--- a/lib/mesa/src/amd/addrlib/src/core/addrlib2.cpp
+++ b/lib/mesa/src/amd/addrlib/src/core/addrlib2.cpp
@@ -2065,7 +2065,7 @@ BOOL_32 Lib::IsBlockTypeAvaiable(
* Lib::BlockTypeWithinMemoryBudget
*
* @brief
-* Determine whether a new block type is acceptible based on memory waste ratio
+* Determine whether a new block type is acceptable based on memory waste ratio. Will favor larger block types.
*
* @return
* N/A
diff --git a/lib/mesa/src/amd/addrlib/src/core/addrlib2.h b/lib/mesa/src/amd/addrlib/src/core/addrlib2.h
index e9cd8a9b2..e381054ff 100644
--- a/lib/mesa/src/amd/addrlib/src/core/addrlib2.h
+++ b/lib/mesa/src/amd/addrlib/src/core/addrlib2.h
@@ -104,6 +104,8 @@ enum AddrBlockType
AddrBlockThickVar = 7, // Resource uses thick var block
AddrBlockMaxTiledType,
+ AddrBlockThin256KB = AddrBlockThinVar,
+ AddrBlockThick256KB = AddrBlockThickVar,
};
enum AddrSwSet
@@ -146,6 +148,8 @@ union ADDR_BIT_SETTING
* @brief Swizzle pattern information
************************************************************************************************************************
*/
+// Accessed by index representing the logbase2 of (8bpp/16bpp/32bpp/64bpp/128bpp)
+// contains the indices which map to 2D arrays SW_PATTERN_NIBBLE[0-9] which contain sections of an index equation. They are dependant on pipe# and bpe #
struct ADDR_SW_PATINFO
{
UINT_8 maxItemCount;
diff --git a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10SwizzlePattern.h b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10SwizzlePattern.h
index 4ac52fd27..65af3812a 100644
--- a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10SwizzlePattern.h
+++ b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10SwizzlePattern.h
@@ -3738,6 +3738,7 @@ const ADDR_SW_PATINFO GFX10_SW_VAR_Z_X_8xaa_RBPLUS_PATINFO[] =
{ 3, 27, 344, 365, 124, } , // 64 pipes (32 PKRs) 16 bpe @ SW_VAR_Z_X 8xaa @ RbPlus
};
+// Nibble 2D arrays contain arrays of sections of the index equation. An index equation depends on the swizzle mode, pipe#, and bpe#
const UINT_64 GFX10_SW_PATTERN_NIBBLE01[][8] =
{
{X0, X1, X2, X3, Y0, Y1, Y2, Y3, }, // 0
@@ -4294,6 +4295,8 @@ const UINT_64 GFX10_SW_PATTERN_NIBBLE2[][4] =
{Y4^X9^Y9, X4^Y4, Y2^Y5^X8, Z2^X5^Y8, }, // 507
{Z3^Y4^X9^Y9, X4^Y4, Y1^Y5^X8, Z2^X5^Y8, }, // 508
{Z3^Y4^X9^Y9, Y1^X4^Y4, X1^Y5^X8, Z2^X5^Y8, }, // 509
+ {Y3^X5^Y5, Z0^X4^Y4, Y2, X3, }, // 510
+ {Y3^X5^Y5, X2^X4^Y4, Y2, X3, }, // 511
};
const UINT_64 GFX10_SW_PATTERN_NIBBLE3[][4] =
diff --git a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp
index e4fc9e3e5..d130487e6 100644
--- a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp
+++ b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp
@@ -93,7 +93,7 @@ const SwizzleModeFlags Gfx10Lib::SwizzleModeTable[ADDR_SW_MAX_TYPE] =
{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
{{0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_4KB_S_X
{{0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0}}, // ADDR_SW_4KB_D_X
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0}}, // ADDR_SW_4KB_R_X
{{0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_64KB_Z_X
{{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_64KB_S_X
@@ -1035,25 +1035,25 @@ ChipFamily Gfx10Lib::HwlConvertChipFamily(
m_settings.isDcn20 = 1;
}
- if (ASICREV_IS_SIENNA_CICHLID(chipRevision))
+ if (ASICREV_IS_NAVI21_M(chipRevision))
{
m_settings.supportRbPlus = 1;
m_settings.dccUnsup3DSwDis = 0;
}
- if (ASICREV_IS_NAVY_FLOUNDER(chipRevision))
+ if (ASICREV_IS_NAVI22_P(chipRevision))
{
m_settings.supportRbPlus = 1;
m_settings.dccUnsup3DSwDis = 0;
}
- if (ASICREV_IS_DIMGREY_CAVEFISH(chipRevision))
+ if (ASICREV_IS_NAVI23_P(chipRevision))
{
m_settings.supportRbPlus = 1;
m_settings.dccUnsup3DSwDis = 0;
}
- if (ASICREV_IS_BEIGE_GOBY(chipRevision))
+ if (ASICREV_IS_NAVI24_P(chipRevision))
{
m_settings.supportRbPlus = 1;
m_settings.dccUnsup3DSwDis = 0;
@@ -1072,8 +1072,8 @@ ChipFamily Gfx10Lib::HwlConvertChipFamily(
}
break;
- case FAMILY_YC:
- if (ASICREV_IS_YELLOW_CARP(chipRevision))
+ case FAMILY_RMB:
+ if (ASICREV_IS_REMBRANDT(chipRevision))
{
m_settings.supportRbPlus = 1;
m_settings.dccUnsup3DSwDis = 0;
@@ -1460,12 +1460,12 @@ VOID Gfx10Lib::ConvertSwizzlePatternToEquation(
ADDR_EQUATION* pEquation) ///< [out] equation converted from swizzle pattern
const
{
+ // Get full swizzle pattern and store it as an ADDR_BIT_SETTING list
ADDR_BIT_SETTING fullSwizzlePattern[20];
GetSwizzlePatternFromPatternInfo(pPatInfo, fullSwizzlePattern);
const ADDR_BIT_SETTING* pSwizzle = fullSwizzlePattern;
const UINT_32 blockSizeLog2 = GetBlockSizeLog2(swMode);
-
pEquation->numBits = blockSizeLog2;
pEquation->stackedDepthSlices = FALSE;
@@ -1994,37 +1994,46 @@ VOID Gfx10Lib::InitEquationTable()
{
memset(m_equationTable, 0, sizeof(m_equationTable));
+ // Iterate through resourceTypes, up to MaxRsrcType where a "resourceType" refers to AddrResourceType (1D/2D/3D)
+ // resources. This starts with rsrcTypeIdx = 0, however there is an offset added that will start us off at
+ // computing 2D resources.
for (UINT_32 rsrcTypeIdx = 0; rsrcTypeIdx < MaxRsrcType; rsrcTypeIdx++)
{
+ // Add offset. Start iterating from ADDR_RSRC_TEX_2D
const AddrResourceType rsrcType = static_cast<AddrResourceType>(rsrcTypeIdx + ADDR_RSRC_TEX_2D);
+ // Iterate through the maximum number of swizzlemodes a type can hold
for (UINT_32 swModeIdx = 0; swModeIdx < MaxSwModeType; swModeIdx++)
{
const AddrSwizzleMode swMode = static_cast<AddrSwizzleMode>(swModeIdx);
+ // Iterate through the different bits-per-pixel settings (8bpp/16bpp/32bpp/64bpp/128bpp)
for (UINT_32 elemLog2 = 0; elemLog2 < MaxElementBytesLog2; elemLog2++)
{
UINT_32 equationIndex = ADDR_INVALID_EQUATION_INDEX;
+ // May or may not return a ADDR_SW_PATINFO for a completely different swizzle mode, essentially
+ // overwriting the choice.
const ADDR_SW_PATINFO* pPatInfo = GetSwizzlePatternInfo(swMode, rsrcType, elemLog2, 1);
if (pPatInfo != NULL)
{
ADDR_ASSERT(IsValidSwMode(swMode));
- if (pPatInfo->maxItemCount <= 3)
+ if (pPatInfo->maxItemCount <= 3) // Get a valid equationIndex
{
ADDR_EQUATION equation = {};
+ // Passing in pPatInfo to get the addr equation
ConvertSwizzlePatternToEquation(elemLog2, rsrcType, swMode, pPatInfo, &equation);
equationIndex = m_numEquations;
ADDR_ASSERT(equationIndex < EquationTableSize);
-
+ // Updates m_equationTable[m_numEquations] to be the addr equation for this PatInfo
m_equationTable[equationIndex] = equation;
-
+ // Increment m_numEquations
m_numEquations++;
}
- else
+ else // There is no equationIndex
{
// We only see "ill" equation from 64/128 BPE + 3D resource + SW_64KB_D_X under RB+ case
ADDR_ASSERT((elemLog2 == 3) || (elemLog2 == 4));
@@ -2033,7 +2042,8 @@ VOID Gfx10Lib::InitEquationTable()
ADDR_ASSERT(m_settings.supportRbPlus == 1);
}
}
-
+ // equationIndex, which is used to look up equations in m_equationTable, will be cached for every
+ // iteration in this nested for-loop
m_equationLookupTable[rsrcTypeIdx][swModeIdx][elemLog2] = equationIndex;
}
}
@@ -2756,7 +2766,7 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlComputeSurfaceInfoSanityCheck(
* Gfx10Lib::HwlGetPreferredSurfaceSetting
*
* @brief
-* Internal function to get suggested surface information for cliet to use
+* Internal function to get suggested surface information for client to use
*
* @return
* ADDR_E_RETURNCODE
@@ -3008,6 +3018,7 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlGetPreferredSurfaceSetting(
allowedSwModeSet.value &= GetValidDisplaySwizzleModes(bpp);
}
+
if (allowedSwModeSet.value != 0)
{
#if DEBUG
@@ -3077,11 +3088,13 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlGetPreferredSurfaceSetting(
allowedSwModeSet.swLinear = 0;
}
+ // A bitfield where each bit represents a block type. Each swizzle mode maps to a block.
ADDR2_BLOCK_SET allowedBlockSet = GetAllowedBlockSet(allowedSwModeSet, pOut->resourceType);
// Determine block size if there are 2 or more block type candidates
if (IsPow2(allowedBlockSet.value) == FALSE)
{
+ // Tracks a valid SwizzleMode for each valid block type
AddrSwizzleMode swMode[AddrBlockMaxTiledType] = {};
swMode[AddrBlockLinear] = ADDR_SW_LINEAR;
@@ -3104,16 +3117,18 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlGetPreferredSurfaceSetting(
swMode[AddrBlockThin64KB] = ADDR_SW_64KB_S;
}
+ // Tracks the size of each valid swizzle mode's surface in bytes
UINT_64 padSize[AddrBlockMaxTiledType] = {};
const UINT_32 ratioLow = computeMinSize ? 1 : (pIn->flags.opt4space ? 3 : 2);
const UINT_32 ratioHi = computeMinSize ? 1 : (pIn->flags.opt4space ? 2 : 1);
const UINT_64 sizeAlignInElement = Max(NextPow2(pIn->minSizeAlign) / (bpp >> 3), 1u);
- UINT_32 minSizeBlk = AddrBlockMicro;
- UINT_64 minSize = 0;
+ UINT_32 minSizeBlk = AddrBlockMicro; // Tracks the most optimal block to use
+ UINT_64 minSize = 0; // Tracks the minimum acceptable block type
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT localOut = {};
+ // Iterate through all block types
for (UINT_32 i = AddrBlockLinear; i < AddrBlockMaxTiledType; i++)
{
if (IsBlockTypeAvaiable(allowedBlockSet, static_cast<AddrBlockType>(i)))
@@ -3140,6 +3155,7 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlGetPreferredSurfaceSetting(
}
else
{
+ // Checks if the block type is within the memory budget but favors larger blocks
if (BlockTypeWithinMemoryBudget(
minSize,
padSize[i],
@@ -4073,6 +4089,8 @@ const ADDR_SW_PATINFO* Gfx10Lib::GetSwizzlePatternInfo(
UINT_32 numFrag ///< Number of fragment
) const
{
+ // Now elemLog2 is going to be used to access the correct index insode of the pPatInfo array so we will start from
+ // the right location
const UINT_32 index = IsXor(swizzleMode) ? (m_colorBaseIndex + elemLog2) : elemLog2;
const ADDR_SW_PATINFO* patInfo = NULL;
const UINT_32 swizzleMask = 1 << swizzleMode;
@@ -4135,8 +4153,15 @@ const ADDR_SW_PATINFO* Gfx10Lib::GetSwizzlePatternInfo(
{
if (IsRtOptSwizzle(swizzleMode))
{
- patInfo = m_settings.supportRbPlus ?
- GFX10_SW_64K_R_X_1xaa_RBPLUS_PATINFO : GFX10_SW_64K_R_X_1xaa_PATINFO;
+ if (swizzleMode == ADDR_SW_4KB_R_X)
+ {
+ patInfo = NULL;
+ }
+ else
+ {
+ patInfo = m_settings.supportRbPlus ?
+ GFX10_SW_64K_R_X_1xaa_RBPLUS_PATINFO : GFX10_SW_64K_R_X_1xaa_PATINFO;
+ }
}
else if (IsZOrderSwizzle(swizzleMode))
{
@@ -4230,6 +4255,10 @@ const ADDR_SW_PATINFO* Gfx10Lib::GetSwizzlePatternInfo(
patInfo = m_settings.supportRbPlus ?
GFX10_SW_4K_D_RBPLUS_PATINFO : GFX10_SW_4K_D_PATINFO;
}
+ else if (swizzleMode == ADDR_SW_4KB_R_X)
+ {
+ patInfo = NULL;
+ }
else
{
ADDR_ASSERT(swizzleMode == ADDR_SW_4KB_D_X);
diff --git a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.h b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.h
index a5f8424e8..d9c0d46c5 100644
--- a/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.h
+++ b/lib/mesa/src/amd/addrlib/src/gfx10/gfx10addrlib.h
@@ -58,8 +58,8 @@ struct Gfx10ChipSettings
UINT_32 supportRbPlus : 1;
UINT_32 dsMipmapHtileFix : 1;
UINT_32 dccUnsup3DSwDis : 1;
- UINT_32 : 2;
- UINT_32 reserved2 : 26;
+ UINT_32 : 3;
+ UINT_32 reserved2 : 25;
};
};
@@ -397,6 +397,12 @@ private:
UINT_32 log2Elem,
UINT_32 numFrag) const;
+ /**
+ * Will use the indices, "nibbles", to build an index equation inside pSwizzle
+ *
+ * @param pPatInfo Pointer to a patInfo. Contains indices mapping to the 2D nibble arrays which will be used to build an index equation.
+ * @param pSwizzle Array to write the index equation to.
+ */
VOID GetSwizzlePatternFromPatternInfo(
const ADDR_SW_PATINFO* pPatInfo,
ADDR_BIT_SETTING (&pSwizzle)[20]) const
diff --git a/lib/mesa/src/amd/addrlib/src/gfx11/gfx11SwizzlePattern.h b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11SwizzlePattern.h
new file mode 100644
index 000000000..54f62df8c
--- /dev/null
+++ b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11SwizzlePattern.h
@@ -0,0 +1,3057 @@
+/*
+************************************************************************************************************************
+*
+* Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE
+*
+***********************************************************************************************************************/
+
+/**
+************************************************************************************************************************
+* @file gfx11SwizzlePattern.h
+* @brief swizzle pattern for gfx11.
+************************************************************************************************************************
+*/
+
+#ifndef __GFX11_SWIZZLE_PATTERN_H__
+#define __GFX11_SWIZZLE_PATTERN_H__
+
+
+namespace Addr
+{
+namespace V2
+{
+const ADDR_SW_PATINFO GFX11_SW_256_D_PATINFO[] =
+{
+ { 1, 0, 0, 0, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256_D
+ { 1, 0, 0, 0, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256_D
+ { 1, 1, 0, 0, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256_D
+ { 1, 2, 0, 0, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256_D
+ { 1, 3, 0, 0, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256_D
+ { 1, 4, 0, 0, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256_D
+};
+
+const ADDR_SW_PATINFO GFX11_SW_4K_D_PATINFO[] =
+{
+ { 1, 0, 1, 0, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_4K_D
+ { 1, 0, 1, 0, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_4K_D
+ { 1, 1, 2, 0, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_4K_D
+ { 1, 2, 3, 0, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_4K_D
+ { 1, 3, 4, 0, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_4K_D
+ { 1, 4, 5, 0, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_4K_D
+};
+
+const ADDR_SW_PATINFO GFX11_SW_4K_D_X_PATINFO[] =
+{
+ { 1, 0, 1, 0, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_4K_D_X
+ { 1, 1, 2, 0, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_4K_D_X
+ { 1, 2, 3, 0, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_4K_D_X
+ { 1, 3, 4, 0, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_4K_D_X
+ { 1, 4, 5, 0, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 6, 0, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 7, 0, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 8, 0, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 9, 0, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 10, 0, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 11, 0, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 12, 0, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 13, 0, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 14, 0, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 15, 0, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 16, 0, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 17, 0, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 18, 0, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 19, 0, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 20, 0, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 21, 0, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 22, 0, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 23, 0, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 24, 0, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 25, 0, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 26, 0, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 27, 0, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 28, 0, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 29, 0, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 30, 0, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 31, 0, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 32, 0, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 33, 0, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 34, 0, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 35, 0, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 36, 0, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 37, 0, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 38, 0, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 39, 0, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 40, 0, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 41, 0, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 42, 0, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 43, 0, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 44, 0, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 45, 0, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 46, 0, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 47, 0, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 48, 0, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 49, 0, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 50, 0, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 51, 0, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 52, 0, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 53, 0, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 54, 0, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 55, 0, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 56, 0, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 57, 0, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 58, 0, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 59, 0, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 60, 0, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 61, 0, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 62, 0, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 63, 0, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 64, 0, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 65, 0, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 51, 0, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 52, 0, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 53, 0, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 54, 0, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 55, 0, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_4K_D_X
+ { 3, 0, 56, 0, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_4K_D_X
+ { 3, 1, 57, 0, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_4K_D_X
+ { 3, 2, 58, 0, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_4K_D_X
+ { 3, 3, 59, 0, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_4K_D_X
+ { 3, 4, 60, 0, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_4K_D_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_D_PATINFO[] =
+{
+ { 1, 0, 1, 1, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_D
+ { 1, 0, 1, 1, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_D
+ { 1, 1, 2, 2, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_D
+ { 1, 2, 3, 3, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_D
+ { 1, 3, 4, 4, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_D
+ { 1, 4, 5, 5, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_D
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_D_X_PATINFO[] =
+{
+ { 1, 0, 1, 1, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_D_X
+ { 1, 1, 2, 2, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_D_X
+ { 1, 2, 3, 3, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_D_X
+ { 1, 3, 4, 4, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_D_X
+ { 1, 4, 5, 5, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 6, 1, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 7, 2, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 8, 3, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 9, 4, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 10, 5, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 11, 1, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 12, 2, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 13, 3, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 14, 4, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 15, 5, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 16, 1, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 17, 2, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 18, 3, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 19, 4, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 20, 5, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 21, 1, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 22, 2, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 23, 3, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 24, 4, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 25, 5, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 26, 1, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 27, 2, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 28, 3, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 29, 4, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 30, 5, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 31, 1, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 32, 2, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 33, 3, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 34, 4, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 35, 5, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 36, 1, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 37, 2, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 38, 3, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 39, 4, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 40, 5, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 41, 1, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 42, 2, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 43, 3, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 44, 4, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 45, 5, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 66, 6, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 67, 7, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 68, 8, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 69, 9, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 70, 10, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 51, 1, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 52, 2, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 53, 3, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 54, 4, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 55, 5, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 71, 6, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 72, 7, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 73, 8, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 74, 9, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 75, 10, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 76, 11, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 77, 12, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 78, 13, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 79, 14, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 80, 15, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 81, 6, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 82, 7, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 83, 8, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 84, 9, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 85, 10, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_D_X
+ { 3, 0, 86, 11, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_D_X
+ { 3, 1, 87, 12, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_D_X
+ { 3, 2, 88, 13, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_D_X
+ { 3, 3, 89, 14, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_D_X
+ { 3, 4, 90, 15, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_D_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_D_T_PATINFO[] =
+{
+ { 1, 0, 1, 1, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_D_T
+ { 1, 1, 2, 2, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_D_T
+ { 1, 2, 3, 3, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_D_T
+ { 1, 3, 4, 4, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_D_T
+ { 1, 4, 5, 5, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 91, 1, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 92, 2, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 93, 3, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 94, 4, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 95, 5, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 96, 1, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 97, 2, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 98, 3, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 99, 4, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 100, 5, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 101, 1, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 102, 2, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 103, 3, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 104, 4, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 105, 5, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 96, 1, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 97, 2, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 98, 3, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 99, 4, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 100, 5, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 101, 1, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 102, 2, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 103, 3, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 104, 4, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 105, 5, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 106, 1, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 107, 2, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 108, 3, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 109, 4, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 110, 5, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 101, 1, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 102, 2, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 103, 3, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 104, 4, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 105, 5, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 106, 1, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 107, 2, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 108, 3, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 109, 4, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 110, 5, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 111, 16, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 112, 17, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 113, 18, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 114, 19, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 115, 20, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 106, 1, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 107, 2, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 108, 3, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 109, 4, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 110, 5, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 111, 16, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 112, 17, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 113, 18, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 114, 19, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 115, 20, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 1, 21, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 2, 22, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 3, 23, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 4, 24, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 5, 25, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 111, 16, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 112, 17, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 113, 18, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 114, 19, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 115, 20, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_D_T
+ { 2, 0, 1, 21, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_D_T
+ { 2, 1, 2, 22, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_D_T
+ { 2, 2, 3, 23, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_D_T
+ { 2, 3, 4, 24, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_D_T
+ { 2, 4, 5, 25, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_D_T
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_D_X_PATINFO[] =
+{
+ { 1, 0, 1, 1, 1, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_D_X
+ { 1, 1, 2, 2, 2, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_D_X
+ { 1, 2, 3, 3, 3, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_D_X
+ { 1, 3, 4, 4, 4, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_D_X
+ { 1, 4, 5, 5, 5, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 6, 1, 1, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 7, 2, 2, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 8, 3, 3, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 9, 4, 4, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 10, 5, 5, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 11, 1, 1, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 12, 2, 2, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 13, 3, 3, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 14, 4, 4, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 15, 5, 5, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 16, 1, 1, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 17, 2, 2, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 18, 3, 3, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 19, 4, 4, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 20, 5, 5, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 21, 1, 1, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 22, 2, 2, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 23, 3, 3, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 24, 4, 4, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 25, 5, 5, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 26, 1, 1, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 27, 2, 2, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 28, 3, 3, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 29, 4, 4, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 30, 5, 5, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 31, 1, 1, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 32, 2, 2, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 33, 3, 3, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 34, 4, 4, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 35, 5, 5, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 36, 1, 1, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 37, 2, 2, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 38, 3, 3, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 39, 4, 4, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 40, 5, 5, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 41, 1, 1, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 42, 2, 2, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 43, 3, 3, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 44, 4, 4, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 45, 5, 5, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 66, 6, 1, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 67, 7, 2, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 68, 8, 3, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 69, 9, 4, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 70, 10, 5, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 51, 1, 1, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 52, 2, 2, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 53, 3, 3, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 54, 4, 4, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 55, 5, 5, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 71, 6, 1, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 72, 7, 2, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 73, 8, 3, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 74, 9, 4, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 75, 10, 5, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 76, 11, 1, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 77, 12, 2, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 78, 13, 3, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 79, 14, 4, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 80, 15, 5, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 81, 6, 1, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 82, 7, 2, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 83, 8, 3, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 84, 9, 4, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 85, 10, 5, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_D_X
+ { 3, 0, 86, 11, 1, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_D_X
+ { 3, 1, 87, 12, 2, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_D_X
+ { 3, 2, 88, 13, 3, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_D_X
+ { 3, 3, 89, 14, 4, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_D_X
+ { 3, 4, 90, 15, 5, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_D_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_ZR_X_1xaa_PATINFO[] =
+{
+ { 2, 0, 116, 26, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 2, 1, 117, 22, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 2, 2, 118, 27, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 2, 3, 119, 28, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 2, 4, 120, 29, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 121, 30, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 122, 31, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 123, 32, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 124, 33, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 125, 34, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 126, 35, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 127, 36, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 128, 37, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 129, 38, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 130, 39, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 131, 40, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 132, 41, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 133, 42, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 134, 43, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 135, 44, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 136, 45, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 137, 46, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 138, 47, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 139, 48, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 140, 49, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 141, 40, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 142, 50, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 143, 51, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 144, 52, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 145, 53, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 146, 54, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 146, 55, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 146, 56, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 146, 57, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 146, 58, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 147, 59, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 148, 60, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 149, 61, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 150, 62, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 151, 63, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 152, 54, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 152, 64, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 152, 56, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 153, 57, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 153, 65, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 152, 66, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 152, 67, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 152, 68, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 153, 69, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 153, 70, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 154, 71, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 154, 72, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 154, 73, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 155, 74, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 156, 75, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 154, 76, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 154, 77, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 154, 78, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 155, 79, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 156, 80, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 154, 81, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 154, 82, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 154, 83, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 155, 84, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 156, 85, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 157, 86, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 157, 87, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 157, 88, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 158, 89, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 159, 90, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 0, 157, 91, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 1, 157, 92, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 2, 157, 93, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 3, 158, 94, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 1xaa
+ { 3, 4, 159, 95, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 1xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_ZR_X_2xaa_PATINFO[] =
+{
+ { 2, 5, 160, 96, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 2, 6, 118, 27, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 2, 7, 161, 97, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 2, 8, 119, 98, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 2, 9, 162, 99, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 163, 100, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 123, 32, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 123, 101, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 164, 102, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 125, 103, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 127, 104, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 128, 37, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 128, 105, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 165, 106, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 130, 107, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 132, 108, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 133, 51, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 133, 109, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 135, 110, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 135, 111, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 137, 112, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 138, 47, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 138, 113, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 139, 114, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 140, 115, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 142, 108, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 143, 51, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 143, 109, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 144, 116, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 145, 111, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 146, 117, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 146, 118, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 146, 119, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 166, 120, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 167, 121, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 148, 122, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 149, 61, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 149, 123, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 151, 124, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 168, 125, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 152, 55, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 152, 56, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 152, 126, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 153, 127, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 169, 127, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 152, 77, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 152, 78, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 152, 128, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 153, 80, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 169, 80, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 154, 72, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 154, 73, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 154, 129, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 156, 130, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 170, 130, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 154, 77, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 154, 78, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 154, 128, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 156, 131, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 170, 131, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 154, 132, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 154, 83, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 154, 133, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 156, 134, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 170, 134, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 157, 135, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 157, 88, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 157, 136, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 159, 90, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 171, 90, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 5, 157, 137, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 6, 157, 93, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 7, 157, 138, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 8, 159, 95, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 2xaa
+ { 3, 9, 171, 95, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 2xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_ZR_X_4xaa_PATINFO[] =
+{
+ { 2, 10, 118, 27, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 2, 11, 118, 139, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 2, 12, 118, 140, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 2, 13, 119, 141, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 2, 14, 120, 142, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 123, 32, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 172, 143, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 123, 144, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 124, 145, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 125, 146, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 128, 37, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 128, 147, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 128, 148, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 129, 149, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 130, 150, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 133, 42, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 133, 151, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 133, 152, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 134, 153, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 173, 154, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 138, 47, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 138, 155, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 138, 156, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 174, 157, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 175, 158, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 143, 51, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 143, 159, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 143, 160, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 145, 161, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 176, 162, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 146, 56, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 146, 163, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 146, 164, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 167, 165, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 177, 166, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 149, 61, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 149, 167, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 149, 168, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 178, 169, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 179, 170, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 152, 56, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 152, 163, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 152, 171, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 180, 171, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 181, 171, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 152, 68, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 152, 172, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 152, 173, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 180, 173, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 181, 173, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 154, 73, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 154, 174, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 154, 130, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 182, 130, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 183, 130, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 154, 78, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 154, 172, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 154, 131, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 182, 131, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 183, 131, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 154, 83, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 154, 133, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 154, 134, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 182, 134, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 183, 134, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 157, 88, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 157, 175, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 157, 90, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 184, 90, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 185, 90, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 10, 157, 93, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 11, 157, 176, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 12, 157, 95, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 13, 184, 95, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 4xaa
+ { 3, 14, 185, 95, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 4xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_ZR_X_8xaa_PATINFO[] =
+{
+ { 2, 15, 161, 97, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 2, 16, 118, 140, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 186, 177, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 187, 178, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 162, 179, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 123, 101, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 123, 144, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 188, 180, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 189, 181, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 190, 182, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 128, 105, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 128, 148, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 128, 183, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 165, 184, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 191, 185, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 133, 109, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 133, 186, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 133, 187, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 192, 188, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 193, 189, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 138, 113, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 138, 156, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 138, 190, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 194, 191, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 195, 192, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 143, 109, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 143, 160, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 143, 187, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 196, 193, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 197, 194, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 146, 126, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 146, 164, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 198, 195, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 199, 196, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 200, 197, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 149, 123, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 149, 168, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 149, 198, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 179, 170, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 201, 170, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 152, 126, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 152, 171, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 202, 199, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 181, 171, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 203, 171, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 152, 128, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 152, 173, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 202, 200, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 181, 173, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 203, 201, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 154, 129, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 154, 130, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 204, 202, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 183, 130, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 205, 130, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 154, 128, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 154, 131, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 206, 203, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 183, 131, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 205, 131, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 154, 133, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 154, 134, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 206, 204, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 183, 134, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 205, 134, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 157, 136, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 157, 90, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 207, 205, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 185, 90, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 208, 90, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 15, 157, 138, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 16, 157, 95, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 17, 171, 95, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 18, 185, 95, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_{Z,R}_X 8xaa
+ { 3, 19, 208, 95, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_{Z,R}_X 8xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_ZR_X_1xaa_PATINFO[] =
+{
+ { 2, 0, 116, 26, 6, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 2, 1, 117, 22, 2, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 2, 2, 118, 27, 7, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 2, 3, 119, 28, 4, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 2, 4, 120, 29, 8, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 121, 30, 6, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 122, 31, 9, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 123, 32, 7, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 124, 33, 10, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 125, 34, 8, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 126, 35, 6, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 127, 36, 9, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 128, 37, 7, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 129, 38, 10, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 130, 39, 8, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 131, 206, 11, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 132, 207, 12, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 133, 208, 13, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 134, 209, 14, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 135, 210, 15, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 136, 211, 16, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 137, 35, 17, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 138, 212, 18, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 139, 213, 19, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 140, 214, 20, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 141, 206, 11, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 142, 215, 21, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 143, 216, 13, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 144, 217, 22, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 145, 218, 15, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 146, 219, 23, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 146, 220, 24, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 146, 221, 25, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 146, 222, 26, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 146, 223, 27, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 147, 224, 28, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 148, 225, 29, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 149, 226, 30, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 150, 227, 31, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 151, 228, 32, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 152, 219, 23, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 152, 229, 33, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 152, 221, 25, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 153, 222, 34, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 153, 230, 27, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 152, 231, 23, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 152, 232, 33, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 152, 233, 25, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 153, 234, 34, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 153, 235, 35, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 154, 236, 36, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 154, 237, 37, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 154, 238, 38, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 155, 239, 39, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 155, 240, 40, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 154, 241, 23, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 154, 242, 24, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 154, 243, 25, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 155, 244, 41, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 155, 245, 42, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 154, 81, 23, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 154, 82, 24, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 154, 83, 25, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 155, 246, 43, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 155, 247, 44, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 157, 248, 45, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 157, 249, 46, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 157, 250, 47, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 209, 251, 48, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 209, 252, 49, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 0, 157, 91, 23, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 1, 157, 92, 33, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 2, 157, 93, 25, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 3, 209, 253, 43, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 1xaa
+ { 3, 4, 209, 254, 50, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 1xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_ZR_X_2xaa_PATINFO[] =
+{
+ { 2, 5, 160, 96, 51, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 2, 6, 118, 27, 7, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 2, 7, 210, 255, 52, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 2, 8, 120, 29, 8, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 2, 9, 211, 256, 53, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 163, 100, 51, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 123, 32, 7, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 212, 257, 52, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 125, 34, 8, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 213, 258, 53, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 127, 104, 51, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 128, 37, 7, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 129, 259, 52, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 130, 39, 8, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 214, 260, 53, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 132, 261, 54, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 133, 216, 13, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 134, 262, 55, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 135, 263, 15, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 215, 264, 56, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 137, 265, 16, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 138, 212, 18, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 139, 266, 18, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 140, 214, 20, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 216, 267, 20, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 142, 261, 54, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 143, 216, 13, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 144, 262, 55, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 145, 218, 15, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 217, 268, 56, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 146, 269, 57, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 146, 270, 25, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 146, 271, 41, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 146, 272, 58, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 146, 273, 59, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 148, 274, 60, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 149, 226, 30, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 218, 275, 61, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 151, 228, 32, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 219, 276, 62, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 152, 277, 57, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 152, 221, 25, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 152, 278, 41, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 153, 230, 27, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 153, 279, 63, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 152, 280, 57, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 152, 243, 25, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 152, 281, 41, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 153, 282, 64, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 153, 283, 65, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 154, 284, 37, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 154, 238, 38, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 154, 239, 66, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 155, 240, 40, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 155, 273, 67, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 154, 280, 57, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 154, 243, 25, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 154, 281, 41, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 155, 245, 42, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 155, 285, 68, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 154, 82, 24, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 154, 83, 25, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 154, 286, 43, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 155, 247, 44, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 155, 287, 69, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 157, 288, 70, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 157, 250, 47, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 157, 289, 71, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 158, 290, 72, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 158, 291, 73, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 5, 157, 92, 24, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 6, 157, 93, 25, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 7, 157, 292, 43, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 8, 158, 293, 50, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 2xaa
+ { 3, 9, 158, 294, 74, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 2xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_ZR_X_4xaa_PATINFO[] =
+{
+ { 2, 10, 118, 27, 7, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 2, 11, 119, 28, 4, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 2, 12, 120, 29, 8, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 2, 13, 220, 295, 75, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 2, 14, 221, 296, 76, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 123, 32, 7, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 124, 33, 10, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 125, 34, 8, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 222, 297, 77, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 223, 298, 76, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 128, 37, 7, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 129, 38, 10, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 130, 39, 8, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 224, 299, 77, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 225, 300, 76, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 133, 208, 13, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 134, 209, 14, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 135, 210, 15, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 215, 301, 78, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 226, 302, 79, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 138, 212, 18, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 139, 213, 19, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 140, 214, 20, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 216, 299, 80, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 227, 303, 81, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 143, 216, 13, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 144, 217, 22, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 145, 218, 15, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 217, 304, 82, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 228, 305, 83, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 146, 221, 25, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 146, 222, 26, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 146, 223, 27, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 146, 306, 84, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 146, 307, 85, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 149, 226, 30, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 218, 227, 86, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 168, 228, 87, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 219, 301, 62, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 229, 308, 88, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 152, 221, 25, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 152, 222, 34, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 152, 230, 27, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 153, 306, 84, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 153, 309, 89, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 152, 233, 25, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 152, 234, 34, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 152, 235, 35, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 153, 310, 90, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 153, 311, 91, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 154, 238, 38, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 154, 239, 66, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 154, 240, 92, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 156, 312, 93, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 156, 313, 94, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 154, 243, 25, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 154, 281, 41, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 154, 314, 42, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 156, 315, 95, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 156, 316, 96, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 154, 83, 25, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 154, 286, 43, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 154, 317, 44, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 156, 318, 97, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 156, 319, 68, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 157, 250, 47, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 157, 289, 71, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 157, 320, 98, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 159, 321, 99, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 159, 322, 100, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 10, 157, 93, 25, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 11, 157, 292, 43, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 12, 157, 323, 50, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 13, 159, 324, 74, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 4xaa
+ { 3, 14, 159, 325, 101, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 4xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_ZR_X_8xaa_PATINFO[] =
+{
+ { 2, 15, 210, 255, 52, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 2, 16, 120, 29, 8, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 2, 17, 211, 256, 53, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 2, 18, 221, 296, 76, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 2, 19, 230, 326, 102, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 212, 257, 52, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 125, 34, 8, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 213, 258, 53, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 223, 298, 76, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 231, 327, 103, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 129, 259, 52, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 130, 39, 8, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 214, 260, 53, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 225, 300, 76, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 232, 328, 103, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 134, 262, 55, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 135, 263, 15, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 215, 264, 56, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 226, 302, 104, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 233, 329, 105, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 139, 266, 18, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 140, 214, 20, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 216, 267, 20, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 227, 303, 81, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 234, 330, 106, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 144, 262, 55, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 145, 218, 15, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 217, 268, 56, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 228, 305, 83, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 235, 331, 107, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 146, 271, 41, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 146, 272, 58, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 146, 273, 59, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 236, 332, 108, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 237, 333, 109, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 218, 275, 61, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 168, 228, 87, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 238, 276, 110, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 239, 308, 111, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 239, 334, 112, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 152, 278, 41, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 152, 230, 27, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 152, 279, 63, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 240, 309, 89, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 241, 335, 113, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 152, 281, 41, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 152, 282, 64, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 152, 283, 65, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 240, 311, 91, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 241, 336, 89, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 154, 239, 66, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 154, 240, 92, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 154, 273, 63, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 242, 313, 94, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 243, 337, 114, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 154, 281, 41, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 154, 314, 42, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 154, 338, 68, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 242, 316, 96, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 243, 339, 115, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 154, 286, 43, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 154, 317, 44, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 154, 340, 68, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 242, 341, 116, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 243, 342, 115, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 157, 289, 71, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 157, 320, 98, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 157, 343, 117, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 244, 322, 100, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 245, 344, 118, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 15, 157, 292, 43, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 16, 157, 323, 50, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 17, 157, 345, 119, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 18, 244, 325, 101, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_{Z,R}_X 8xaa
+ { 3, 19, 245, 346, 120, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_{Z,R}_X 8xaa
+};
+
+const ADDR_SW_PATINFO GFX11_SW_4K_S3_PATINFO[] =
+{
+ { 1, 20, 246, 0, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_4K_S3
+ { 1, 20, 246, 0, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_4K_S3
+ { 1, 21, 247, 0, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_4K_S3
+ { 1, 22, 248, 0, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_4K_S3
+ { 1, 23, 249, 0, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_4K_S3
+ { 1, 24, 250, 0, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_4K_S3
+};
+
+const ADDR_SW_PATINFO GFX11_SW_4K_S3_X_PATINFO[] =
+{
+ { 1, 20, 246, 0, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_4K_S3_X
+ { 1, 21, 247, 0, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_4K_S3_X
+ { 1, 22, 248, 0, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_4K_S3_X
+ { 1, 23, 249, 0, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_4K_S3_X
+ { 1, 24, 250, 0, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 251, 0, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 252, 0, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 253, 0, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 254, 0, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 255, 0, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 256, 0, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 257, 0, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 258, 0, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 259, 0, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 260, 0, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 261, 0, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 262, 0, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 263, 0, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 264, 0, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 265, 0, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 256, 0, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 257, 0, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 258, 0, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 259, 0, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 260, 0, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 261, 0, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 262, 0, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 263, 0, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 264, 0, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 265, 0, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 261, 0, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 262, 0, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 263, 0, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 264, 0, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 265, 0, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_4K_S3_X
+ { 3, 20, 266, 0, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_4K_S3_X
+ { 3, 21, 267, 0, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_4K_S3_X
+ { 3, 22, 268, 0, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_4K_S3_X
+ { 3, 23, 269, 0, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_4K_S3_X
+ { 3, 24, 270, 0, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_4K_S3_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_S3_PATINFO[] =
+{
+ { 1, 20, 246, 347, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_S3
+ { 1, 20, 246, 347, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_S3
+ { 1, 21, 247, 348, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_S3
+ { 1, 22, 248, 349, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_S3
+ { 1, 23, 249, 350, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_S3
+ { 1, 24, 250, 351, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_S3
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_S3_X_PATINFO[] =
+{
+ { 1, 20, 246, 347, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_S3_X
+ { 1, 21, 247, 348, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_S3_X
+ { 1, 22, 248, 349, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_S3_X
+ { 1, 23, 249, 350, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_S3_X
+ { 1, 24, 250, 351, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 251, 347, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 252, 348, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 253, 349, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 254, 350, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 255, 351, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 256, 347, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 257, 348, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 258, 349, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 259, 350, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 260, 351, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 261, 347, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 262, 348, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 263, 349, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 264, 350, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 265, 351, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 256, 347, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 257, 348, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 258, 349, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 259, 350, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 260, 351, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 261, 347, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 262, 348, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 263, 349, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 264, 350, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 265, 351, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 266, 347, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 267, 348, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 268, 349, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 269, 350, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 270, 351, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 261, 347, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 262, 348, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 263, 349, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 264, 350, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 265, 351, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 266, 347, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 267, 348, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 268, 349, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 269, 350, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 270, 351, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 271, 352, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 272, 353, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 273, 354, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 274, 355, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 275, 356, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 266, 347, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 267, 348, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 268, 349, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 269, 350, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 270, 351, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 271, 352, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 272, 353, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 273, 354, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 274, 355, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 275, 356, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 276, 357, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 277, 358, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 278, 359, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 279, 360, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 280, 361, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 271, 352, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 272, 353, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 273, 354, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 274, 355, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 275, 356, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_S3_X
+ { 3, 20, 276, 357, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_S3_X
+ { 3, 21, 277, 358, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_S3_X
+ { 3, 22, 278, 359, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_S3_X
+ { 3, 23, 279, 360, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_S3_X
+ { 3, 24, 280, 361, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_S3_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_S3_T_PATINFO[] =
+{
+ { 1, 20, 246, 347, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_S3_T
+ { 1, 21, 247, 348, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_S3_T
+ { 1, 22, 248, 349, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_S3_T
+ { 1, 23, 249, 350, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_S3_T
+ { 1, 24, 250, 351, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 251, 347, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 252, 348, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 253, 349, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 254, 350, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 255, 351, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 256, 347, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 257, 348, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 258, 349, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 259, 350, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 260, 351, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 281, 347, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 282, 348, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 283, 349, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 284, 350, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 285, 351, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 256, 347, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 257, 348, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 258, 349, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 259, 350, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 260, 351, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 281, 347, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 282, 348, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 283, 349, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 284, 350, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 285, 351, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 286, 347, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 287, 348, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 288, 349, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 289, 350, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 290, 351, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 281, 347, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 282, 348, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 283, 349, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 284, 350, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 285, 351, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 286, 347, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 287, 348, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 288, 349, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 289, 350, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 290, 351, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 291, 352, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 292, 353, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 293, 354, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 294, 355, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 295, 356, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 286, 347, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 287, 348, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 288, 349, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 289, 350, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 290, 351, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 291, 352, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 292, 353, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 293, 354, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 294, 355, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 295, 356, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 246, 362, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 247, 363, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 248, 364, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 249, 365, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 250, 366, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 291, 352, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 292, 353, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 293, 354, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 294, 355, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 295, 356, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_S3_T
+ { 3, 20, 246, 362, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_S3_T
+ { 3, 21, 247, 363, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_S3_T
+ { 3, 22, 248, 364, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_S3_T
+ { 3, 23, 249, 365, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_S3_T
+ { 3, 24, 250, 366, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_S3_T
+};
+
+const ADDR_SW_PATINFO GFX11_SW_256K_S3_X_PATINFO[] =
+{
+ { 1, 20, 246, 347, 121, } , // 1 pipes (1 PKRs) 1 bpe @ SW_256K_S3_X
+ { 1, 21, 247, 348, 121, } , // 1 pipes (1 PKRs) 2 bpe @ SW_256K_S3_X
+ { 1, 22, 248, 349, 122, } , // 1 pipes (1 PKRs) 4 bpe @ SW_256K_S3_X
+ { 1, 23, 249, 350, 123, } , // 1 pipes (1 PKRs) 8 bpe @ SW_256K_S3_X
+ { 1, 24, 250, 351, 123, } , // 1 pipes (1 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 251, 347, 121, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 252, 348, 121, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 253, 349, 122, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 254, 350, 123, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 255, 351, 123, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 256, 347, 121, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 257, 348, 121, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 258, 349, 122, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 259, 350, 123, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 260, 351, 123, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 261, 347, 121, } , // 8 pipes (2 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 262, 348, 121, } , // 8 pipes (2 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 263, 349, 122, } , // 8 pipes (2 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 264, 350, 123, } , // 8 pipes (2 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 265, 351, 123, } , // 8 pipes (2 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 256, 347, 121, } , // 4 pipes (4 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 257, 348, 121, } , // 4 pipes (4 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 258, 349, 122, } , // 4 pipes (4 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 259, 350, 123, } , // 4 pipes (4 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 260, 351, 123, } , // 4 pipes (4 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 261, 347, 121, } , // 8 pipes (4 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 262, 348, 121, } , // 8 pipes (4 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 263, 349, 122, } , // 8 pipes (4 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 264, 350, 123, } , // 8 pipes (4 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 265, 351, 123, } , // 8 pipes (4 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 266, 347, 121, } , // 16 pipes (4 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 267, 348, 121, } , // 16 pipes (4 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 268, 349, 122, } , // 16 pipes (4 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 269, 350, 123, } , // 16 pipes (4 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 270, 351, 123, } , // 16 pipes (4 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 261, 347, 121, } , // 8 pipes (8 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 262, 348, 121, } , // 8 pipes (8 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 263, 349, 122, } , // 8 pipes (8 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 264, 350, 123, } , // 8 pipes (8 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 265, 351, 123, } , // 8 pipes (8 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 266, 347, 121, } , // 16 pipes (8 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 267, 348, 121, } , // 16 pipes (8 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 268, 349, 122, } , // 16 pipes (8 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 269, 350, 123, } , // 16 pipes (8 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 270, 351, 123, } , // 16 pipes (8 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 271, 352, 121, } , // 32 pipes (8 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 272, 353, 121, } , // 32 pipes (8 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 273, 354, 122, } , // 32 pipes (8 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 274, 355, 123, } , // 32 pipes (8 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 275, 356, 123, } , // 32 pipes (8 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 266, 347, 121, } , // 16 pipes (16 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 267, 348, 121, } , // 16 pipes (16 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 268, 349, 122, } , // 16 pipes (16 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 269, 350, 123, } , // 16 pipes (16 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 270, 351, 123, } , // 16 pipes (16 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 271, 352, 121, } , // 32 pipes (16 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 272, 353, 121, } , // 32 pipes (16 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 273, 354, 122, } , // 32 pipes (16 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 274, 355, 123, } , // 32 pipes (16 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 275, 356, 123, } , // 32 pipes (16 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 276, 357, 121, } , // 64 pipes (16 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 277, 358, 121, } , // 64 pipes (16 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 278, 359, 122, } , // 64 pipes (16 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 279, 360, 123, } , // 64 pipes (16 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 280, 361, 123, } , // 64 pipes (16 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 271, 352, 121, } , // 32 pipes (32 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 272, 353, 121, } , // 32 pipes (32 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 273, 354, 122, } , // 32 pipes (32 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 274, 355, 123, } , // 32 pipes (32 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 275, 356, 123, } , // 32 pipes (32 PKRs) 16 bpe @ SW_256K_S3_X
+ { 3, 20, 276, 357, 121, } , // 64 pipes (32 PKRs) 1 bpe @ SW_256K_S3_X
+ { 3, 21, 277, 358, 121, } , // 64 pipes (32 PKRs) 2 bpe @ SW_256K_S3_X
+ { 3, 22, 278, 359, 122, } , // 64 pipes (32 PKRs) 4 bpe @ SW_256K_S3_X
+ { 3, 23, 279, 360, 123, } , // 64 pipes (32 PKRs) 8 bpe @ SW_256K_S3_X
+ { 3, 24, 280, 361, 123, } , // 64 pipes (32 PKRs) 16 bpe @ SW_256K_S3_X
+};
+
+const ADDR_SW_PATINFO GFX11_SW_64K_D3_X_PATINFO[] =
+{
+ { 1, 20, 246, 347, 0, } , // 1 pipes (1 PKRs) 1 bpe @ SW_64K_D3_X
+ { 1, 21, 247, 348, 0, } , // 1 pipes (1 PKRs) 2 bpe @ SW_64K_D3_X
+ { 1, 22, 248, 349, 0, } , // 1 pipes (1 PKRs) 4 bpe @ SW_64K_D3_X
+ { 1, 23, 249, 350, 0, } , // 1 pipes (1 PKRs) 8 bpe @ SW_64K_D3_X
+ { 1, 24, 250, 351, 0, } , // 1 pipes (1 PKRs) 16 bpe @ SW_64K_D3_X
+ { 2, 20, 296, 367, 0, } , // 2 pipes (1-2 PKRs) 1 bpe @ SW_64K_D3_X
+ { 2, 21, 296, 368, 0, } , // 2 pipes (1-2 PKRs) 2 bpe @ SW_64K_D3_X
+ { 2, 22, 297, 369, 0, } , // 2 pipes (1-2 PKRs) 4 bpe @ SW_64K_D3_X
+ { 2, 23, 298, 351, 0, } , // 2 pipes (1-2 PKRs) 8 bpe @ SW_64K_D3_X
+ { 3, 24, 299, 351, 0, } , // 2 pipes (1-2 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 300, 370, 0, } , // 4 pipes (1-2 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 300, 371, 0, } , // 4 pipes (1-2 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 301, 372, 0, } , // 4 pipes (1-2 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 302, 373, 0, } , // 4 pipes (1-2 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 303, 373, 0, } , // 4 pipes (1-2 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 304, 370, 0, } , // 8 pipes (2 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 304, 371, 0, } , // 8 pipes (2 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 305, 372, 0, } , // 8 pipes (2 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 306, 373, 0, } , // 8 pipes (2 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 307, 373, 0, } , // 8 pipes (2 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 308, 374, 0, } , // 4 pipes (4 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 309, 375, 0, } , // 4 pipes (4 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 310, 376, 0, } , // 4 pipes (4 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 311, 377, 0, } , // 4 pipes (4 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 312, 378, 0, } , // 4 pipes (4 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 313, 379, 0, } , // 8 pipes (4 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 314, 371, 0, } , // 8 pipes (4 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 315, 372, 0, } , // 8 pipes (4 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 316, 373, 0, } , // 8 pipes (4 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 317, 373, 0, } , // 8 pipes (4 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 318, 380, 0, } , // 16 pipes (4 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 319, 371, 0, } , // 16 pipes (4 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 320, 372, 0, } , // 16 pipes (4 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 321, 373, 0, } , // 16 pipes (4 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 322, 373, 0, } , // 16 pipes (4 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 323, 381, 0, } , // 8 pipes (8 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 323, 382, 0, } , // 8 pipes (8 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 323, 383, 0, } , // 8 pipes (8 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 324, 384, 0, } , // 8 pipes (8 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 325, 384, 0, } , // 8 pipes (8 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 326, 379, 0, } , // 16 pipes (8 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 327, 371, 0, } , // 16 pipes (8 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 328, 372, 0, } , // 16 pipes (8 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 329, 373, 0, } , // 16 pipes (8 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 330, 373, 0, } , // 16 pipes (8 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 326, 385, 0, } , // 32 pipes (8 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 331, 386, 0, } , // 32 pipes (8 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 331, 387, 0, } , // 32 pipes (8 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 332, 388, 0, } , // 32 pipes (8 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 333, 388, 0, } , // 32 pipes (8 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 334, 389, 0, } , // 16 pipes (16 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 335, 390, 0, } , // 16 pipes (16 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 336, 391, 0, } , // 16 pipes (16 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 337, 392, 0, } , // 16 pipes (16 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 338, 392, 0, } , // 16 pipes (16 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 334, 393, 0, } , // 32 pipes (16 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 335, 394, 0, } , // 32 pipes (16 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 336, 395, 0, } , // 32 pipes (16 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 337, 396, 0, } , // 32 pipes (16 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 338, 396, 0, } , // 32 pipes (16 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 334, 397, 0, } , // 64 pipes (16 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 339, 398, 0, } , // 64 pipes (16 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 339, 399, 0, } , // 64 pipes (16 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 340, 400, 0, } , // 64 pipes (16 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 341, 400, 0, } , // 64 pipes (16 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 342, 401, 0, } , // 32 pipes (32 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 343, 402, 0, } , // 32 pipes (32 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 344, 403, 0, } , // 32 pipes (32 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 345, 404, 0, } , // 32 pipes (32 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 346, 404, 0, } , // 32 pipes (32 PKRs) 16 bpe @ SW_64K_D3_X
+ { 3, 20, 342, 405, 0, } , // 64 pipes (32 PKRs) 1 bpe @ SW_64K_D3_X
+ { 3, 21, 343, 406, 0, } , // 64 pipes (32 PKRs) 2 bpe @ SW_64K_D3_X
+ { 3, 22, 344, 407, 0, } , // 64 pipes (32 PKRs) 4 bpe @ SW_64K_D3_X
+ { 4, 23, 345, 408, 0, } , // 64 pipes (32 PKRs) 8 bpe @ SW_64K_D3_X
+ { 4, 24, 346, 408, 0, } , // 64 pipes (32 PKRs) 16 bpe @ SW_64K_D3_X
+};
+
+
+const UINT_64 GFX11_SW_PATTERN_NIBBLE01[][8] =
+{
+ {X0, X1, Y0, X2, Y1, Y2, X3, Y3, }, // 0
+ {0, X0, Y0, X1, Y1, X2, Y2, X3, }, // 1
+ {0, 0, X0, Y0, X1, Y1, X2, Y2, }, // 2
+ {0, 0, 0, X0, Y0, X1, X2, Y1, }, // 3
+ {0, 0, 0, 0, X0, Y0, X1, Y1, }, // 4
+ {S0, X0, Y0, X1, Y1, X2, Y2, X3, }, // 5
+ {0, S0, X0, Y0, X1, Y1, X2, Y2, }, // 6
+ {0, 0, S0, X0, Y0, X1, Y1, X2, }, // 7
+ {0, 0, 0, S0, X0, Y0, X1, Y1, }, // 8
+ {0, 0, 0, 0, S0, X0, Y0, X1, }, // 9
+ {S0, S1, X0, Y0, X1, Y1, X2, Y2, }, // 10
+ {0, S0, S1, X0, Y0, X1, Y1, X2, }, // 11
+ {0, 0, S0, S1, X0, Y0, X1, Y1, }, // 12
+ {0, 0, 0, S0, S1, X0, Y0, X1, }, // 13
+ {0, 0, 0, 0, S0, S1, X0, Y0, }, // 14
+ {S0, S1, S2, X0, Y0, X1, Y1, X2, }, // 15
+ {0, S0, S1, S2, X0, Y0, X1, Y1, }, // 16
+ {0, 0, S0, S1, S2, X0, Y0, X1, }, // 17
+ {0, 0, 0, S0, S1, S2, X0, Y0, }, // 18
+ {0, 0, 0, 0, S0, S1, S2, X0, }, // 19
+ {X0, X1, Z0, Y0, Y1, Z1, X2, Z2, }, // 20
+ {0, X0, Z0, Y0, X1, Z1, Y1, Z2, }, // 21
+ {0, 0, X0, Y0, X1, Z0, Y1, Z1, }, // 22
+ {0, 0, 0, X0, Y0, Z0, X1, Z1, }, // 23
+ {0, 0, 0, 0, X0, Z0, Y0, Z1, }, // 24
+};
+
+const UINT_64 GFX11_SW_PATTERN_NIBBLE2[][4] =
+{
+ {0, 0, 0, 0, }, // 0
+ {Y4, X4, Y5, X5, }, // 1
+ {Y3, X4, Y4, X5, }, // 2
+ {Y3, X3, Y4, X4, }, // 3
+ {Y2, X3, Y3, X4, }, // 4
+ {Y2, X2, Y3, X3, }, // 5
+ {Z0^X4^Y4, X4, Y5, X5, }, // 6
+ {Z0^Y3^X4, X4, Y4, X5, }, // 7
+ {Z0^X3^Y3, X3, Y4, X4, }, // 8
+ {Z0^Y2^X3, X3, Y3, X4, }, // 9
+ {Z0^X2^Y2, X2, Y3, X3, }, // 10
+ {Y4^X5, Z0^X4^Y5, Y5, X5, }, // 11
+ {Y3^X5, Z0^X4^Y4, Y4, X5, }, // 12
+ {Y3^X4, Z0^X3^Y4, Y4, X4, }, // 13
+ {Y2^X4, Z0^X3^Y3, Y3, X4, }, // 14
+ {Y2^X3, Z0^X2^Y3, Y3, X3, }, // 15
+ {Y4^X6, X4^Y6, Z0^X5^Y5, X5, }, // 16
+ {Y3^X6, X4^Y5, Z0^Y4^X5, X5, }, // 17
+ {Y3^X5, X3^Y5, Z0^X4^Y4, X4, }, // 18
+ {Y2^X5, X3^Y4, Z0^Y3^X4, X4, }, // 19
+ {Y2^X4, X2^Y4, Z0^X3^Y3, X3, }, // 20
+ {Z1^Y4^X5, Z0^X4^Y5, Y5, X5, }, // 21
+ {Z1^Y3^X5, Z0^X4^Y4, Y4, X5, }, // 22
+ {Z1^Y3^X4, Z0^X3^Y4, Y4, X4, }, // 23
+ {Z1^Y2^X4, Z0^X3^Y3, Y3, X4, }, // 24
+ {Z1^Y2^X3, Z0^X2^Y3, Y3, X3, }, // 25
+ {Y4^X6, Z1^X4^Y6, Z0^X5^Y5, X5, }, // 26
+ {Y3^X6, Z1^X4^Y5, Z0^Y4^X5, X5, }, // 27
+ {Y3^X5, Z1^X3^Y5, Z0^X4^Y4, X4, }, // 28
+ {Y2^X5, Z1^X3^Y4, Z0^Y3^X4, X4, }, // 29
+ {Y2^X4, Z1^X2^Y4, Z0^X3^Y3, X3, }, // 30
+ {Y4^X7, X4^Y7, Z1^Y5^X6, Z0^X5^Y6, }, // 31
+ {Y3^X7, X4^Y6, Z1^Y4^X6, Z0^X5^Y5, }, // 32
+ {Y3^X6, X3^Y6, Z1^Y4^X5, Z0^X4^Y5, }, // 33
+ {Y2^X6, X3^Y5, Z1^Y3^X5, Z0^X4^Y4, }, // 34
+ {Y2^X5, X2^Y5, Z1^Y3^X4, Z0^X3^Y4, }, // 35
+ {Z2^Y4^X6, Z1^X4^Y6, Z0^X5^Y5, X5, }, // 36
+ {Z2^Y3^X6, Z1^X4^Y5, Z0^Y4^X5, X5, }, // 37
+ {Z2^Y3^X5, Z1^X3^Y5, Z0^X4^Y4, X4, }, // 38
+ {Y2^Z2^X5, Z1^X3^Y4, Z0^Y3^X4, X4, }, // 39
+ {Y2^Z2^X4, Z1^X2^Y4, Z0^X3^Y3, X3, }, // 40
+ {Y4^X7, Z2^X4^Y7, Z1^Y5^X6, Z0^X5^Y6, }, // 41
+ {Y3^X7, Z2^X4^Y6, Z1^Y4^X6, Z0^X5^Y5, }, // 42
+ {Y3^X6, Z2^X3^Y6, Z1^Y4^X5, Z0^X4^Y5, }, // 43
+ {Y2^X6, Z2^X3^Y5, Z1^Y3^X5, Z0^X4^Y4, }, // 44
+ {Y2^X5, X2^Z2^Y5, Z1^Y3^X4, Z0^X3^Y4, }, // 45
+ {Y4^X7, X4^Y7, Z2^Y5^X6, Z1^X5^Y6, }, // 46
+ {Y3^X7, X4^Y6, Z2^Y4^X6, Z1^X5^Y5, }, // 47
+ {Y3^X6, X3^Y6, Z2^Y4^X5, Z1^X4^Y5, }, // 48
+ {Y2^X6, X3^Y5, Z2^Y3^X5, Z1^X4^Y4, }, // 49
+ {Y2^X5, X2^Y5, Z2^Y3^X4, Z1^X3^Y4, }, // 50
+ {Z3^Y4^X7, Z2^X4^Y7, Z1^Y5^X6, Z0^X5^Y6, }, // 51
+ {Y3^Z3^X7, Z2^X4^Y6, Z1^Y4^X6, Z0^X5^Y5, }, // 52
+ {Y3^Z3^X6, Z2^X3^Y6, Z1^Y4^X5, Z0^X4^Y5, }, // 53
+ {Y2^Z3^X6, Z2^X3^Y5, Z1^Y3^X5, Z0^X4^Y4, }, // 54
+ {Y2^Z3^X5, X2^Z2^Y5, Z1^Y3^X4, Z0^X3^Y4, }, // 55
+ {Y4^X7, Z3^X4^Y7, Z2^Y5^X6, Z1^X5^Y6, }, // 56
+ {Y3^X7, Z3^X4^Y6, Z2^Y4^X6, Z1^X5^Y5, }, // 57
+ {Y3^X6, X3^Z3^Y6, Z2^Y4^X5, Z1^X4^Y5, }, // 58
+ {Y2^X6, X3^Z3^Y5, Z2^Y3^X5, Z1^X4^Y4, }, // 59
+ {Y2^X5, X2^Z3^Y5, Z2^Y3^X4, Z1^X3^Y4, }, // 60
+ {Y4^X7, X4^Y7, Z3^Y5^X6, Z2^X5^Y6, }, // 61
+ {Y3^X7, X4^Y6, Z3^Y4^X6, Z2^X5^Y5, }, // 62
+ {Y3^X6, X3^Y6, Z3^Y4^X5, Z2^X4^Y5, }, // 63
+ {Y2^X6, X3^Y5, Y3^Z3^X5, Z2^X4^Y4, }, // 64
+ {Y2^X5, X2^Y5, Y3^Z3^X4, Z2^X3^Y4, }, // 65
+ {Y4^X8, X4^Y8, Z2^Y5^X7, Z1^X5^Y7, }, // 66
+ {Y3^X8, X4^Y7, Z2^Y4^X7, Z1^X5^Y6, }, // 67
+ {Y3^X7, X3^Y7, Z2^Y4^X6, Z1^X4^Y6, }, // 68
+ {Y2^X7, X3^Y6, Z2^Y3^X6, Z1^X4^Y5, }, // 69
+ {Y2^X6, X2^Y6, Z2^Y3^X5, Z1^X3^Y5, }, // 70
+ {Y4^X8, Z3^X4^Y8, Z2^Y5^X7, Z1^X5^Y7, }, // 71
+ {Y3^X8, Z3^X4^Y7, Z2^Y4^X7, Z1^X5^Y6, }, // 72
+ {Y3^X7, X3^Z3^Y7, Z2^Y4^X6, Z1^X4^Y6, }, // 73
+ {Y2^X7, X3^Z3^Y6, Z2^Y3^X6, Z1^X4^Y5, }, // 74
+ {Y2^X6, X2^Z3^Y6, Z2^Y3^X5, Z1^X3^Y5, }, // 75
+ {Y4^X9, X4^Y9, Z3^Y5^X8, Z2^X5^Y8, }, // 76
+ {Y3^X9, X4^Y8, Z3^Y4^X8, Z2^X5^Y7, }, // 77
+ {Y3^X8, X3^Y8, Z3^Y4^X7, Z2^X4^Y7, }, // 78
+ {Y2^X8, X3^Y7, Y3^Z3^X7, Z2^X4^Y6, }, // 79
+ {Y2^X7, X2^Y7, Y3^Z3^X6, Z2^X3^Y6, }, // 80
+ {Y4^Z4^X8, Z3^X4^Y8, Z2^Y5^X7, Z1^X5^Y7, }, // 81
+ {Y3^Z4^X8, Z3^X4^Y7, Z2^Y4^X7, Z1^X5^Y6, }, // 82
+ {Y3^Z4^X7, X3^Z3^Y7, Z2^Y4^X6, Z1^X4^Y6, }, // 83
+ {Y2^Z4^X7, X3^Z3^Y6, Z2^Y3^X6, Z1^X4^Y5, }, // 84
+ {Y2^Z4^X6, X2^Z3^Y6, Z2^Y3^X5, Z1^X3^Y5, }, // 85
+ {Y4^X9, X4^Z4^Y9, Z3^Y5^X8, Z2^X5^Y8, }, // 86
+ {Y3^X9, X4^Z4^Y8, Z3^Y4^X8, Z2^X5^Y7, }, // 87
+ {Y3^X8, X3^Z4^Y8, Z3^Y4^X7, Z2^X4^Y7, }, // 88
+ {Y2^X8, X3^Z4^Y7, Y3^Z3^X7, Z2^X4^Y6, }, // 89
+ {Y2^X7, X2^Z4^Y7, Y3^Z3^X6, Z2^X3^Y6, }, // 90
+ {X4^Y4, X4, Y5, X5, }, // 91
+ {Y3^X4, X4, Y4, X5, }, // 92
+ {X3^Y3, X3, Y4, X4, }, // 93
+ {Y2^X3, X3, Y3, X4, }, // 94
+ {X2^Y2, X2, Y3, X3, }, // 95
+ {Y4^X5, X4^Y5, Y5, X5, }, // 96
+ {Y3^X5, X4^Y4, Y4, X5, }, // 97
+ {Y3^X4, X3^Y4, Y4, X4, }, // 98
+ {Y2^X4, X3^Y3, Y3, X4, }, // 99
+ {Y2^X3, X2^Y3, Y3, X3, }, // 100
+ {Y4^X6, X4^Y6, X5^Y5, X5, }, // 101
+ {Y3^X6, X4^Y5, Y4^X5, X5, }, // 102
+ {Y3^X5, X3^Y5, X4^Y4, X4, }, // 103
+ {Y2^X5, X3^Y4, Y3^X4, X4, }, // 104
+ {Y2^X4, X2^Y4, X3^Y3, X3, }, // 105
+ {Y4^X7, X4^Y7, Y5^X6, X5^Y6, }, // 106
+ {Y3^X7, X4^Y6, Y4^X6, X5^Y5, }, // 107
+ {Y3^X6, X3^Y6, Y4^X5, X4^Y5, }, // 108
+ {Y2^X6, X3^Y5, Y3^X5, X4^Y4, }, // 109
+ {Y2^X5, X2^Y5, Y3^X4, X3^Y4, }, // 110
+ {Y4, X4, Y5^X7, X5^Y7, }, // 111
+ {Y3, X4, Y4^X7, X5^Y6, }, // 112
+ {Y3, X3, Y4^X6, X4^Y6, }, // 113
+ {Y2, X3, Y3^X6, X4^Y5, }, // 114
+ {Y2, X2, Y3^X5, X3^Y5, }, // 115
+ {X4, Y4, X5^Y8, Y5^X8, }, // 116
+ {Y3, X4, Y4^X8, X5^Y7, }, // 117
+ {X3, Y3, X4^Y7, Y4^X7, }, // 118
+ {Y2, X3, Y3^X7, X4^Y7, }, // 119
+ {X2, Y2, X3^Y7, Y3^X6, }, // 120
+ {Z0^X4^Y4, Y4, X5, Y5^X9, }, // 121
+ {Z0^X4^Y4, Y3, Y4, X5^Y8, }, // 122
+ {Z0^X4^Y4, X3, Y3, Y4^X8, }, // 123
+ {Z0^X4^Y4, Y2, X3, Y3^X8, }, // 124
+ {Z0^X4^Y4, X2, Y2, Y3^X7, }, // 125
+ {Y4^X5^Y5, Z0^X4^Y4, X5, Y5, }, // 126
+ {Y4^X5^Y5, Z0^X4^Y4, Y3, X5, }, // 127
+ {Y4^X5^Y5, Z0^X4^Y4, X3, Y3, }, // 128
+ {Y4^X5^Y5, Z0^X4^Y4, Y2, X3, }, // 129
+ {Y4^X5^Y5, Z0^X4^Y4, X2, Y2, }, // 130
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y5, }, // 131
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y3, }, // 132
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, X3, }, // 133
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y2, }, // 134
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, X2, }, // 135
+ {Y4^X6^Y6, Z1^X4^Y4, X5, X6, }, // 136
+ {Y4^X6^Y6, Z1^X4^Y4, Y3, X5, }, // 137
+ {Y4^X6^Y6, Z1^X4^Y4, X3, Y3, }, // 138
+ {Y4^X6^Y6, Z1^X4^Y4, Y2, X3, }, // 139
+ {Y4^X6^Y6, Z1^X4^Y4, X2, Y2, }, // 140
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5, }, // 141
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y3, }, // 142
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X3, }, // 143
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y2, }, // 144
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X2, }, // 145
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, }, // 146
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X6, }, // 147
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y3, }, // 148
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X3, }, // 149
+ {Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Y2, }, // 150
+ {Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, X2, }, // 151
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, }, // 152
+ {Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, }, // 153
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, }, // 154
+ {Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, }, // 155
+ {Y4^X8^Y8, Z2^X4^Y4, Z1^Y5^X7, Z0^X5^Y7, }, // 156
+ {Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, }, // 157
+ {Y4^X9^Y9, Z3^X4^Y4, Z2^Y5^X8, Z1^X5^Y8, }, // 158
+ {Y4^X9^Y9, Z2^X4^Y4, Z1^Y5^X8, Z0^X5^Y8, }, // 159
+ {Y3, X4, Y4^X8, Y5^X7, }, // 160
+ {X3, Y3, Y4^X7, X4^Y7, }, // 161
+ {X2, Y2, Y3^X6, X3^Y7, }, // 162
+ {Z0^X4^Y4, Y3, Y4, Y5^X8, }, // 163
+ {Z0^X4^Y4, X2, X3, Y3^X8, }, // 164
+ {Y4^X5^Y5, Z0^X4^Y4, X2, X3, }, // 165
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X2^X5^Y6, }, // 166
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y1^X5^Y6, }, // 167
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X2, }, // 168
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y1^X5^Y6, }, // 169
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, Y1^X5^Y7, }, // 170
+ {Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, Y1^X5^Y8, }, // 171
+ {Z0^X4^Y4, X3, Y3, X5^Y7, }, // 172
+ {Y4^X5^Y5, Z0^X4^Y4, Y1^X5^Y5, X2, }, // 173
+ {Y4^X6^Y6, Z1^X4^Y4, X2, X3, }, // 174
+ {Y4^X6^Y6, Z0^X4^Y4, X2, X3, }, // 175
+ {Y4^X6^Y6, Z0^X4^Y4, Y1^X5^Y5, X2, }, // 176
+ {Y4^X6^Y6, Z0^X4^Y4, Y1^X5^Y5, X1^X5^Y6, }, // 177
+ {Y4^X7^Y7, Z1^X4^Y4, Y1^Y5^X6, X3, }, // 178
+ {Y4^X7^Y7, Z0^X4^Y4, Y1^Y5^X6, X3, }, // 179
+ {Y4^X7^Y7, Z1^X4^Y4, Y1^Y5^X6, Z0^X5^Y6, }, // 180
+ {Y4^X7^Y7, Z0^X4^Y4, Y1^Y5^X6, X1^X5^Y6, }, // 181
+ {Y4^X8^Y8, Z1^X4^Y4, Y1^Y5^X7, Z0^X5^Y7, }, // 182
+ {Y4^X8^Y8, Z0^X4^Y4, Y1^Y5^X7, X1^X5^Y7, }, // 183
+ {Y4^X9^Y9, Z1^X4^Y4, Y1^Y5^X8, Z0^X5^Y8, }, // 184
+ {Y4^X9^Y9, Z0^X4^Y4, Y1^Y5^X8, X1^X5^Y8, }, // 185
+ {X3, Y3, Y4^X6, X4^Y7, }, // 186
+ {Y2, X3, Y3^X6, X4^Y7, }, // 187
+ {Z0^X4^Y4, X3, Y3, Y4^X6, }, // 188
+ {Z0^X4^Y4, X2, X3, Y3^X7, }, // 189
+ {Z0^X4^Y4, X2, Y2, X3^Y7, }, // 190
+ {Y4^X5^Y5, Y0^X4^Y4, X2, X3, }, // 191
+ {Y4^X5^Y5, Z0^X4^Y4, Y2^X5^Y5, X2, }, // 192
+ {Y4^X5^Y5, Y0^X4^Y4, X1^X5^Y5, X2, }, // 193
+ {Y4^X6^Y6, Z0^X4^Y4, X3, Y3, }, // 194
+ {Y4^X6^Y6, Y0^X4^Y4, X3, Y3, }, // 195
+ {Y4^X6^Y6, Z0^X4^Y4, Y1^X5^Y5, X3, }, // 196
+ {Y4^X6^Y6, Y0^X4^Y4, Y1^X5^Y5, X3, }, // 197
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y2^X5^Y6, }, // 198
+ {Y4^X6^Y6, Z0^X4^Y4, Y1^X5^Y5, X2^X5^Y6, }, // 199
+ {Y4^X6^Y6, Y0^X4^Y4, Y1^X5^Y5, Y2^X5^Y6, }, // 200
+ {Y4^X7^Y7, Y0^X4^Y4, Y1^Y5^X6, X3, }, // 201
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y2^X5^Y6, }, // 202
+ {Y4^X7^Y7, Y0^X4^Y4, Y1^Y5^X6, X1^X5^Y6, }, // 203
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, Y2^X5^Y7, }, // 204
+ {Y4^X8^Y8, Y0^X4^Y4, Y1^Y5^X7, X1^X5^Y7, }, // 205
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X2^X5^Y7, }, // 206
+ {Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X2^X5^Y8, }, // 207
+ {Y4^X9^Y9, Y0^X4^Y4, Y1^Y5^X8, X1^X5^Y8, }, // 208
+ {Y4^X9^Y9, X4^Y4^Z4, Z3^Y5^X8, Z2^X5^Y8, }, // 209
+ {Y2, X3, Y3^X7, Y4^X6, }, // 210
+ {Y1, X2, Y2^X7, Y3^X6, }, // 211
+ {Z0^X4^Y4, Y2, Y3, Y4^X7, }, // 212
+ {Z0^X4^Y4, Y1, Y2, Y3^X6, }, // 213
+ {Y4^X5^Y5, Z0^X4^Y4, Y1, Y2, }, // 214
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y1, }, // 215
+ {Y4^X6^Y6, Z1^X4^Y4, Y1, X2, }, // 216
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y1, }, // 217
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y2, }, // 218
+ {Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Y1, }, // 219
+ {Y1, X2, Y2^X6, X3^Y7, }, // 220
+ {X1, Y1, X2^Y7, Y2^X6, }, // 221
+ {Z0^X4^Y4, Y1, X2, Y2^X7, }, // 222
+ {Z0^X4^Y4, X1, Y1, Y2^X6, }, // 223
+ {Y4^X5^Y5, Z0^X4^Y4, Y1, X2, }, // 224
+ {Y4^X5^Y5, Z0^X4^Y4, X1, Y1, }, // 225
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, X1, }, // 226
+ {Y4^X6^Y6, Z1^X4^Y4, X1, Y1, }, // 227
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X1, }, // 228
+ {Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, X1, }, // 229
+ {Y0, X1, Y1^X7, Y2^X6, }, // 230
+ {Z0^X4^Y4, Y0, Y1, Y2^X6, }, // 231
+ {Y4^X5^Y5, Z0^X4^Y4, Y0, Y1, }, // 232
+ {Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y0, }, // 233
+ {Y4^X6^Y6, Z1^X4^Y4, Y0, X1, }, // 234
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y0, }, // 235
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y3^X5, }, // 236
+ {Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X3^Y5, }, // 237
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y1, }, // 238
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X1, }, // 239
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Z2^X5^Y6, }, // 240
+ {Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, Y0^X5^Y6, }, // 241
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, Z2^X5^Y7, }, // 242
+ {Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, Y0^X5^Y7, }, // 243
+ {Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, Z2^X5^Y8, }, // 244
+ {Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, Y0^X5^Y8, }, // 245
+ {Y2, X3, Z3, Y3, }, // 246
+ {Y2, X2, Z3, Y3, }, // 247
+ {Y2, X2, Z2, Y3, }, // 248
+ {Y1, X2, Z2, Y2, }, // 249
+ {Y1, X1, Z2, Y2, }, // 250
+ {Y2^X3^Z3, X3, Z3, Y3, }, // 251
+ {X2^Y2^Z3, X2, Z3, Y3, }, // 252
+ {X2^Y2^Z2, X2, Z2, Y3, }, // 253
+ {Y1^X2^Z2, X2, Z2, Y2, }, // 254
+ {X1^Y1^Z2, X1, Z2, Y2, }, // 255
+ {Y2^X4^Z4, X3^Y3^Z3, Z3, Y3, }, // 256
+ {Y2^X3^Z4, X2^Y3^Z3, Z3, Y3, }, // 257
+ {Y2^X3^Z3, X2^Z2^Y3, Z2, Y3, }, // 258
+ {Y1^X3^Z3, X2^Y2^Z2, Z2, Y2, }, // 259
+ {Y1^X2^Z3, X1^Y2^Z2, Z2, Y2, }, // 260
+ {Y2^X5^Z5, X3^Y4^Z4, Y3^Z3^X4, Y3, }, // 261
+ {Y2^X4^Z5, X2^Y4^Z4, X3^Y3^Z3, Y3, }, // 262
+ {Y2^X4^Z4, X2^Z3^Y4, Z2^X3^Y3, Y3, }, // 263
+ {Y1^X4^Z4, X2^Y3^Z3, Y2^Z2^X3, Y2, }, // 264
+ {Y1^X3^Z4, X1^Y3^Z3, X2^Y2^Z2, Y2, }, // 265
+ {Y2^X6^Z6, X3^Y5^Z5, Z3^Y4^X5, Y3^X4^Z4, }, // 266
+ {Y2^X5^Z6, X2^Y5^Z5, Z3^X4^Y4, X3^Y3^Z4, }, // 267
+ {Y2^X5^Z5, X2^Z4^Y5, Z2^X4^Y4, X3^Y3^Z3, }, // 268
+ {Y1^X5^Z5, X2^Y4^Z4, Z2^Y3^X4, Y2^X3^Z3, }, // 269
+ {Y1^X4^Z5, X1^Y4^Z4, Z2^X3^Y3, X2^Y2^Z3, }, // 270
+ {Y2^X7^Z7, X3^Y6^Z6, Z3^Y5^X6, Y3^X5^Z5, }, // 271
+ {Y2^X6^Z7, X2^Y6^Z6, Z3^X5^Y5, Y3^X4^Z5, }, // 272
+ {Y2^X6^Z6, X2^Z5^Y6, Z2^X5^Y5, Y3^X4^Z4, }, // 273
+ {Y1^X6^Z6, X2^Y5^Z5, Z2^Y4^X5, Y2^X4^Z4, }, // 274
+ {Y1^X5^Z6, X1^Y5^Z5, Z2^X4^Y4, Y2^X3^Z4, }, // 275
+ {Y2^X8^Z8, X3^Y7^Z7, Z3^Y6^X7, Y3^X6^Z6, }, // 276
+ {Y2^X7^Z8, X2^Y7^Z7, Z3^X6^Y6, Y3^X5^Z6, }, // 277
+ {Y2^X7^Z7, X2^Z6^Y7, Z2^X6^Y6, Y3^X5^Z5, }, // 278
+ {Y1^X7^Z7, X2^Y6^Z6, Z2^Y5^X6, Y2^X5^Z5, }, // 279
+ {Y1^X6^Z7, X1^Y6^Z6, Z2^X5^Y5, Y2^X4^Z5, }, // 280
+ {Y2^X5, X3^Y4^Z4, Y3^Z3^X4, Y3, }, // 281
+ {Y2^X4, X2^Y4^Z4, X3^Y3^Z3, Y3, }, // 282
+ {Y2^X4, X2^Z3^Y4, Z2^X3^Y3, Y3, }, // 283
+ {Y1^X4, X2^Y3^Z3, Y2^Z2^X3, Y2, }, // 284
+ {Y1^X3, X1^Y3^Z3, X2^Y2^Z2, Y2, }, // 285
+ {Y2, X3, Z3^Y4^X5, Y3^X4^Z4, }, // 286
+ {Y2, X2, Z3^X4^Y4, X3^Y3^Z4, }, // 287
+ {Y2, X2, Z2^X4^Y4, X3^Y3^Z3, }, // 288
+ {Y1, X2, Z2^Y3^X4, Y2^X3^Z3, }, // 289
+ {Y1, X1, Z2^X3^Y3, X2^Y2^Z3, }, // 290
+ {Y2, X3, Z3, Y3^X5, }, // 291
+ {Y2, X2, Z3, Y3^X4, }, // 292
+ {Y2, X2, Z2, Y3^X4, }, // 293
+ {Y1, X2, Z2, Y2^X4, }, // 294
+ {Y1, X1, Z2, Y2^X3, }, // 295
+ {X4^Y4, Y2, Z3, Y3, }, // 296
+ {X4^Y4, Y2, Z2, Y3, }, // 297
+ {X4^Y4, Y1, Z2, Y2, }, // 298
+ {Y1^X4^Y4, X1, Z2, Y2, }, // 299
+ {Y4^X5^Y5, X4^Y4, Y2, Z3, }, // 300
+ {Y4^X5^Y5, X4^Y4, Y2, Z2, }, // 301
+ {Z3^Y4^X5^Y5, X4^Y4, Y1, Z2, }, // 302
+ {Z3^Y4^X5^Y5, Y1^X4^Y4, X1, Z2, }, // 303
+ {Y4^X5^Y5, X4^Y4, Z3^X5, Y2, }, // 304
+ {Y4^X5^Y5, X4^Y4, Z2^X5, Y2, }, // 305
+ {Z3^Y4^X5^Y5, X4^Y4, Z2^X5, Y1, }, // 306
+ {Z3^Y4^X5^Y5, Y1^X4^Y4, Z2^X5, X1, }, // 307
+ {Y4^X6^Y6, X4^Y4, Y2, Y3, }, // 308
+ {Y4^X6^Y6, X4^Y4, Z3, Y3, }, // 309
+ {Y4^X6^Y6, X4^Y4, Z2, Y3, }, // 310
+ {Z3^Y4^X6^Y6, X4^Y4, Z2, Y2, }, // 311
+ {Z3^Y4^X6^Y6, Y1^X4^Y4, Z2, Y2, }, // 312
+ {Y4^X6^Y6, X4^Y4, X5^Y5, Y2, }, // 313
+ {Y4^X6^Y6, X4^Y4, Y2^X5^Y5, Z3, }, // 314
+ {Y4^X6^Y6, X4^Y4, Y2^X5^Y5, Z2, }, // 315
+ {Z3^Y4^X6^Y6, X4^Y4, Y1^X5^Y5, Z2, }, // 316
+ {Z3^Y4^X6^Y6, Y1^X4^Y4, X1^X5^Y5, Z2, }, // 317
+ {Y4^X6^Y6, X4^Y4, X5^Y5, Z3^X6, }, // 318
+ {Y4^X6^Y6, X4^Y4, Y2^X5^Y5, Z3^X6, }, // 319
+ {Y4^X6^Y6, X4^Y4, Y2^X5^Y5, Z2^X6, }, // 320
+ {Z3^Y4^X6^Y6, X4^Y4, Y1^X5^Y5, Z2^X6, }, // 321
+ {Z3^Y4^X6^Y6, Y1^X4^Y4, X1^X5^Y5, Z2^X6, }, // 322
+ {Y4^X7^Y7, X4^Y4, Y2^Y5^X6, Y3, }, // 323
+ {Z3^Y4^X7^Y7, X4^Y4, Y1^Y5^X6, Y2, }, // 324
+ {Z3^Y4^X7^Y7, Y1^X4^Y4, X1^Y5^X6, Y2, }, // 325
+ {Y4^X7^Y7, X4^Y4, Y2^Y5^X6, X5^Y6, }, // 326
+ {Y4^X7^Y7, X4^Y4, Y2^Y5^X6, Z3^X5^Y6, }, // 327
+ {Y4^X7^Y7, X4^Y4, Y2^Y5^X6, Z2^X5^Y6, }, // 328
+ {Z3^Y4^X7^Y7, X4^Y4, Y1^Y5^X6, Z2^X5^Y6, }, // 329
+ {Z3^Y4^X7^Y7, Y1^X4^Y4, X1^Y5^X6, Z2^X5^Y6, }, // 330
+ {Y4^X7^Y7, X4^Y4, Y2^Y5^X6, Y3^X5^Y6, }, // 331
+ {Z3^Y4^X7^Y7, X4^Y4, Y1^Y5^X6, Y2^X5^Y6, }, // 332
+ {Z3^Y4^X7^Y7, Y1^X4^Y4, X1^Y5^X6, Y2^X5^Y6, }, // 333
+ {Y4^X8^Y8, X4^Y4, Y2^Y5^X7, X5^Y7, }, // 334
+ {Y4^X8^Y8, X4^Y4, Y2^Y5^X7, Z3^X5^Y7, }, // 335
+ {Y4^X8^Y8, X4^Y4, Y2^Y5^X7, Z2^X5^Y7, }, // 336
+ {Z3^Y4^X8^Y8, X4^Y4, Y1^Y5^X7, Z2^X5^Y7, }, // 337
+ {Z3^Y4^X8^Y8, Y1^X4^Y4, X1^Y5^X7, Z2^X5^Y7, }, // 338
+ {Y4^X8^Y8, X4^Y4, Y2^Y5^X7, Y3^X5^Y7, }, // 339
+ {Z3^Y4^X8^Y8, X4^Y4, Y1^Y5^X7, Y2^X5^Y7, }, // 340
+ {Z3^Y4^X8^Y8, Y1^X4^Y4, X1^Y5^X7, Y2^X5^Y7, }, // 341
+ {Y4^X9^Y9, X4^Y4, Y2^Y5^X8, X5^Y8, }, // 342
+ {Y4^X9^Y9, X4^Y4, Y2^Y5^X8, Z3^X5^Y8, }, // 343
+ {Y4^X9^Y9, X4^Y4, Y2^Y5^X8, Z2^X5^Y8, }, // 344
+ {Z3^Y4^X9^Y9, X4^Y4, Y1^Y5^X8, Z2^X5^Y8, }, // 345
+ {Z3^Y4^X9^Y9, Y1^X4^Y4, X1^Y5^X8, Z2^X5^Y8, }, // 346
+};
+
+const UINT_64 GFX11_SW_PATTERN_NIBBLE3[][4] =
+{
+ {0, 0, 0, 0, }, // 0
+ {Y6, X6, Y7, X7, }, // 1
+ {Y5, X6, Y6, X7, }, // 2
+ {Y5, X5, Y6, X6, }, // 3
+ {Y4, X5, Y5, X6, }, // 4
+ {Y4, X4, Y5, X5, }, // 5
+ {Z0^X6^Y6, X6, Y7, X7, }, // 6
+ {Z0^Y5^X6, X6, Y6, X7, }, // 7
+ {Z0^X5^Y5, X5, Y6, X6, }, // 8
+ {Z0^Y4^X5, X5, Y5, X6, }, // 9
+ {Z0^X4^Y4, X4, Y5, X5, }, // 10
+ {Z1^Y6^X7, Z0^X6^Y7, Y7, X7, }, // 11
+ {Z1^Y5^X7, Z0^X6^Y6, Y6, X7, }, // 12
+ {Z1^Y5^X6, Z0^X5^Y6, Y6, X6, }, // 13
+ {Z1^Y4^X6, Z0^X5^Y5, Y5, X6, }, // 14
+ {Z1^Y4^X5, Z0^X4^Y5, Y5, X5, }, // 15
+ {X6^Y6, X6, Y7, X7, }, // 16
+ {Y5^X6, X6, Y6, X7, }, // 17
+ {X5^Y5, X5, Y6, X6, }, // 18
+ {Y4^X5, X5, Y5, X6, }, // 19
+ {X4^Y4, X4, Y5, X5, }, // 20
+ {Y6^X7, X6^Y7, Y7, X7, }, // 21
+ {Y5^X7, X6^Y6, Y6, X7, }, // 22
+ {Y5^X6, X5^Y6, Y6, X6, }, // 23
+ {Y4^X6, X5^Y5, Y5, X6, }, // 24
+ {Y4^X5, X4^Y5, Y5, X5, }, // 25
+ {X6^Y7, Y6^X7, X7, Y7, }, // 26
+ {X5^Y6, Y5^X6, X6, Y6, }, // 27
+ {Y4^X6, X5^Y6, Y5, X6, }, // 28
+ {X4^Y6, Y4^X5, X5, Y5, }, // 29
+ {X6^Y8, Y6^X8, X7^Y7, Y7, }, // 30
+ {X6^Y7, Y5^X8, Y6^X7, Y6, }, // 31
+ {X5^Y7, Y5^X7, X6^Y6, Y6, }, // 32
+ {X5^Y7, Y4^X7, X6^Y6, Y5, }, // 33
+ {X3^Y7, Y4^X6, X5^Y6, Y5, }, // 34
+ {X6^Y9, Y6^X9, X7^Y8, Y7^X8, }, // 35
+ {X6^Y8, Y5^X9, X7^Y7, Y6^X8, }, // 36
+ {X5^Y8, Y5^X8, X6^Y7, Y6^X7, }, // 37
+ {Y3^X8, X5^Y7, X6^Y6, Y5^X7, }, // 38
+ {Y3^X7, X3^Y7, X5^Y6, Y5^X6, }, // 39
+ {X6, Y6^X9, X7^Y8, Y7^X8, }, // 40
+ {Y5, X6^Y8, X7^Y7, Y6^X8, }, // 41
+ {Y3, Y5^X8, X6^Y7, Y6^X7, }, // 42
+ {X3, Y3^X8, X6^Y6, Y5^X7, }, // 43
+ {Y2, Y3^X7, X3^Y6, Y5^X6, }, // 44
+ {Y6^X9, X7^Y8, Y7^X8, Z0^X5^Y5, }, // 45
+ {X6^Y8, Y6^X8, X7^Y7, Z0^X5^Y5, }, // 46
+ {X5^Y8, X6^Y7, Y6^X7, Z0^X5^Y5, }, // 47
+ {Y3^X7, X5^Y7, X6^Y6, Z0^X5^Y5, }, // 48
+ {X3^Y7, Y3^X6, X5^Y6, Z0^X5^Y5, }, // 49
+ {X5, X6^Y8, Y6^X8, X7^Y7, }, // 50
+ {Y3, X5^Y8, X6^Y7, Y6^X7, }, // 51
+ {X3, Y3^X7, X5^Y7, X6^Y6, }, // 52
+ {Y2, X3^Y7, Y3^X6, X5^Y6, }, // 53
+ {X6, Y6, X7^Y8, Y7^X8, }, // 54
+ {Y3, X6, Y6^X8, X7^Y7, }, // 55
+ {X3, Y3, X6^Y7, Y6^X7, }, // 56
+ {Y2, X3, Y3^X7, X6^Y6, }, // 57
+ {X2, Y2, X3^Y6, Y3^X6, }, // 58
+ {Y6, X7^Y8, Y7^X8, X5^Y6, }, // 59
+ {X6, X7^Y7, Y6^X8, X5^Y6, }, // 60
+ {Y3, X6^Y7, Y6^X7, X5^Y6, }, // 61
+ {X3, Y3^X7, X6^Y6, Z0^X5^Y6, }, // 62
+ {Y2, Y3^X6, X3^Y6, Z0^X5^Y6, }, // 63
+ {Y3, X6, X7^Y7, Y6^X8, }, // 64
+ {X2, Y2, Y3^X6, X3^Y6, }, // 65
+ {X6^Y6, Y6, X7, Y7^X8, }, // 66
+ {X6^Y6, Y3, Y6, X7^Y7, }, // 67
+ {X6^Y6, X3, Y3, Y6^X7, }, // 68
+ {X6^Y6, Y2, X3, Y3^X7, }, // 69
+ {X3^Y6, X2, Y2, Y3^X6, }, // 70
+ {X6, X7, Y7^X8, X6^Y6, }, // 71
+ {Y3, X6, X7^Y7, X6^Y6, }, // 72
+ {X3, Y3, X6^Y7, X6^Y6, }, // 73
+ {Y2, X3, Y3^X7, Z0^X6^Y6, }, // 74
+ {X2, X3, Y3^X6, Y2^X6^Y6, }, // 75
+ {X6^Y6, X6, X7, Y7^X8, }, // 76
+ {X6^Y6, Y3, X6, X7^Y7, }, // 77
+ {X6^Y6, X3, Y3, X6^Y7, }, // 78
+ {Z0^X6^Y6, Y2, X3, Y3^X7, }, // 79
+ {Y2^X6^Y6, X2, X3, Y3^X6, }, // 80
+ {X6^Y6, X6^Y8, X7, Y7, }, // 81
+ {X6^Y6, X6^Y8, Y3, X7, }, // 82
+ {X6^Y6, X6^Y8, X3, Y3, }, // 83
+ {Z0^X6^Y6, X3^Y8, Y2, Y3, }, // 84
+ {Y2^X6^Y6, X3^Y8, X2, Y3, }, // 85
+ {Y6^X7, X7, Y7, X6^Y7, }, // 86
+ {Y6^X7, Y3, X7, X6^Y7, }, // 87
+ {Y6^X7, X3, Y3, X6^Y7, }, // 88
+ {Y2^Y6^X7, X3, Y3, Z0^X6^Y7, }, // 89
+ {Y2^Y6^X7, X3, Y3, X2^X6^Y7, }, // 90
+ {Y6^X7, X6^Y7, X7, Y7, }, // 91
+ {Y6^X7, X6^Y7, Y3, X7, }, // 92
+ {Y6^X7, X6^Y7, X3, Y3, }, // 93
+ {Y2^Y6^X7, Z0^X6^Y7, X3, Y3, }, // 94
+ {Y2^Y6^X7, X2^X6^Y7, X3, Y3, }, // 95
+ {X5^Y7, X6^Y6, X6, Y7, }, // 96
+ {Y5^X6, X5^Y6, Y6, Y2^X6, }, // 97
+ {Y4^X6, X5^Y6, Y5, X2^X6, }, // 98
+ {Y4^X5, X4^Y6, Y5, Y1^X5, }, // 99
+ {X5^Y8, Y6^X7, X6^Y7, Y7, }, // 100
+ {Y5^X7, X5^Y7, X6^Y6, Y2^X6, }, // 101
+ {Y4^X7, X5^Y6, Y5^X6, Y2^X6, }, // 102
+ {Y4^X6, X3^Y6, X5^Y5, Y1^X5, }, // 103
+ {Y5^X9, Y6^X8, X6^Y8, X7^Y7, }, // 104
+ {Y5^X8, X5^Y8, Y6^X7, Y2^X6^Y7, }, // 105
+ {Y3^X8, X5^Y7, Y5^X7, Y2^X6^Y6, }, // 106
+ {Y3^X7, X3^Y7, Y5^X6, Y1^X5^Y6, }, // 107
+ {X5, Y6^X8, X6^Y8, X7^Y7, }, // 108
+ {Y3, X5^Y8, Y6^X7, Y2^X6^Y7, }, // 109
+ {X3, Y3^X7, X5^Y7, Y2^X6^Y6, }, // 110
+ {Y2, Y3^X6, X3^Y7, Y1^X5^Y6, }, // 111
+ {Y6^X8, X6^Y8, X7^Y7, Z0^X5^Y5, }, // 112
+ {X5^Y8, Y6^X7, Y2^X6^Y7, Z0^X5^Y5, }, // 113
+ {Y3^X7, X5^Y7, X2^X6^Y6, Z0^X5^Y5, }, // 114
+ {Y3^X6, X3^Y7, Y1^X5^Y6, Z0^X5^Y5, }, // 115
+ {X3, Y3^X7, X5^Y7, X2^X6^Y6, }, // 116
+ {Y3, X5, X6^Y8, X7^Y7, }, // 117
+ {X3, Y3, X5^Y8, X6^Y7, }, // 118
+ {X3, Y3, X5^Y8, Y2^X6^Y7, }, // 119
+ {Y2, X3, Y3^X6, X5^Y6, }, // 120
+ {X2, Y2, Y3^X5, X3^Y6, }, // 121
+ {X6, Y6^X8, X7^Y7, X5^Y6, }, // 122
+ {Y3, Y6^X7, Y2^X6^Y7, X5^Y6, }, // 123
+ {X3, Y3^X7, Y2^X6^Y6, Z0^X5^Y6, }, // 124
+ {X3, Y3^X7, Y2^X6^Y6, Y1^X5^Y6, }, // 125
+ {X3, Y3, Y6^X7, Y2^X6^Y7, }, // 126
+ {X2, X3, Y3^X7, Y2^X6^Y6, }, // 127
+ {X6^Y6, X3, Y3, Y2^X6^Y7, }, // 128
+ {X3, Y3, Y2^X6^Y7, X6^Y6, }, // 129
+ {X3, Y3, X2^X6^Y7, Y2^X6^Y6, }, // 130
+ {Y2^X6^Y6, X3, Y3, X2^X6^Y7, }, // 131
+ {X6^Y6, X6^Y8, Y3, Y7, }, // 132
+ {X6^Y6, Y2^X6^Y8, X3, Y3, }, // 133
+ {Y2^X6^Y6, X2^X6^Y8, X3, Y3, }, // 134
+ {Y6^X7, Y3, Y7, X6^Y7, }, // 135
+ {Y6^X7, X3, Y3, Y2^X6^Y7, }, // 136
+ {Y6^X7, X6^Y7, Y3, Y7, }, // 137
+ {Y6^X7, Y2^X6^Y7, X3, Y3, }, // 138
+ {X5^Y6, Y5^X6, X6, Y2^Y6, }, // 139
+ {X5^Y6, Y5^X6, X2^X6, Y2^Y6, }, // 140
+ {Y4^X6, X5^Y6, X2^X6, Y1^Y5, }, // 141
+ {X4^Y6, Y4^X5, X1^X5, Y1^Y5, }, // 142
+ {Y4^X8, X6^Y6, Y5^X7, Y2^X7, }, // 143
+ {X5^Y6, Y5^X7, X2^X6^Y6, Y2^X6, }, // 144
+ {X5^Y6, Y4^X7, X2^Y5^X6, Y1^X6, }, // 145
+ {X3^Y6, Y4^X6, X1^X5^Y5, Y1^X5, }, // 146
+ {X5^Y8, X6^Y7, Y5^X8, Y2^Y6^X7, }, // 147
+ {X5^Y8, Y5^X8, X2^Y6^X7, Y2^X6^Y7, }, // 148
+ {Y3^X8, X5^Y7, X2^Y5^X7, Y1^X6^Y6, }, // 149
+ {Y3^X7, X3^Y7, X1^Y5^X6, Y1^X5^Y6, }, // 150
+ {Y3, X6^Y7, Y5^X8, Y2^Y6^X7, }, // 151
+ {Y3, Y5^X8, X2^Y6^X7, Y2^X6^Y7, }, // 152
+ {X3, Y3^X8, X2^Y5^X7, Y1^X6^Y6, }, // 153
+ {Y2, Y3^X6, X3^Y6, X1^X5^Y5, }, // 154
+ {X5^Y8, X6^Y7, Y2^Y6^X7, Z0^X5^Y5, }, // 155
+ {X5^Y8, X2^X6^Y7, Y2^Y6^X7, Z0^X5^Y5, }, // 156
+ {Y3^X8, Y2^Y5^X7, Y1^X6^Y6, Z0^X5^Y5, }, // 157
+ {Y3^X7, Y2^X6^Y6, X1^X5^Y7, Y1^X5^Y5, }, // 158
+ {Y3, X5^Y8, X6^Y7, Y2^Y6^X7, }, // 159
+ {Y3, X5^Y8, X2^X6^Y7, Y2^Y6^X7, }, // 160
+ {X3, Y3^X8, Y2^Y5^X7, Y1^X6^Y6, }, // 161
+ {X3, Y3^X7, Y2^X6^Y6, X1^X5^Y7, }, // 162
+ {X3, Y3, X6^Y7, Y2^Y6^X7, }, // 163
+ {X3, Y3, X2^X6^Y7, Y2^Y6^X7, }, // 164
+ {X2, X3, Y3^X7, Y2^Y5^X6, }, // 165
+ {X2, X3, Y3^X6, Y2^X5^Y6, }, // 166
+ {Y3, X6^Y7, Y2^Y6^X7, X5^Y6, }, // 167
+ {Y3, X2^Y6^X7, Y2^X6^Y7, X5^Y6, }, // 168
+ {Y3, X2^Y6^X7, Y2^X6^Y7, Z0^X5^Y6, }, // 169
+ {Y3, X2^Y6^X7, Y2^X6^Y7, X1^X5^Y6, }, // 170
+ {X3, Y3, X2^Y6^X7, Y2^X6^Y7, }, // 171
+ {X6^Y6, X3, Y3, Y2^Y6^X7, }, // 172
+ {Y2^X6^Y6, X3, Y3, X2^X6^Y6, }, // 173
+ {X3, Y3, Y2^Y6^X7, X6^Y6, }, // 174
+ {Y2^Y6^X7, X3, Y3, X6^Y7, }, // 175
+ {Y2^Y6^X7, X6^Y7, X3, Y3, }, // 176
+ {X5^Y5, Y1^X5^Y6, X2^X6, Y2^Y6, }, // 177
+ {Y4^X5, X1^X5^Y6, Y1^Y5, X2^X6, }, // 178
+ {Y4^X5, Y0^X4^Y6, X1^X5, Y1^Y5, }, // 179
+ {X5^Y5, Y1^X5^Y7, X2^X6^Y6, Y2^Y6, }, // 180
+ {Y4^X6, Y1^X5^Y6, X1^X5^Y5, Y2^X6, }, // 181
+ {Y3^X6, Y0^X4^Y6, X1^Y4^X5, Y1^X5, }, // 182
+ {Y5^X8, Y1^X5^Y8, X2^X6^Y7, Y2^Y6^X7, }, // 183
+ {Y3^X8, Y1^X5^Y7, X1^Y5^X7, Y2^X6^Y6, }, // 184
+ {Y3^X7, Y1^X4^Y7, Y2^X5^Y6, X1^Y5^X6, }, // 185
+ {Y3, X5^Y8, X2^Y6^X7, Y2^X6^Y7, }, // 186
+ {Y3, Y1^X5^Y8, X2^X6^Y7, Y2^Y6^X7, }, // 187
+ {X3, Y3^X7, Y1^X5^Y6, X1^Y5^X6, }, // 188
+ {X3, Y3^X6, Y1^X4^Y6, Y2^X5^Y5, }, // 189
+ {Y1^X5^Y8, X2^X6^Y7, Y2^Y6^X7, Z0^X5^Y5, }, // 190
+ {X1^X5^Y8, Y2^Y6^X7, X2^X6^Y7, Y1^X5^Y5, }, // 191
+ {X1^X5^Y8, X2^X6^Y7, Y2^Y6^X7, Y1^X5^Y5, }, // 192
+ {Y3, X1^X5^Y8, Y2^Y6^X7, X2^X6^Y7, }, // 193
+ {Y3, X1^X5^Y8, X2^X6^Y7, Y2^Y6^X7, }, // 194
+ {X3, Y3, Y1^X5^Y7, X2^X6^Y6, }, // 195
+ {X3, Y3, X1^X5^Y7, Y2^X6^Y6, }, // 196
+ {X3, Y3, X1^X5^Y7, X2^X6^Y6, }, // 197
+ {Y3, X2^Y6^X7, Y1^X6^Y7, Y2^X5^Y6, }, // 198
+ {X3, Y3, X2^Y6^X7, Y1^X6^Y7, }, // 199
+ {X2^X6^Y6, X3, Y3, Y1^X6^Y6, }, // 200
+ {X2^X6^Y6, X3, Y3, Y2^X6^Y6, }, // 201
+ {X3, Y3, Y1^X6^Y7, X2^X6^Y6, }, // 202
+ {Y2^X6^Y6, X3, Y3, Y1^X6^Y7, }, // 203
+ {Y2^X6^Y6, Y1^X6^Y8, X3, Y3, }, // 204
+ {Y2^Y6^X7, X3, Y3, Y1^X6^Y7, }, // 205
+ {X6, Y6^X10, X7^Y9, Y7^X9, }, // 206
+ {Y5, X6^Y9, X7^Y8, Y6^X9, }, // 207
+ {Y3, Y5^X9, X6^Y8, Y6^X8, }, // 208
+ {X3, Y3^X9, X6^Y7, Y5^X8, }, // 209
+ {Y2, Y3^X8, X3^Y7, Y5^X7, }, // 210
+ {Y6^X10, X7^Y9, Y7^X9, X8^Y8, }, // 211
+ {X5^Y9, X6^Y8, Y6^X8, X7^Y7, }, // 212
+ {Y3^X8, X5^Y8, X6^Y7, Y6^X7, }, // 213
+ {X3^Y8, Y3^X7, X5^Y7, X6^Y6, }, // 214
+ {X5, X6^Y9, Y6^X9, X7^Y8, }, // 215
+ {Y3, X5^Y9, X6^Y8, Y6^X8, }, // 216
+ {X3, Y3^X8, X5^Y8, X6^Y7, }, // 217
+ {Y2, X3^Y8, Y3^X7, X5^Y7, }, // 218
+ {X6, Y6, X7^Y10, Y7^X10, }, // 219
+ {Y3, X6, Y6^X10, X7^Y9, }, // 220
+ {X3, Y3, X6^Y9, Y6^X9, }, // 221
+ {Y2, X3, Y3^X9, X6^Y8, }, // 222
+ {X2, Y2, X3^Y8, Y3^X8, }, // 223
+ {Y6, X7^Y10, Y7^X10, X8^Y9, }, // 224
+ {X6, X7^Y9, Y6^X10, X8^Y8, }, // 225
+ {Y3, X6^Y9, Y6^X9, X7^Y8, }, // 226
+ {X3, Y3^X9, X6^Y8, X7^Y7, }, // 227
+ {Y2, Y3^X8, X3^Y8, X6^Y7, }, // 228
+ {Y3, X6, X7^Y9, Y6^X10, }, // 229
+ {X2, Y2, Y3^X8, X3^Y8, }, // 230
+ {X6^Y6, Y6, X7, Y7^X10, }, // 231
+ {X6^Y6, Y3, Y6, X7^Y9, }, // 232
+ {X6^Y6, X3, Y3, Y6^X9, }, // 233
+ {X6^Y6, Y2, X3, Y3^X9, }, // 234
+ {X6^Y6, X2, Y2, Y3^X8, }, // 235
+ {X6, X7, Y7^X10, X8^Y9, }, // 236
+ {Y3, X6, X7^Y9, Y7^X9, }, // 237
+ {X3, Y3, X6^Y9, X7^Y8, }, // 238
+ {Y2, X3, Y3^X8, X6^Y8, }, // 239
+ {X2, Y2, X3^Y8, Y3^X7, }, // 240
+ {X6^Y6, X6, X7, Y7^X10, }, // 241
+ {X6^Y6, Y3, X6, X7^Y9, }, // 242
+ {X6^Y6, X3, Y3, X6^Y9, }, // 243
+ {Z0^X6^Y6, Y2, X3, Y3^X8, }, // 244
+ {Z0^X6^Y6, X2, Y2, X3^Y8, }, // 245
+ {Z0^X6^Y6, X6^Y8, Y2, X3, }, // 246
+ {Z0^X6^Y6, X6^Y8, X2, Y2, }, // 247
+ {Y6^X7, X7, Y7, X8^Y9, }, // 248
+ {Y6^X7, Y3, X7, X8^Y8, }, // 249
+ {Y6^X7, X3, Y3, X7^Y8, }, // 250
+ {Z1^Y6^X7, Y2, X3, Y3^X8, }, // 251
+ {Z1^Y6^X7, X2, Y2, Y3^X7, }, // 252
+ {Z1^Y6^X7, Z0^X6^Y7, Y2, X3, }, // 253
+ {Z1^Y6^X7, Z0^X6^Y7, X2, Y2, }, // 254
+ {X4^Y6, X5^Y5, X5, Y6, }, // 255
+ {X3^Y6, Y4^X5, X4, Y5, }, // 256
+ {X3^Y7, Y5^X6, X5^Y6, Y6, }, // 257
+ {X2^Y7, Y4^X5, X3^Y6, Y5, }, // 258
+ {Y3^X8, Y5^X7, X5^Y7, X6^Y6, }, // 259
+ {Y3^X6, X2^Y7, X3^Y6, X5^Y5, }, // 260
+ {X5, Y6^X9, X6^Y9, Y7^X8, }, // 261
+ {X3, Y3^X8, X5^Y8, Y6^X7, }, // 262
+ {Y2, Y3^X7, X3^Y8, X5^Y7, }, // 263
+ {Y2, Y3^X6, X2^Y8, X3^Y7, }, // 264
+ {Y6^X9, X6^Y9, Y7^X8, X7^Y8, }, // 265
+ {Y3^X8, X5^Y8, Y6^X7, X6^Y7, }, // 266
+ {Y2^X7, Y3^X6, X3^Y7, X5^Y6, }, // 267
+ {X2, Y2^X7, Y3^X6, X3^Y7, }, // 268
+ {Y3, X5, X6^Y10, Y7^X9, }, // 269
+ {X3, Y3, X5^Y10, X6^Y9, }, // 270
+ {Y2, X3, Y3^X8, X5^Y9, }, // 271
+ {X2, Y2, X3^Y9, Y3^X7, }, // 272
+ {Y1, X2, Y2^X7, Y3^X6, }, // 273
+ {X6, Y6^X10, Y7^X9, X7^Y9, }, // 274
+ {X3, Y3^X9, Y6^X8, X6^Y8, }, // 275
+ {Y2, Y3^X7, X2^Y8, X3^Y7, }, // 276
+ {Y3, X6, Y6^X10, Y7^X9, }, // 277
+ {Y2, X3, Y3^X9, Y6^X8, }, // 278
+ {Y1, Y2, Y3^X7, X2^Y8, }, // 279
+ {X6^Y6, Y3, X6, Y7^X9, }, // 280
+ {X6^Y6, Y2, X3, Y3^X8, }, // 281
+ {X6^Y6, X2, Y2, Y3^X7, }, // 282
+ {X6^Y6, Y1, Y2, Y3^X6, }, // 283
+ {Y3, X6, Y7^X9, X7^Y9, }, // 284
+ {Z0^X6^Y6, Y1, X2, Y2^X7, }, // 285
+ {X6^Y6, X6^Y8, Y2, X3, }, // 286
+ {Z0^X6^Y6, X3^Y8, Y1, X2, }, // 287
+ {Y6^X7, Y3, X7, Y7^X9, }, // 288
+ {Y6^X7, Y2, X3, Y3^X8, }, // 289
+ {Z0^Y6^X7, X2, Y2, Y3^X7, }, // 290
+ {Z0^Y6^X7, X2, X3, Y3^X8, }, // 291
+ {Y6^X7, X6^Y7, Y2, X3, }, // 292
+ {Z0^Y6^X7, Z4^X6^Y7, X2, Y2, }, // 293
+ {Z0^Y6^X7, Y1^X6^Y7, X2, X3, }, // 294
+ {Y3^X5, X4^Y6, Y4, X5, }, // 295
+ {X3^Y6, Y3^X5, X4, Y4, }, // 296
+ {X3^Y7, Y3^X6, X5^Y6, Y4, }, // 297
+ {X2^Y7, Y3^X5, X3^Y6, Y4, }, // 298
+ {Y2^X7, X3^Y7, Y3^X6, X5^Y6, }, // 299
+ {Y2^X6, X2^Y7, Y3^X5, X3^Y6, }, // 300
+ {X2, Y2^X8, X3^Y7, Y3^X7, }, // 301
+ {Y1, Y2^X6, X2^Y7, Y3^X5, }, // 302
+ {X2^Y7, Y2^X6, X3^Y6, Y3^X5, }, // 303
+ {X2, Y2^X7, X3^Y7, Y3^X6, }, // 304
+ {Y1, X2^Y7, Y2^X6, X3^Y6, }, // 305
+ {Y1, X2, Y2^X8, X3^Y7, }, // 306
+ {X1, Y1, X2^Y7, Y2^X7, }, // 307
+ {Y1, Y2^X7, X2^Y7, Y3^X6, }, // 308
+ {X1, Y1, Y2^X7, X2^Y7, }, // 309
+ {X6^Y6, Y1, X2, Y2^X8, }, // 310
+ {X3^Y6, X1, Y1, Y2^X7, }, // 311
+ {Y1, X2, Y2^X8, Y3^X7, }, // 312
+ {X2, Y2, Y3^X7, X3^Y8, }, // 313
+ {X6^Y6, X2, Y2, X3^Y8, }, // 314
+ {Z3^X6^Y6, Y1, X2, Y2^X8, }, // 315
+ {Y1^X6^Y6, X2, Y2, Y3^X7, }, // 316
+ {X6^Y6, X6^Y8, X2, Y2, }, // 317
+ {Z3^X6^Y6, X3^Y8, Y1, X2, }, // 318
+ {Y1^X6^Y6, X1^X6^Y8, X2, Y2, }, // 319
+ {Y6^X7, X2, Y2, Y3^X7, }, // 320
+ {Y1^Y6^X7, X2, X3, Y3^X8, }, // 321
+ {Y1^Y6^X7, X3, Y3, X2^Y7^X8, }, // 322
+ {Y6^X7, X6^Y7, X2, Y2, }, // 323
+ {Y1^Y6^X7, Z3^X6^Y7, X2, X3, }, // 324
+ {Y1^Y6^X7, X1^X6^Y7, X3, Y3, }, // 325
+ {X2^Y6, Y3^X5, X3, Y4, }, // 326
+ {X1^Y7, Y3^X5, X2^Y6, Y4, }, // 327
+ {Y2^X6, X1^Y7, Y3^X5, X2^Y6, }, // 328
+ {Y1, Y2^X6, X1^Y7, Y3^X5, }, // 329
+ {Y1^X7, Y2^X6, X2^Y6, Y3^X5, }, // 330
+ {X1, Y1^X7, Y2^X6, X2^Y6, }, // 331
+ {X1, Y1, X2^Y8, Y2^X6, }, // 332
+ {Y0, X1, Y1^X7, Y2^X6, }, // 333
+ {X2, Y2^X8, Y3^X7, X3^Y7, }, // 334
+ {X1, X2, Y2^X8, Y3^X7, }, // 335
+ {Y1^X6^Y6, X1, X2, Y2^X7, }, // 336
+ {X2, X3, Y3^X8, Y2^X7^Y7, }, // 337
+ {X6^Y6, Y1, X2, Y2^X7, }, // 338
+ {Y1^X6^Y6, X2, X3, Y3^X8, }, // 339
+ {X6^Y6, Y2^X6^Y8, Y1, X2, }, // 340
+ {Y1^X6^Y6, X2^X6^Y8, Y2, X3, }, // 341
+ {Y1^X6^Y6, Y3^X8, X2, X3, }, // 342
+ {Y6^X7, X2, X3, Y3^X8, }, // 343
+ {Y1^Y6^X7, X3, Y2, Y3^X8^Y8, }, // 344
+ {Y6^X7, Y2^X6^Y7, X2, X3, }, // 345
+ {Y1^Y6^X7, X1^X6^Y7, X3, Y2, }, // 346
+ {X4, Z4, Y4, X5, }, // 347
+ {X3, Z4, Y4, X4, }, // 348
+ {X3, Z3, Y4, X4, }, // 349
+ {X3, Z3, Y3, X4, }, // 350
+ {X2, Z3, Y3, X3, }, // 351
+ {X4^Y4^Z4, Z4, Y4, X5, }, // 352
+ {X3^Y4^Z4, Z4, Y4, X4, }, // 353
+ {X3^Z3^Y4, Z3, Y4, X4, }, // 354
+ {X3^Y3^Z3, Z3, Y3, X4, }, // 355
+ {X2^Y3^Z3, Z3, Y3, X3, }, // 356
+ {X4^Y5^Z5, Y4^Z4^X5, Y4, X5, }, // 357
+ {X3^Y5^Z5, X4^Y4^Z4, Y4, X4, }, // 358
+ {X3^Z4^Y5, Z3^X4^Y4, Y4, X4, }, // 359
+ {X3^Y4^Z4, Y3^Z3^X4, Y3, X4, }, // 360
+ {X2^Y4^Z4, X3^Y3^Z3, Y3, X3, }, // 361
+ {X4, Y4^Z4^X5, Y4, X5, }, // 362
+ {X3, X4^Y4^Z4, Y4, X4, }, // 363
+ {X3, Z3^X4^Y4, Y4, X4, }, // 364
+ {X3, Y3^Z3^X4, Y3, X4, }, // 365
+ {X2, X3^Y3^Z3, Y3, X3, }, // 366
+ {X3, Z4, Y4, X5, }, // 367
+ {X2, Z4, Y4, X3, }, // 368
+ {X2, Z3, Y4, X3, }, // 369
+ {Y3, X3, Z4, X5, }, // 370
+ {Y3, X2, Z4, X3, }, // 371
+ {Y3, X2, Z3, X3, }, // 372
+ {Y2, X2, Y3, X3, }, // 373
+ {Z3, X3, Z4, X5^Y5, }, // 374
+ {X2, Z4, X3, Y2^X5^Y5, }, // 375
+ {X2, Z3, X3, Y2^X5^Y5, }, // 376
+ {X2, Y3, X3, Y1^X5^Y5, }, // 377
+ {X2, Y3, X3, X1^X5^Y5, }, // 378
+ {Y3, Z3, X3, Z4, }, // 379
+ {Y2, Y3, X3, Z4, }, // 380
+ {Z3, X3, Z4, X5^Y6, }, // 381
+ {X2, Z4, X3, Z3^X5^Y6, }, // 382
+ {X2, Z3, X3, Z2^X5^Y6, }, // 383
+ {X2, Y3, X3, Z2^X5^Y6, }, // 384
+ {Z3^X7, Y3, X3, Z4, }, // 385
+ {Z3^X7, X2, Z4, X3, }, // 386
+ {Z2^X7, X2, Z3, X3, }, // 387
+ {Z2^X7, X2, Y3, X3, }, // 388
+ {Z3, X3, Z4, Y3^X6^Y6, }, // 389
+ {X2, Z4, X3, Y3^X6^Y6, }, // 390
+ {X2, Z3, X3, Y3^X6^Y6, }, // 391
+ {X2, Y3, X3, Y2^X6^Y6, }, // 392
+ {Y3^X6^Y6, Z3, X3, Z4, }, // 393
+ {Y3^X6^Y6, X2, Z4, X3, }, // 394
+ {Y3^X6^Y6, X2, Z3, X3, }, // 395
+ {Y2^X6^Y6, X2, Y3, X3, }, // 396
+ {Y3^X6^Y6, Z3^X8, X3, Z4, }, // 397
+ {X2^X6^Y6, Z3^X8, Z4, X3, }, // 398
+ {X2^X6^Y6, Z2^X8, Z3, X3, }, // 399
+ {X2^X6^Y6, Z2^X8, Y3, X3, }, // 400
+ {Y3^Y6^X7, X3, Z4, Z3^X6^Y7, }, // 401
+ {Y3^Y6^X7, Z4, X3, X2^X6^Y7, }, // 402
+ {Y3^Y6^X7, Z3, X3, X2^X6^Y7, }, // 403
+ {Y2^Y6^X7, Y3, X3, X2^X6^Y7, }, // 404
+ {Y3^Y6^X7, Z3^X6^Y7, X3, Z4, }, // 405
+ {Y3^Y6^X7, X2^X6^Y7, Z4, X3, }, // 406
+ {Y3^Y6^X7, X2^X6^Y7, Z3, X3, }, // 407
+ {Y2^Y6^X7, X2^X6^Y7, Y3, X3, }, // 408
+};
+
+const UINT_64 GFX11_SW_PATTERN_NIBBLE4[][4] =
+{
+ {0, 0, 0, 0, }, // 0
+ {Y8, X8, 0, 0, }, // 1
+ {Y7, X8, 0, 0, }, // 2
+ {Y7, X7, 0, 0, }, // 3
+ {Y6, X7, 0, 0, }, // 4
+ {Y6, X6, 0, 0, }, // 5
+ {X8, Y8, 0, 0, }, // 6
+ {X7, Y7, 0, 0, }, // 7
+ {X6, Y6, 0, 0, }, // 8
+ {X8, Y7, 0, 0, }, // 9
+ {X7, Y6, 0, 0, }, // 10
+ {X8^Y8, Y8, 0, 0, }, // 11
+ {Y7^X8, Y7, 0, 0, }, // 12
+ {X7^Y7, Y7, 0, 0, }, // 13
+ {Y6^X7, Y6, 0, 0, }, // 14
+ {X6^Y6, Y6, 0, 0, }, // 15
+ {Y8, Z0^X5^Y5, 0, 0, }, // 16
+ {X8, Z0^X5^Y5, 0, 0, }, // 17
+ {Y7, Z0^X5^Y5, 0, 0, }, // 18
+ {X7, Z0^X5^Y5, 0, 0, }, // 19
+ {Y6, Z0^X5^Y5, 0, 0, }, // 20
+ {Y7^X8, X8, 0, 0, }, // 21
+ {Y6^X7, X7, 0, 0, }, // 22
+ {X8^Y9, Y8^X9, 0, 0, }, // 23
+ {Y7^X9, X8^Y8, 0, 0, }, // 24
+ {X7^Y8, Y7^X8, 0, 0, }, // 25
+ {Y6^X8, X7^Y7, 0, 0, }, // 26
+ {X6^Y7, Y6^X7, 0, 0, }, // 27
+ {Y8^X9, X5^Y6, 0, 0, }, // 28
+ {Y7^X9, X5^Y6, 0, 0, }, // 29
+ {Y7^X8, X5^Y6, 0, 0, }, // 30
+ {Y6^X8, Z0^X5^Y6, 0, 0, }, // 31
+ {Y6^X7, Z0^X5^Y6, 0, 0, }, // 32
+ {X8^Y8, Y7^X9, 0, 0, }, // 33
+ {X7^Y7, Y6^X8, 0, 0, }, // 34
+ {X3^Y7, Y6^X7, 0, 0, }, // 35
+ {Y8^X9, X6^Y6, 0, 0, }, // 36
+ {X8^Y8, X6^Y6, 0, 0, }, // 37
+ {Y7^X8, X6^Y6, 0, 0, }, // 38
+ {X7^Y7, Z0^X6^Y6, 0, 0, }, // 39
+ {X6^Y7, Z0^X6^Y6, 0, 0, }, // 40
+ {X6^Y8, X7^Y7, 0, 0, }, // 41
+ {Y3^X7, X6^Y7, 0, 0, }, // 42
+ {Y3^X8, X7^Y7, 0, 0, }, // 43
+ {X3^Y7, Y3^X7, 0, 0, }, // 44
+ {Y8^X9, X6^Y7, 0, 0, }, // 45
+ {Y7^X9, X6^Y7, 0, 0, }, // 46
+ {Y7^X8, X6^Y7, 0, 0, }, // 47
+ {X7^Y7, Z0^X6^Y7, 0, 0, }, // 48
+ {X3^Y7, Z0^X6^Y7, 0, 0, }, // 49
+ {Y3^X7, X3^Y7, 0, 0, }, // 50
+ {X7, Y8, 0, 0, }, // 51
+ {X6, Y7, 0, 0, }, // 52
+ {X5, Y6, 0, 0, }, // 53
+ {X7^Y8, Y8, 0, 0, }, // 54
+ {X6^Y7, Y7, 0, 0, }, // 55
+ {X5^Y6, Y6, 0, 0, }, // 56
+ {X7^Y9, X8^Y8, 0, 0, }, // 57
+ {X5^Y8, X6^Y7, 0, 0, }, // 58
+ {X3^Y8, X5^Y7, 0, 0, }, // 59
+ {X8^Y8, X5^Y6, 0, 0, }, // 60
+ {X7^Y7, X5^Y6, 0, 0, }, // 61
+ {X6^Y6, Z0^X5^Y6, 0, 0, }, // 62
+ {X3^Y7, X6^Y6, 0, 0, }, // 63
+ {X3^Y8, X6^Y7, 0, 0, }, // 64
+ {X2^Y8, X3^Y7, 0, 0, }, // 65
+ {X7^Y7, X6^Y6, 0, 0, }, // 66
+ {X3^Y7, Z0^X6^Y6, 0, 0, }, // 67
+ {Y3^X6, X3^Y7, 0, 0, }, // 68
+ {Y2^X7, Y3^X6, 0, 0, }, // 69
+ {X8^Y8, X6^Y7, 0, 0, }, // 70
+ {X7^Y7, X6^Y7, 0, 0, }, // 71
+ {X3^Y7, Z4^X6^Y7, 0, 0, }, // 72
+ {Y2^X7^Y7, Y1^X6^Y7, 0, 0, }, // 73
+ {Y3^X8, Y2^X7^Y7, 0, 0, }, // 74
+ {Y5, X6, 0, 0, }, // 75
+ {X5, Y5, 0, 0, }, // 76
+ {X6, Y5, 0, 0, }, // 77
+ {X6^Y6, Y5, 0, 0, }, // 78
+ {X3^Y6, Y5, 0, 0, }, // 79
+ {X6, Z0^X5^Y5, 0, 0, }, // 80
+ {X5, Z0^X5^Y5, 0, 0, }, // 81
+ {X5^Y6, X6, 0, 0, }, // 82
+ {Y3^X5, X5, 0, 0, }, // 83
+ {Y3^X7, X6^Y6, 0, 0, }, // 84
+ {X3^Y6, Y3^X6, 0, 0, }, // 85
+ {Y6^X8, X5^Y6, 0, 0, }, // 86
+ {Y6^X7, X5^Y6, 0, 0, }, // 87
+ {X3^Y6, Z0^X5^Y6, 0, 0, }, // 88
+ {Y3^X6, X3^Y6, 0, 0, }, // 89
+ {X3^Y6, Y3^X7, 0, 0, }, // 90
+ {X2^Y6, Y3^X6, 0, 0, }, // 91
+ {X6^Y7, X6^Y6, 0, 0, }, // 92
+ {X3^Y6, Z3^X6^Y6, 0, 0, }, // 93
+ {X1^X6^Y7, Y1^X6^Y6, 0, 0, }, // 94
+ {Y3^X7, X3^Y6, 0, 0, }, // 95
+ {X3^Y8, X1^X6^Y7, 0, 0, }, // 96
+ {Y2^X8, Y3^X7, 0, 0, }, // 97
+ {X3^Y7, X6^Y7, 0, 0, }, // 98
+ {Y2^X7^Y7, Z3^X6^Y7, 0, 0, }, // 99
+ {Y2^X7^Y8, X1^X6^Y7, 0, 0, }, // 100
+ {X2^Y7^X8, Y2^X7^Y8, 0, 0, }, // 101
+ {X4, Y5, 0, 0, }, // 102
+ {X3, Y5, 0, 0, }, // 103
+ {X3^Y6, X5, 0, 0, }, // 104
+ {X2^Y6, X3, 0, 0, }, // 105
+ {X3, Z0^X5^Y5, 0, 0, }, // 106
+ {Y3^X5, X3, 0, 0, }, // 107
+ {X3^Y7, X5^Y6, 0, 0, }, // 108
+ {X2^Y6, Y3^X5, 0, 0, }, // 109
+ {X6^Y6, X5^Y6, 0, 0, }, // 110
+ {X3^Y6, Z2^X5^Y6, 0, 0, }, // 111
+ {Y1^X6^Y6, Y0^X5^Y6, 0, 0, }, // 112
+ {X3^Y7, Y1^X6^Y6, 0, 0, }, // 113
+ {X1^X6^Y8, Y1^X6^Y6, 0, 0, }, // 114
+ {Y2^X7^Y7, X1^X6^Y8, 0, 0, }, // 115
+ {Y3^X7, X1^X6^Y7, 0, 0, }, // 116
+ {Y1^X7^Y7, Y2^X6^Y7, 0, 0, }, // 117
+ {X2^Y7^X9, X1^X6^Y7, 0, 0, }, // 118
+ {Y3^X8, Y1^X7^Y7, 0, 0, }, // 119
+ {Y3^X8^Y8, X2^Y7^X9, 0, 0, }, // 120
+ {Z5, Y5, 0, 0, }, // 121
+ {Z4, Y5, 0, 0, }, // 122
+ {Z4, Y4, 0, 0, }, // 123
+};
+
+const UINT_8 GFX11_DCC_64K_R_X_PATIDX[] =
+{
+ 0, // 1 bpe ua @ SW_64K_{Z,R}_X 1xaa
+ 1, // 2 bpe ua @ SW_64K_{Z,R}_X 1xaa
+ 2, // 4 bpe ua @ SW_64K_{Z,R}_X 1xaa
+ 3, // 8 bpe ua @ SW_64K_{Z,R}_X 1xaa
+ 4, // 16 bpe ua @ SW_64K_{Z,R}_X 1xaa
+ 0, // 1 pipes (1 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 1, // 1 pipes (1 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 2, // 1 pipes (1 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 3, // 1 pipes (1 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 4, // 1 pipes (1 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 5, // 2 pipes (1-2 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 6, // 2 pipes (1-2 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 7, // 2 pipes (1-2 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 8, // 2 pipes (1-2 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 9, // 2 pipes (1-2 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 10, // 4 pipes (1-2 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 11, // 4 pipes (1-2 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 12, // 4 pipes (1-2 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 13, // 4 pipes (1-2 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 14, // 4 pipes (1-2 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 15, // 8 pipes (2 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 16, // 8 pipes (2 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 17, // 8 pipes (2 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 18, // 8 pipes (2 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 19, // 8 pipes (2 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 20, // 4 pipes (4 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 21, // 4 pipes (4 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 22, // 4 pipes (4 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 23, // 4 pipes (4 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 24, // 4 pipes (4 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 25, // 8 pipes (4 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 26, // 8 pipes (4 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 27, // 8 pipes (4 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 28, // 8 pipes (4 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 29, // 8 pipes (4 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 30, // 16 pipes (4 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 31, // 16 pipes (4 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 32, // 16 pipes (4 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 33, // 16 pipes (4 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 34, // 16 pipes (4 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 35, // 8 pipes (8 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 36, // 8 pipes (8 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 37, // 8 pipes (8 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 38, // 8 pipes (8 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 39, // 8 pipes (8 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 35, // 16 pipes (8 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 36, // 16 pipes (8 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 37, // 16 pipes (8 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 40, // 16 pipes (8 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 41, // 16 pipes (8 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 42, // 32 pipes (8 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 43, // 32 pipes (8 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 44, // 32 pipes (8 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 45, // 32 pipes (8 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 46, // 32 pipes (8 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 47, // 16 pipes (16 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 48, // 16 pipes (16 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 49, // 16 pipes (16 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 50, // 16 pipes (16 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 51, // 16 pipes (16 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 47, // 32 pipes (16 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 48, // 32 pipes (16 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 49, // 32 pipes (16 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 52, // 32 pipes (16 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 53, // 32 pipes (16 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 54, // 64 pipes (16 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 55, // 64 pipes (16 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 56, // 64 pipes (16 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 57, // 64 pipes (16 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 58, // 64 pipes (16 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 59, // 32 pipes (32 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 60, // 32 pipes (32 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 61, // 32 pipes (32 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 62, // 32 pipes (32 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 63, // 32 pipes (32 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 59, // 64 pipes (32 PKRs) 1 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 60, // 64 pipes (32 PKRs) 2 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 61, // 64 pipes (32 PKRs) 4 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 64, // 64 pipes (32 PKRs) 8 bpe pa @ SW_64K_{Z,R}_X 1xaa
+ 65, // 64 pipes (32 PKRs) 16 bpe pa @ SW_64K_{Z,R}_X 1xaa
+};
+
+const UINT_8 GFX11_DCC_256K_R_X_PATIDX[] =
+{
+ 0, // 1 bpe ua @ SW_256K_{Z,R}_X 1xaa
+ 1, // 2 bpe ua @ SW_256K_{Z,R}_X 1xaa
+ 2, // 4 bpe ua @ SW_256K_{Z,R}_X 1xaa
+ 3, // 8 bpe ua @ SW_256K_{Z,R}_X 1xaa
+ 4, // 16 bpe ua @ SW_256K_{Z,R}_X 1xaa
+ 0, // 1 pipes (1 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 1, // 1 pipes (1 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 2, // 1 pipes (1 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 3, // 1 pipes (1 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 4, // 1 pipes (1 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 5, // 2 pipes (1-2 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 6, // 2 pipes (1-2 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 7, // 2 pipes (1-2 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 8, // 2 pipes (1-2 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 9, // 2 pipes (1-2 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 10, // 4 pipes (1-2 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 11, // 4 pipes (1-2 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 12, // 4 pipes (1-2 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 13, // 4 pipes (1-2 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 14, // 4 pipes (1-2 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 15, // 8 pipes (2 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 16, // 8 pipes (2 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 17, // 8 pipes (2 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 18, // 8 pipes (2 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 19, // 8 pipes (2 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 20, // 4 pipes (4 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 21, // 4 pipes (4 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 22, // 4 pipes (4 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 23, // 4 pipes (4 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 24, // 4 pipes (4 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 25, // 8 pipes (4 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 26, // 8 pipes (4 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 27, // 8 pipes (4 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 28, // 8 pipes (4 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 29, // 8 pipes (4 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 30, // 16 pipes (4 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 31, // 16 pipes (4 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 32, // 16 pipes (4 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 33, // 16 pipes (4 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 34, // 16 pipes (4 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 35, // 8 pipes (8 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 36, // 8 pipes (8 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 37, // 8 pipes (8 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 38, // 8 pipes (8 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 39, // 8 pipes (8 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 35, // 16 pipes (8 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 36, // 16 pipes (8 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 37, // 16 pipes (8 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 40, // 16 pipes (8 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 41, // 16 pipes (8 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 42, // 32 pipes (8 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 43, // 32 pipes (8 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 44, // 32 pipes (8 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 45, // 32 pipes (8 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 66, // 32 pipes (8 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 47, // 16 pipes (16 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 48, // 16 pipes (16 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 49, // 16 pipes (16 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 50, // 16 pipes (16 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 67, // 16 pipes (16 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 47, // 32 pipes (16 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 48, // 32 pipes (16 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 49, // 32 pipes (16 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 52, // 32 pipes (16 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 68, // 32 pipes (16 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 54, // 64 pipes (16 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 55, // 64 pipes (16 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 56, // 64 pipes (16 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 69, // 64 pipes (16 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 70, // 64 pipes (16 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 59, // 32 pipes (32 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 60, // 32 pipes (32 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 61, // 32 pipes (32 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 71, // 32 pipes (32 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 72, // 32 pipes (32 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 59, // 64 pipes (32 PKRs) 1 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 60, // 64 pipes (32 PKRs) 2 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 61, // 64 pipes (32 PKRs) 4 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 73, // 64 pipes (32 PKRs) 8 bpe pa @ SW_256K_{Z,R}_X 1xaa
+ 74, // 64 pipes (32 PKRs) 16 bpe pa @ SW_256K_{Z,R}_X 1xaa
+};
+
+const UINT_8 GFX11_HTILE_PATIDX[] =
+{
+ 0, // 1xaa ua @ HTILE_64K
+ 0, // 2xaa ua @ HTILE_64K
+ 0, // 4xaa ua @ HTILE_64K
+ 0, // 8xaa ua @ HTILE_64K
+ 0, // 1 pipes (1-2 PKRs) 1xaa pa @ HTILE_64K
+ 0, // 1 pipes (1-2 PKRs) 2xaa pa @ HTILE_64K
+ 0, // 1 pipes (1-2 PKRs) 4xaa pa @ HTILE_64K
+ 0, // 1 pipes (1-2 PKRs) 8xaa pa @ HTILE_64K
+ 1, // 2 pipes (1-2 PKRs) 1xaa pa @ HTILE_64K
+ 1, // 2 pipes (1-2 PKRs) 2xaa pa @ HTILE_64K
+ 1, // 2 pipes (1-2 PKRs) 4xaa pa @ HTILE_64K
+ 1, // 2 pipes (1-2 PKRs) 8xaa pa @ HTILE_64K
+ 2, // 4 pipes (1-2 PKRs) 1xaa pa @ HTILE_64K
+ 2, // 4 pipes (1-2 PKRs) 2xaa pa @ HTILE_64K
+ 2, // 4 pipes (1-2 PKRs) 4xaa pa @ HTILE_64K
+ 2, // 4 pipes (1-2 PKRs) 8xaa pa @ HTILE_64K
+ 3, // 8 pipes (1-2 PKRs) 1xaa pa @ HTILE_64K
+ 3, // 8 pipes (1-2 PKRs) 2xaa pa @ HTILE_64K
+ 3, // 8 pipes (1-2 PKRs) 4xaa pa @ HTILE_64K
+ 3, // 8 pipes (1-2 PKRs) 8xaa pa @ HTILE_64K
+ 1, // 2 pipes (4 PKRs) 1xaa pa @ HTILE_64K
+ 1, // 2 pipes (4 PKRs) 2xaa pa @ HTILE_64K
+ 1, // 2 pipes (4 PKRs) 4xaa pa @ HTILE_64K
+ 1, // 2 pipes (4 PKRs) 8xaa pa @ HTILE_64K
+ 4, // 4 pipes (4 PKRs) 1xaa pa @ HTILE_64K
+ 4, // 4 pipes (4 PKRs) 2xaa pa @ HTILE_64K
+ 4, // 4 pipes (4 PKRs) 4xaa pa @ HTILE_64K
+ 4, // 4 pipes (4 PKRs) 8xaa pa @ HTILE_64K
+ 5, // 8 pipes (4 PKRs) 1xaa pa @ HTILE_64K
+ 5, // 8 pipes (4 PKRs) 2xaa pa @ HTILE_64K
+ 5, // 8 pipes (4 PKRs) 4xaa pa @ HTILE_64K
+ 5, // 8 pipes (4 PKRs) 8xaa pa @ HTILE_64K
+ 6, // 16 pipes (4 PKRs) 1xaa pa @ HTILE_64K
+ 6, // 16 pipes (4 PKRs) 2xaa pa @ HTILE_64K
+ 6, // 16 pipes (4 PKRs) 4xaa pa @ HTILE_64K
+ 6, // 16 pipes (4 PKRs) 8xaa pa @ HTILE_64K
+ 7, // 4 pipes (8 PKRs) 1xaa pa @ HTILE_64K
+ 7, // 4 pipes (8 PKRs) 2xaa pa @ HTILE_64K
+ 7, // 4 pipes (8 PKRs) 4xaa pa @ HTILE_64K
+ 7, // 4 pipes (8 PKRs) 8xaa pa @ HTILE_64K
+ 8, // 8 pipes (8 PKRs) 1xaa pa @ HTILE_64K
+ 8, // 8 pipes (8 PKRs) 2xaa pa @ HTILE_64K
+ 8, // 8 pipes (8 PKRs) 4xaa pa @ HTILE_64K
+ 8, // 8 pipes (8 PKRs) 8xaa pa @ HTILE_64K
+ 9, // 16 pipes (8 PKRs) 1xaa pa @ HTILE_64K
+ 9, // 16 pipes (8 PKRs) 2xaa pa @ HTILE_64K
+ 9, // 16 pipes (8 PKRs) 4xaa pa @ HTILE_64K
+ 9, // 16 pipes (8 PKRs) 8xaa pa @ HTILE_64K
+ 10, // 32 pipes (8 PKRs) 1xaa pa @ HTILE_64K
+ 10, // 32 pipes (8 PKRs) 2xaa pa @ HTILE_64K
+ 10, // 32 pipes (8 PKRs) 4xaa pa @ HTILE_64K
+ 10, // 32 pipes (8 PKRs) 8xaa pa @ HTILE_64K
+ 11, // 8 pipes (16 PKRs) 1xaa pa @ HTILE_64K
+ 11, // 8 pipes (16 PKRs) 2xaa pa @ HTILE_64K
+ 11, // 8 pipes (16 PKRs) 4xaa pa @ HTILE_64K
+ 11, // 8 pipes (16 PKRs) 8xaa pa @ HTILE_64K
+ 12, // 16 pipes (16 PKRs) 1xaa pa @ HTILE_64K
+ 12, // 16 pipes (16 PKRs) 2xaa pa @ HTILE_64K
+ 12, // 16 pipes (16 PKRs) 4xaa pa @ HTILE_64K
+ 12, // 16 pipes (16 PKRs) 8xaa pa @ HTILE_64K
+ 13, // 32 pipes (16 PKRs) 1xaa pa @ HTILE_64K
+ 13, // 32 pipes (16 PKRs) 2xaa pa @ HTILE_64K
+ 13, // 32 pipes (16 PKRs) 4xaa pa @ HTILE_64K
+ 13, // 32 pipes (16 PKRs) 8xaa pa @ HTILE_64K
+ 14, // 64 pipes (16 PKRs) 1xaa pa @ HTILE_64K
+ 14, // 64 pipes (16 PKRs) 2xaa pa @ HTILE_64K
+ 14, // 64 pipes (16 PKRs) 4xaa pa @ HTILE_64K
+ 14, // 64 pipes (16 PKRs) 8xaa pa @ HTILE_64K
+ 15, // 16 pipes (32 PKRs) 1xaa pa @ HTILE_64K
+ 15, // 16 pipes (32 PKRs) 2xaa pa @ HTILE_64K
+ 15, // 16 pipes (32 PKRs) 4xaa pa @ HTILE_64K
+ 15, // 16 pipes (32 PKRs) 8xaa pa @ HTILE_64K
+ 16, // 32 pipes (32 PKRs) 1xaa pa @ HTILE_64K
+ 16, // 32 pipes (32 PKRs) 2xaa pa @ HTILE_64K
+ 16, // 32 pipes (32 PKRs) 4xaa pa @ HTILE_64K
+ 16, // 32 pipes (32 PKRs) 8xaa pa @ HTILE_64K
+ 17, // 64 pipes (32 PKRs) 1xaa pa @ HTILE_64K
+ 17, // 64 pipes (32 PKRs) 2xaa pa @ HTILE_64K
+ 17, // 64 pipes (32 PKRs) 4xaa pa @ HTILE_64K
+ 17, // 64 pipes (32 PKRs) 8xaa pa @ HTILE_64K
+};
+
+const UINT_64 GFX11_DCC_R_X_SW_PATTERN[][17] =
+{
+ {0, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, X9, Y9, 0, 0, 0, 0, }, //0
+ {0, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, X9, 0, 0, 0, 0, }, //1
+ {0, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, 0, 0, 0, 0, }, //2
+ {0, Y2, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, 0, 0, 0, 0, }, //3
+ {0, X2, Y2, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, 0, 0, 0, 0, }, //4
+ {0, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Z0^X4^Y4, Y8, X9, Y9, 0, 0, 0, 0, }, //5
+ {0, Y3, Y4, X5, Y5, X6, Y6, X7, Y7, Z0^X4^Y4, X8, Y8, X9, 0, 0, 0, 0, }, //6
+ {0, X3, Y3, Y4, X5, Y5, X6, Y6, X7, Z0^X4^Y4, Y7, X8, Y8, 0, 0, 0, 0, }, //7
+ {0, Y2, X3, Y3, Y4, X5, Y5, X6, Y6, Z0^X4^Y4, X7, Y7, X8, 0, 0, 0, 0, }, //8
+ {0, X2, Y2, X3, Y3, Y4, X5, Y5, X6, Z0^X4^Y4, Y6, X7, Y7, 0, 0, 0, 0, }, //9
+ {0, X5, Y5, X6, Y6, X7, Y7, X8, Y8, Y4^X5^Y5, Z0^X4^Y4, X9, Y9, 0, 0, 0, 0, }, //10
+ {0, Y3, X5, Y5, X6, Y6, X7, Y7, X8, Y4^X5^Y5, Z0^X4^Y4, Y8, X9, 0, 0, 0, 0, }, //11
+ {0, X3, Y3, X5, Y5, X6, Y6, X7, Y7, Y4^X5^Y5, Z0^X4^Y4, X8, Y8, 0, 0, 0, 0, }, //12
+ {0, Y2, X3, Y3, X5, Y5, X6, Y6, X7, Y4^X5^Y5, Z0^X4^Y4, Y7, X8, 0, 0, 0, 0, }, //13
+ {0, X2, Y2, X3, Y3, X5, Y5, X6, Y6, Y4^X5^Y5, Z0^X4^Y4, X7, Y7, 0, 0, 0, 0, }, //14
+ {0, Y5, X6, Y6, X7, Y7, X8, Y8, X9, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y9, 0, 0, 0, 0, }, //15
+ {0, Y3, Y5, X6, Y6, X7, Y7, X8, Y8, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, X9, 0, 0, 0, 0, }, //16
+ {0, X3, Y3, Y5, X6, Y6, X7, Y7, X8, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y8, 0, 0, 0, 0, }, //17
+ {0, Y2, X3, Y3, Y5, X6, Y6, X7, Y7, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, X8, 0, 0, 0, 0, }, //18
+ {0, X2, Y2, X3, Y3, Y5, X6, Y6, X7, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y7, 0, 0, 0, 0, }, //19
+ {0, X5, X6, Y6, X7, Y7, X8, Y8, X9, Y4^X6^Y6, Z1^X4^Y4, X5^Y5, Y9, 0, 0, 0, 0, }, //20
+ {0, Y3, X5, X6, Y6, X7, Y7, X8, Y8, Y4^X6^Y6, Z1^X4^Y4, X5^Y5, X9, 0, 0, 0, 0, }, //21
+ {0, X3, Y3, X5, X6, Y6, X7, Y7, X8, Y4^X6^Y6, Z1^X4^Y4, X5^Y5, Y8, 0, 0, 0, 0, }, //22
+ {0, Y2, X3, Y3, X5, X6, Y6, X7, Y7, Y4^X6^Y6, Z1^X4^Y4, X5^Y5, X8, 0, 0, 0, 0, }, //23
+ {0, X2, Y2, X3, Y3, X5, X6, Y6, X7, Y4^X6^Y6, Z1^X4^Y4, X5^Y5, Y7, 0, 0, 0, 0, }, //24
+ {0, X5, X6, Y6, X7, Y7, X8, Y8, X9, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y9, 0, 0, 0, 0, }, //25
+ {0, Y3, X5, X6, Y6, X7, Y7, X8, Y8, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X9, 0, 0, 0, 0, }, //26
+ {0, X3, Y3, X5, X6, Y6, X7, Y7, X8, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y8, 0, 0, 0, 0, }, //27
+ {0, Y2, X3, Y3, X5, X6, Y6, X7, Y7, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X8, 0, 0, 0, 0, }, //28
+ {0, X2, Y2, X3, Y3, X5, X6, Y6, X7, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y7, 0, 0, 0, 0, }, //29
+ {0, X6, Y6, X7, Y7, X8, Y8, X9, Y9, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, 0, 0, 0, 0, }, //30
+ {0, Y3, X6, Y6, X7, Y7, X8, Y8, X9, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, 0, 0, 0, 0, }, //31
+ {0, X3, Y3, X6, Y6, X7, Y7, X8, Y8, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, 0, 0, 0, 0, }, //32
+ {0, Y2, X3, Y3, X6, Y6, X7, Y7, X8, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, 0, 0, 0, 0, }, //33
+ {0, X2, Y2, X3, Y3, X6, Y6, X7, Y7, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, 0, 0, 0, 0, }, //34
+ {0, X6, Y6, X7, Y7, X8, Y8, X9, Y9, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, 0, 0, 0, 0, }, //35
+ {0, Y3, X6, Y6, X7, Y7, X8, Y8, X9, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, 0, 0, 0, 0, }, //36
+ {0, X3, Y3, X6, Y6, X7, Y7, X8, Y8, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, 0, 0, 0, 0, }, //37
+ {0, Y2, X3, Y3, X6, Y6, X7, Y7, X8, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, X5^Y6, 0, 0, 0, 0, }, //38
+ {0, X2, Y2, X3, Y3, X6, Y6, X7, Y7, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, X5^Y6, 0, 0, 0, 0, }, //39
+ {0, Y2, X3, Y3, X6, Y6, X7, Y7, X8, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, 0, 0, 0, 0, }, //40
+ {0, X2, Y2, X3, Y3, X6, Y6, X7, Y7, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, 0, 0, 0, 0, }, //41
+ {0, Y6, X7, Y7, X8, Y8, X9, Y9, X10, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, X6^Y6, 0, 0, 0, }, //42
+ {0, Y3, Y6, X7, Y7, X8, Y8, X9, Y9, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, X6^Y6, 0, 0, 0, }, //43
+ {0, X3, Y3, Y6, X7, Y7, X8, Y8, X9, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, X6^Y6, 0, 0, 0, }, //44
+ {0, Y2, X3, Y3, Y6, X7, Y7, X8, Y8, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, X6^Y6, 0, 0, 0, }, //45
+ {0, X2, Y2, Y3, X6, Y6, X7, Y7, X8, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, X3^Y6, 0, 0, 0, }, //46
+ {0, X6, X7, Y7, X8, Y8, X9, Y9, X10, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, 0, 0, 0, }, //47
+ {0, Y3, X6, X7, Y7, X8, Y8, X9, Y9, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, 0, 0, 0, }, //48
+ {0, X3, Y3, X6, X7, Y7, X8, Y8, X9, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, 0, 0, 0, }, //49
+ {0, Y2, X3, Y3, X6, X7, Y7, X8, Y8, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, X6^Y6, 0, 0, 0, }, //50
+ {0, X2, X3, Y3, X6, X7, Y7, Y2, X8, Y4^X8^Y8, Z2^X4^Y4, Z1^Y5^X7, Z0^X5^Y7, X6^Y6, 0, 0, 0, }, //51
+ {0, Y2, X3, Y3, X6, X7, Y7, X8, Y8, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, Z0^X6^Y6, 0, 0, 0, }, //52
+ {0, X2, X3, Y3, X6, X7, Y7, Y2, X8, Y4^X8^Y8, Z2^X4^Y4, Z1^Y5^X7, Z0^X5^Y7, Y2^X6^Y6, 0, 0, 0, }, //53
+ {0, X7, Y7, X8, Y8, X9, Y9, X10, Y10, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, X6^Y8, 0, 0, }, //54
+ {0, Y3, X7, Y7, X8, Y8, X9, Y9, X10, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, X6^Y8, 0, 0, }, //55
+ {0, X3, Y3, X7, Y7, X8, Y8, X9, Y9, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, X6^Y8, 0, 0, }, //56
+ {0, Y2, Y3, X6, X7, Y7, X8, Y8, X9, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, Z0^X6^Y6, X3^Y8, 0, 0, }, //57
+ {0, X2, Y3, X6, X7, Y7, X8, Y2, Y8, Y4^X8^Y8, Z2^X4^Y4, Z1^Y5^X7, Z0^X5^Y7, Y2^X6^Y6, X3^Y8, 0, 0, }, //58
+ {0, X7, Y7, X8, Y8, X9, Y9, X10, Y10, Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, Y6^X7, X6^Y7, 0, 0, }, //59
+ {0, Y3, X7, Y7, X8, Y8, X9, Y9, X10, Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, Y6^X7, X6^Y7, 0, 0, }, //60
+ {0, X3, Y3, X7, Y7, X8, Y8, X9, Y9, Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, Y6^X7, X6^Y7, 0, 0, }, //61
+ {0, X3, Y3, X7, Y7, X8, Y8, Y2, X9, Y4^X9^Y9, Z3^X4^Y4, Z2^Y5^X8, Z1^X5^Y8, Y2^Y6^X7, X6^Y7, 0, 0, }, //62
+ {0, X3, Y3, X7, Y7, X8, Y8, X2, Y2, Y4^X9^Y9, Z2^X4^Y4, Z1^Y5^X8, Z0^X5^Y8, Y2^Y6^X7, X6^Y7, 0, 0, }, //63
+ {0, X3, Y3, X7, Y7, X8, Y8, Y2, X9, Y4^X9^Y9, Z3^X4^Y4, Z2^Y5^X8, Z1^X5^Y8, Y2^Y6^X7, Z0^X6^Y7, 0, 0, }, //64
+ {0, X3, Y3, X7, Y7, X8, Y8, X2, Y2, Y4^X9^Y9, Z2^X4^Y4, Z1^Y5^X8, Z0^X5^Y8, Y2^Y6^X7, X2^X6^Y7, 0, 0, }, //65
+ {0, X2, Y2, X3, Y3, Y6, X7, Y7, X8, Y4^X7^Y7, Z2^X4^Y4, Z1^Y5^X6, Z0^X5^Y6, X6^Y6, 0, 0, 0, }, //66
+ {0, X2, Y2, X3, Y3, X6, X7, Y7, X8, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, X6^Y6, 0, 0, 0, }, //67
+ {0, X2, Y2, X3, Y3, X6, X7, Y7, X8, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, Z0^X6^Y6, 0, 0, 0, }, //68
+ {0, Y2, X3, Y3, X7, Y7, X8, Y8, X9, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, Z0^X6^Y6, X6^Y8, 0, 0, }, //69
+ {0, X2, Y2, X3, Y3, X7, Y7, X8, Y8, Y4^X8^Y8, Z3^X4^Y4, Z2^Y5^X7, Z1^X5^Y7, Z0^X6^Y6, X6^Y8, 0, 0, }, //70
+ {0, Y2, X3, Y3, X7, Y7, X8, Y8, X9, Y4^X9^Y9, X4^Y4^Z4, Z3^Y5^X8, Z2^X5^Y8, Z1^Y6^X7, X6^Y7, 0, 0, }, //71
+ {0, X2, Y2, X3, Y3, X7, Y7, X8, Y8, Y4^X9^Y9, X4^Y4^Z4, Z3^Y5^X8, Z2^X5^Y8, Z1^Y6^X7, X6^Y7, 0, 0, }, //72
+ {0, Y2, X3, Y3, X7, Y7, X8, Y8, X9, Y4^X9^Y9, X4^Y4^Z4, Z3^Y5^X8, Z2^X5^Y8, Z1^Y6^X7, Z0^X6^Y7, 0, 0, }, //73
+ {0, X2, Y2, X3, Y3, X7, Y7, X8, Y8, Y4^X9^Y9, X4^Y4^Z4, Z3^Y5^X8, Z2^X5^Y8, Z1^Y6^X7, Z0^X6^Y7, 0, 0, }, //74
+};
+
+const UINT_64 GFX11_HTILE_SW_PATTERN[][18] =
+{
+ {0, 0, 0, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, 0, 0, 0, 0, 0, }, //0
+ {0, 0, 0, X3, Y3, Y4, X5, Y5, X6, Z0^X4^Y4, Y6, X7, Y7, 0, 0, 0, 0, 0, }, //1
+ {0, 0, 0, X3, Y3, X5, Y5, X6, Y6, Y4^X5^Y5, Z0^X4^Y4, X7, Y7, X8, 0, 0, 0, 0, }, //2
+ {0, 0, 0, X3, Y3, Y5, X6, Y6, X7, Y4^X5^Y5, Z0^X4^Y4, X5^Y5, Y7, X8, Y8, 0, 0, 0, }, //3
+ {0, 0, 0, X3, Y3, X5, X6, Y6, X7, Y4^X6^Y6, Z1^X4^Y4, Y7, X8, Y8, X5^Y5, 0, 0, 0, }, //4
+ {0, 0, 0, X3, Y3, X5, X6, Y6, X7, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, Y7, X8, Y8, 0, 0, 0, }, //5
+ {0, 0, 0, X3, Y3, X6, Y6, X7, Y7, Y4^X6^Y6, Z1^X4^Y4, Z0^X5^Y5, X5^Y6, X8, Y8, X9, 0, 0, }, //6
+ {0, 0, 0, X3, Y3, Y4, X5, X6, Y6, Z1^X4^Y4, Z0^X5^Y5, X7, Y7, X8, 0, 0, 0, 0, }, //7
+ {0, 0, 0, X3, Y3, X6, Y6, X7, Y7, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X8, Y8, X9, X5^Y6, 0, 0, }, //8
+ {0, 0, 0, X3, Y3, X6, Y6, X7, Y7, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, X8, Y8, X9, 0, 0, }, //9
+ {0, 0, 0, X3, Y3, Y6, X7, Y7, X8, Y4^X7^Y7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, X6^Y6, Y8, X9, Y9, 0, }, //10
+ {0, 0, 0, X3, Y3, Y4, X6, Y6, X7, Z1^X4^Y4, Z0^Y5^X6, X5^Y6, Y7, X8, Y8, 0, 0, 0, }, //11
+ {0, 0, 0, X3, Y3, X6, X7, Y7, X8, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, Y8, X9, Y9, X6^Y6, 0, }, //12
+ {0, 0, 0, X3, Y3, X6, X7, Y7, X8, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, Y8, X9, Y9, 0, }, //13
+ {0, 0, 0, X3, Y3, X7, Y7, X8, Y8, Y4^X8^Y8, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, X6^Y8, X9, Y9, X10, }, //14
+ {0, 0, 0, X3, Y3, Y4, X6, X7, Y7, Z1^X4^Y4, Z0^Y5^X7, X5^Y7, X6^Y6, X8, Y8, X9, 0, 0, }, //15
+ {0, 0, 0, X3, Y3, X7, Y7, X8, Y8, Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, Y6^X7, X9, Y9, X10, X6^Y7, }, //16
+ {0, 0, 0, X3, Y3, X7, Y7, X8, Y8, Y4^X9^Y9, Z1^X4^Y4, Z0^Y5^X8, X5^Y8, Y6^X7, X6^Y7, X9, Y9, X10, }, //17
+};
+
+}// V2
+} // Addr
+
+#endif
diff --git a/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.cpp b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.cpp
new file mode 100644
index 000000000..9adc28a63
--- /dev/null
+++ b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.cpp
@@ -0,0 +1,4250 @@
+/*
+************************************************************************************************************************
+*
+* Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE
+*
+***********************************************************************************************************************/
+
+/**
+************************************************************************************************************************
+* @file gfx11addrlib.cpp
+* @brief Contain the implementation for the Gfx11Lib class.
+************************************************************************************************************************
+*/
+
+#include "gfx11addrlib.h"
+#include "gfx11_gb_reg.h"
+
+#include "amdgpu_asic_addr.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace Addr
+{
+/**
+************************************************************************************************************************
+* Gfx11HwlInit
+*
+* @brief
+* Creates an Gfx11Lib object.
+*
+* @return
+* Returns an Gfx11Lib object pointer.
+************************************************************************************************************************
+*/
+Addr::Lib* Gfx11HwlInit(const Client* pClient)
+{
+ return V2::Gfx11Lib::CreateObj(pClient);
+}
+
+namespace V2
+{
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Static Const Member
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+const SwizzleModeFlags Gfx11Lib::SwizzleModeTable[ADDR_SW_MAX_TYPE] =
+{//Linear 256B 4KB 64KB 256KB Z Std Disp Rot XOR T RtOpt Reserved
+ {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // ADDR_SW_LINEAR
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}}, // ADDR_SW_256B_D
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}}, // ADDR_SW_4KB_S
+ {{0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}}, // ADDR_SW_4KB_D
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}}, // ADDR_SW_64KB_S
+ {{0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0}}, // ADDR_SW_64KB_D
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0}}, // ADDR_SW_64KB_S_T
+ {{0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0}}, // ADDR_SW_64KB_D_T
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+ {{0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_4KB_S_X
+ {{0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0}}, // ADDR_SW_4KB_D_X
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // Reserved
+
+ {{0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_64KB_Z_X
+ {{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_64KB_S_X
+ {{0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0}}, // ADDR_SW_64KB_D_X
+ {{0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0}}, // ADDR_SW_64KB_R_X
+
+ {{0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_256KB_Z_X
+ {{0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0}}, // ADDR_SW_256KB_S_X
+ {{0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0}}, // ADDR_SW_256KB_D_X
+ {{0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}}, // ADDR_SW_256KB_R_X
+ {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // ADDR_SW_LINEAR_GENERAL
+};
+
+const Dim3d Gfx11Lib::Block256_3d[] = {{8, 4, 8}, {4, 4, 8}, {4, 4, 4}, {4, 2, 4}, {2, 2, 4}};
+
+const Dim3d Gfx11Lib::Block256K_Log2_3d[] = {{6, 6, 6}, {5, 6, 6}, {5, 6, 5}, {5, 5, 5}, {4, 5, 5}};
+const Dim3d Gfx11Lib::Block64K_Log2_3d[] = {{6, 5, 5}, {5, 5, 5}, {5, 5, 4}, {5, 4, 4}, {4, 4, 4}};
+const Dim3d Gfx11Lib::Block4K_Log2_3d[] = {{4, 4, 4}, {3, 4, 4}, {3, 4, 3}, {3, 3, 3}, {2, 3, 3}};
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::Gfx11Lib
+*
+* @brief
+* Constructor
+*
+************************************************************************************************************************
+*/
+Gfx11Lib::Gfx11Lib(const Client* pClient)
+ :
+ Lib(pClient),
+ m_numPkrLog2(0),
+ m_numSaLog2(0),
+ m_colorBaseIndex(0),
+ m_htileBaseIndex(0),
+ m_dccBaseIndex(0)
+{
+ memset(&m_settings, 0, sizeof(m_settings));
+ memcpy(m_swizzleModeTable, SwizzleModeTable, sizeof(SwizzleModeTable));
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::~Gfx11Lib
+*
+* @brief
+* Destructor
+************************************************************************************************************************
+*/
+Gfx11Lib::~Gfx11Lib()
+{
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeHtileInfo
+*
+* @brief
+* Interface function stub of AddrComputeHtilenfo
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeHtileInfo(
+ const ADDR2_COMPUTE_HTILE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_HTILE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE ret = ADDR_OK;
+
+ if ((pIn->swizzleMode != ADDR_SW_64KB_Z_X) &&
+ (pIn->swizzleMode != ADDR_SW_256KB_Z_X) &&
+ (pIn->hTileFlags.pipeAligned != TRUE))
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ else
+ {
+ Dim3d metaBlk = {};
+ const UINT_32 metaBlkSize = GetMetaBlkSize(Gfx11DataDepthStencil,
+ ADDR_RSRC_TEX_2D,
+ pIn->swizzleMode,
+ 0,
+ 0,
+ TRUE,
+ &metaBlk);
+
+ pOut->pitch = PowTwoAlign(pIn->unalignedWidth, metaBlk.w);
+ pOut->height = PowTwoAlign(pIn->unalignedHeight, metaBlk.h);
+ pOut->baseAlign = Max(metaBlkSize, 1u << (m_pipesLog2 + 11u));
+ pOut->metaBlkWidth = metaBlk.w;
+ pOut->metaBlkHeight = metaBlk.h;
+
+ if (pIn->numMipLevels > 1)
+ {
+ ADDR_ASSERT(pIn->firstMipIdInTail <= pIn->numMipLevels);
+
+ UINT_32 offset = (pIn->firstMipIdInTail == pIn->numMipLevels) ? 0 : metaBlkSize;
+
+ for (INT_32 i = static_cast<INT_32>(pIn->firstMipIdInTail) - 1; i >=0; i--)
+ {
+ UINT_32 mipWidth, mipHeight;
+
+ GetMipSize(pIn->unalignedWidth, pIn->unalignedHeight, 1, i, &mipWidth, &mipHeight);
+
+ mipWidth = PowTwoAlign(mipWidth, metaBlk.w);
+ mipHeight = PowTwoAlign(mipHeight, metaBlk.h);
+
+ const UINT_32 pitchInM = mipWidth / metaBlk.w;
+ const UINT_32 heightInM = mipHeight / metaBlk.h;
+ const UINT_32 mipSliceSize = pitchInM * heightInM * metaBlkSize;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[i].inMiptail = FALSE;
+ pOut->pMipInfo[i].offset = offset;
+ pOut->pMipInfo[i].sliceSize = mipSliceSize;
+ }
+
+ offset += mipSliceSize;
+ }
+
+ pOut->sliceSize = offset;
+ pOut->metaBlkNumPerSlice = offset / metaBlkSize;
+ pOut->htileBytes = pOut->sliceSize * pIn->numSlices;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ for (UINT_32 i = pIn->firstMipIdInTail; i < pIn->numMipLevels; i++)
+ {
+ pOut->pMipInfo[i].inMiptail = TRUE;
+ pOut->pMipInfo[i].offset = 0;
+ pOut->pMipInfo[i].sliceSize = 0;
+ }
+
+ if (pIn->firstMipIdInTail != pIn->numMipLevels)
+ {
+ pOut->pMipInfo[pIn->firstMipIdInTail].sliceSize = metaBlkSize;
+ }
+ }
+ }
+ else
+ {
+ const UINT_32 pitchInM = pOut->pitch / metaBlk.w;
+ const UINT_32 heightInM = pOut->height / metaBlk.h;
+
+ pOut->metaBlkNumPerSlice = pitchInM * heightInM;
+ pOut->sliceSize = pOut->metaBlkNumPerSlice * metaBlkSize;
+ pOut->htileBytes = pOut->sliceSize * pIn->numSlices;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[0].inMiptail = FALSE;
+ pOut->pMipInfo[0].offset = 0;
+ pOut->pMipInfo[0].sliceSize = pOut->sliceSize;
+ }
+ }
+
+ // Get the HTILE address equation (copied from HtileAddrFromCoord).
+ // HTILE addressing depends on the number of samples, but this code doesn't support it yet.
+ const UINT_32 index = m_htileBaseIndex;
+ const UINT_8* patIdxTable = GFX11_HTILE_PATIDX;
+
+ ADDR_C_ASSERT(sizeof(GFX11_HTILE_SW_PATTERN[patIdxTable[index]]) == 72 * 2);
+ pOut->equation.gfx10_bits = (UINT_16 *)GFX11_HTILE_SW_PATTERN[patIdxTable[index]];
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeDccInfo
+*
+* @brief
+* Interface function to compute DCC key info
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeDccInfo(
+ const ADDR2_COMPUTE_DCCINFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_DCCINFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE ret = ADDR_OK;
+
+ if (IsLinear(pIn->swizzleMode) || IsBlock256b(pIn->swizzleMode))
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ else
+ {
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+
+ const BOOL_32 isThick = IsThick(pIn->resourceType, pIn->swizzleMode);
+
+ pOut->compressBlkWidth = isThick ? Block256_3d[elemLog2].w : Block256_2d[elemLog2].w;
+ pOut->compressBlkHeight = isThick ? Block256_3d[elemLog2].h : Block256_2d[elemLog2].h;
+ pOut->compressBlkDepth = isThick ? Block256_3d[elemLog2].d : 1;
+
+ if (ret == ADDR_OK)
+ {
+ Dim3d metaBlk = {};
+ const UINT_32 numFragLog2 = Log2(Max(pIn->numFrags, 1u));
+ const UINT_32 metaBlkSize = GetMetaBlkSize(Gfx11DataColor,
+ pIn->resourceType,
+ pIn->swizzleMode,
+ elemLog2,
+ numFragLog2,
+ pIn->dccKeyFlags.pipeAligned,
+ &metaBlk);
+
+ pOut->dccRamBaseAlign = metaBlkSize;
+ pOut->metaBlkWidth = metaBlk.w;
+ pOut->metaBlkHeight = metaBlk.h;
+ pOut->metaBlkDepth = metaBlk.d;
+ pOut->metaBlkSize = metaBlkSize;
+
+ pOut->pitch = PowTwoAlign(pIn->unalignedWidth, metaBlk.w);
+ pOut->height = PowTwoAlign(pIn->unalignedHeight, metaBlk.h);
+ pOut->depth = PowTwoAlign(Max(pIn->numSlices, 1u), metaBlk.d);
+
+ if (pIn->numMipLevels > 1)
+ {
+ ADDR_ASSERT(pIn->firstMipIdInTail <= pIn->numMipLevels);
+
+ UINT_32 offset = (pIn->firstMipIdInTail == pIn->numMipLevels) ? 0 : metaBlkSize;
+
+ for (INT_32 i = static_cast<INT_32>(pIn->firstMipIdInTail) - 1; i >= 0; i--)
+ {
+ UINT_32 mipWidth, mipHeight;
+
+ GetMipSize(pIn->unalignedWidth, pIn->unalignedHeight, 1, i, &mipWidth, &mipHeight);
+
+ mipWidth = PowTwoAlign(mipWidth, metaBlk.w);
+ mipHeight = PowTwoAlign(mipHeight, metaBlk.h);
+
+ const UINT_32 pitchInM = mipWidth / metaBlk.w;
+ const UINT_32 heightInM = mipHeight / metaBlk.h;
+ const UINT_32 mipSliceSize = pitchInM * heightInM * metaBlkSize;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[i].inMiptail = FALSE;
+ pOut->pMipInfo[i].offset = offset;
+ pOut->pMipInfo[i].sliceSize = mipSliceSize;
+ }
+
+ offset += mipSliceSize;
+ }
+
+ pOut->dccRamSliceSize = offset;
+ pOut->metaBlkNumPerSlice = offset / metaBlkSize;
+ pOut->dccRamSize = pOut->dccRamSliceSize * (pOut->depth / metaBlk.d);
+
+ if (pOut->pMipInfo != NULL)
+ {
+ for (UINT_32 i = pIn->firstMipIdInTail; i < pIn->numMipLevels; i++)
+ {
+ pOut->pMipInfo[i].inMiptail = TRUE;
+ pOut->pMipInfo[i].offset = 0;
+ pOut->pMipInfo[i].sliceSize = 0;
+ }
+
+ if (pIn->firstMipIdInTail != pIn->numMipLevels)
+ {
+ pOut->pMipInfo[pIn->firstMipIdInTail].sliceSize = metaBlkSize;
+ }
+ }
+ }
+ else
+ {
+ const UINT_32 pitchInM = pOut->pitch / metaBlk.w;
+ const UINT_32 heightInM = pOut->height / metaBlk.h;
+
+ pOut->metaBlkNumPerSlice = pitchInM * heightInM;
+ pOut->dccRamSliceSize = pOut->metaBlkNumPerSlice * metaBlkSize;
+ pOut->dccRamSize = pOut->dccRamSliceSize * (pOut->depth / metaBlk.d);
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[0].inMiptail = FALSE;
+ pOut->pMipInfo[0].offset = 0;
+ pOut->pMipInfo[0].sliceSize = pOut->dccRamSliceSize;
+ }
+ }
+
+ // Get the DCC address equation (copied from DccAddrFromCoord)
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+ const UINT_32 numPipeLog2 = m_pipesLog2;
+ UINT_32 index = m_dccBaseIndex + elemLog2;
+ const UINT_8* patIdxTable = (pIn->swizzleMode == ADDR_SW_64KB_R_X) ?
+ GFX11_DCC_64K_R_X_PATIDX : GFX11_DCC_256K_R_X_PATIDX;
+
+ if (pIn->dccKeyFlags.pipeAligned)
+ {
+ index += MaxNumOfBpp;
+
+ if (m_numPkrLog2 < 2)
+ {
+ index += m_pipesLog2 * MaxNumOfBpp;
+ }
+ else
+ {
+ // 4 groups for "m_numPkrLog2 < 2" case
+ index += 4 * MaxNumOfBpp;
+
+ const UINT_32 dccPipePerPkr = 3;
+
+ index += (m_numPkrLog2 - 2) * dccPipePerPkr * MaxNumOfBpp +
+ (m_pipesLog2 - m_numPkrLog2) * MaxNumOfBpp;
+ }
+ }
+
+ ADDR_C_ASSERT(sizeof(GFX11_DCC_R_X_SW_PATTERN[patIdxTable[index]]) == 68 * 2);
+ pOut->equation.gfx10_bits = (UINT_16*)GFX11_DCC_R_X_SW_PATTERN[patIdxTable[index]];
+ }
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeHtileAddrFromCoord
+*
+* @brief
+* Interface function stub of AddrComputeHtileAddrFromCoord
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeHtileAddrFromCoord(
+ const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT* pOut) ///< [out] output structure
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if (pIn->numMipLevels > 1)
+ {
+ returnCode = ADDR_NOTIMPLEMENTED;
+ }
+ else
+ {
+ ADDR2_COMPUTE_HTILE_INFO_INPUT input = {};
+ input.size = sizeof(input);
+ input.hTileFlags = pIn->hTileFlags;
+ input.depthFlags = pIn->depthflags;
+ input.swizzleMode = pIn->swizzleMode;
+ input.unalignedWidth = Max(pIn->unalignedWidth, 1u);
+ input.unalignedHeight = Max(pIn->unalignedHeight, 1u);
+ input.numSlices = Max(pIn->numSlices, 1u);
+ input.numMipLevels = 1;
+
+ ADDR2_COMPUTE_HTILE_INFO_OUTPUT output = {};
+ output.size = sizeof(output);
+
+ returnCode = ComputeHtileInfo(&input, &output);
+
+ if (returnCode == ADDR_OK)
+ {
+ const UINT_32 numSampleLog2 = Log2(pIn->numSamples);
+ const UINT_32 pipeMask = (1 << m_pipesLog2) - 1;
+ const UINT_32 index = m_htileBaseIndex + numSampleLog2;
+ const UINT_8* patIdxTable = GFX11_HTILE_PATIDX;
+ const UINT_32 blkSizeLog2 = Log2(output.metaBlkWidth) + Log2(output.metaBlkHeight) - 4;
+ const UINT_32 blkMask = (1 << blkSizeLog2) - 1;
+ const UINT_32 blkOffset = ComputeOffsetFromSwizzlePattern(GFX11_HTILE_SW_PATTERN[patIdxTable[index]],
+ blkSizeLog2 + 1, // +1 for nibble offset
+ pIn->x,
+ pIn->y,
+ pIn->slice,
+ 0);
+ const UINT_32 xb = pIn->x / output.metaBlkWidth;
+ const UINT_32 yb = pIn->y / output.metaBlkHeight;
+ const UINT_32 pb = output.pitch / output.metaBlkWidth;
+ const UINT_32 blkIndex = (yb * pb) + xb;
+ const UINT_32 pipeXor = ((pIn->pipeXor & pipeMask) << m_pipeInterleaveLog2) & blkMask;
+
+ pOut->addr = (static_cast<UINT_64>(output.sliceSize) * pIn->slice) +
+ (blkIndex * (1 << blkSizeLog2)) +
+ ((blkOffset >> 1) ^ pipeXor);
+ }
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeHtileCoordFromAddr
+*
+* @brief
+* Interface function stub of AddrComputeHtileCoordFromAddr
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeHtileCoordFromAddr(
+ const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT* pOut) ///< [out] output structure
+{
+ ADDR_NOT_IMPLEMENTED();
+
+ return ADDR_OK;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlSupportComputeDccAddrFromCoord
+*
+* @brief
+* Check whether HwlComputeDccAddrFromCoord() can be done for the input parameter
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlSupportComputeDccAddrFromCoord(
+ const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn)
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if ((pIn->resourceType != ADDR_RSRC_TEX_2D) ||
+ ((pIn->swizzleMode != ADDR_SW_64KB_R_X) &&
+ (pIn->swizzleMode != ADDR_SW_256KB_R_X)) ||
+ (pIn->dccKeyFlags.linear == TRUE) ||
+ (pIn->numFrags > 1) ||
+ (pIn->numMipLevels > 1) ||
+ (pIn->mipId > 0))
+ {
+ returnCode = ADDR_NOTSUPPORTED;
+ }
+ else if ((pIn->pitch == 0) ||
+ (pIn->metaBlkWidth == 0) ||
+ (pIn->metaBlkHeight == 0) ||
+ (pIn->slice > 0 && pIn->dccRamSliceSize == 0))
+ {
+ returnCode = ADDR_NOTSUPPORTED;
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeDccAddrFromCoord
+*
+* @brief
+* Interface function stub of AddrComputeDccAddrFromCoord
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+VOID Gfx11Lib::HwlComputeDccAddrFromCoord(
+ const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT* pOut) ///< [out] output structure
+{
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+ const UINT_32 numPipeLog2 = m_pipesLog2;
+ const UINT_32 pipeMask = (1 << numPipeLog2) - 1;
+ UINT_32 index = m_dccBaseIndex + elemLog2;
+ const UINT_8* patIdxTable = (pIn->swizzleMode == ADDR_SW_64KB_R_X) ?
+ GFX11_DCC_64K_R_X_PATIDX : GFX11_DCC_256K_R_X_PATIDX;
+
+ if (pIn->dccKeyFlags.pipeAligned)
+ {
+ index += MaxNumOfBpp;
+
+ if (m_numPkrLog2 < 2)
+ {
+ index += m_pipesLog2 * MaxNumOfBpp;
+ }
+ else
+ {
+ // 4 groups for "m_numPkrLog2 < 2" case
+ index += 4 * MaxNumOfBpp;
+
+ const UINT_32 dccPipePerPkr = 3;
+
+ index += (m_numPkrLog2 - 2) * dccPipePerPkr * MaxNumOfBpp +
+ (m_pipesLog2 - m_numPkrLog2) * MaxNumOfBpp;
+ }
+ }
+
+ const UINT_32 blkSizeLog2 = Log2(pIn->metaBlkWidth) + Log2(pIn->metaBlkHeight) + elemLog2 - 8;
+ const UINT_32 blkMask = (1 << blkSizeLog2) - 1;
+ const UINT_32 blkOffset = ComputeOffsetFromSwizzlePattern(GFX11_DCC_R_X_SW_PATTERN[patIdxTable[index]],
+ blkSizeLog2 + 1, // +1 for nibble offset
+ pIn->x,
+ pIn->y,
+ pIn->slice,
+ 0);
+ const UINT_32 xb = pIn->x / pIn->metaBlkWidth;
+ const UINT_32 yb = pIn->y / pIn->metaBlkHeight;
+ const UINT_32 pb = pIn->pitch / pIn->metaBlkWidth;
+ const UINT_32 blkIndex = (yb * pb) + xb;
+ const UINT_32 pipeXor = ((pIn->pipeXor & pipeMask) << m_pipeInterleaveLog2) & blkMask;
+
+ pOut->addr = (static_cast<UINT_64>(pIn->dccRamSliceSize) * pIn->slice) +
+ (blkIndex * (1 << blkSizeLog2)) +
+ ((blkOffset >> 1) ^ pipeXor);
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlInitGlobalParams
+*
+* @brief
+* Initializes global parameters
+*
+* @return
+* TRUE if all settings are valid
+*
+************************************************************************************************************************
+*/
+BOOL_32 Gfx11Lib::HwlInitGlobalParams(
+ const ADDR_CREATE_INPUT* pCreateIn) ///< [in] create input
+{
+ BOOL_32 valid = TRUE;
+ GB_ADDR_CONFIG_GFX11 gbAddrConfig;
+
+ gbAddrConfig.u32All = pCreateIn->regValue.gbAddrConfig;
+
+ switch (gbAddrConfig.bits.NUM_PIPES)
+ {
+ case ADDR_CONFIG_1_PIPE:
+ m_pipes = 1;
+ m_pipesLog2 = 0;
+ break;
+ case ADDR_CONFIG_2_PIPE:
+ m_pipes = 2;
+ m_pipesLog2 = 1;
+ break;
+ case ADDR_CONFIG_4_PIPE:
+ m_pipes = 4;
+ m_pipesLog2 = 2;
+ break;
+ case ADDR_CONFIG_8_PIPE:
+ m_pipes = 8;
+ m_pipesLog2 = 3;
+ break;
+ case ADDR_CONFIG_16_PIPE:
+ m_pipes = 16;
+ m_pipesLog2 = 4;
+ break;
+ case ADDR_CONFIG_32_PIPE:
+ m_pipes = 32;
+ m_pipesLog2 = 5;
+ break;
+ case ADDR_CONFIG_64_PIPE:
+ m_pipes = 64;
+ m_pipesLog2 = 6;
+ break;
+ default:
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ break;
+ }
+
+ switch (gbAddrConfig.bits.PIPE_INTERLEAVE_SIZE)
+ {
+ case ADDR_CONFIG_PIPE_INTERLEAVE_256B:
+ m_pipeInterleaveBytes = ADDR_PIPEINTERLEAVE_256B;
+ m_pipeInterleaveLog2 = 8;
+ break;
+ case ADDR_CONFIG_PIPE_INTERLEAVE_512B:
+ m_pipeInterleaveBytes = ADDR_PIPEINTERLEAVE_512B;
+ m_pipeInterleaveLog2 = 9;
+ break;
+ case ADDR_CONFIG_PIPE_INTERLEAVE_1KB:
+ m_pipeInterleaveBytes = ADDR_PIPEINTERLEAVE_1KB;
+ m_pipeInterleaveLog2 = 10;
+ break;
+ case ADDR_CONFIG_PIPE_INTERLEAVE_2KB:
+ m_pipeInterleaveBytes = ADDR_PIPEINTERLEAVE_2KB;
+ m_pipeInterleaveLog2 = 11;
+ break;
+ default:
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ break;
+ }
+
+ // Addr::V2::Lib::ComputePipeBankXor()/ComputeSlicePipeBankXor() requires pipe interleave to be exactly 8 bits, and
+ // any larger value requires a post-process (left shift) on the output pipeBankXor bits.
+ // And more importantly, SW AddrLib doesn't support sw equation/pattern for PI != 256 case.
+ ADDR_ASSERT(m_pipeInterleaveBytes == ADDR_PIPEINTERLEAVE_256B);
+
+ // These fields are deprecated on GFX11; they do nothing on HW.
+ m_maxCompFrag = 1;
+ m_maxCompFragLog2 = 0;
+
+ // Skip unaligned case
+ m_htileBaseIndex += MaxNumOfAA;
+
+ m_htileBaseIndex += m_pipesLog2 * MaxNumOfAA;
+ m_colorBaseIndex += m_pipesLog2 * MaxNumOfBpp;
+
+ m_numPkrLog2 = gbAddrConfig.bits.NUM_PKRS;
+ m_numSaLog2 = (m_numPkrLog2 > 0) ? (m_numPkrLog2 - 1) : 0;
+
+ ADDR_ASSERT((m_numPkrLog2 <= m_pipesLog2) && ((m_pipesLog2 - m_numPkrLog2) <= 2));
+
+ if (m_numPkrLog2 >= 2)
+ {
+ m_colorBaseIndex += (2 * m_numPkrLog2 - 2) * MaxNumOfBpp;
+ m_htileBaseIndex += (m_numPkrLog2 - 1) * 3 * MaxNumOfAA;
+ }
+
+ // There is no so-called VAR swizzle mode on GFX11 and instead there are 4 256KB swizzle modes. Here we treat 256KB
+ // swizzle mode as "VAR" swizzle mode for reusing exising facilities (e.g GetBlockSizeLog2()) provided by base class
+ m_blockVarSizeLog2 = 18;
+
+ if (valid)
+ {
+ InitEquationTable();
+ }
+
+ return valid;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlConvertChipFamily
+*
+* @brief
+* Convert familyID defined in atiid.h to ChipFamily and set m_chipFamily/m_chipRevision
+* @return
+* ChipFamily
+************************************************************************************************************************
+*/
+ChipFamily Gfx11Lib::HwlConvertChipFamily(
+ UINT_32 chipFamily, ///< [in] chip family defined in atiih.h
+ UINT_32 chipRevision) ///< [in] chip revision defined in "asic_family"_id.h
+{
+ ChipFamily family = ADDR_CHIP_FAMILY_NAVI;
+
+ switch (chipFamily)
+ {
+ case FAMILY_GFX1100:
+ if (ASICREV_IS_GFX1100(chipRevision))
+ {
+ }
+ if (ASICREV_IS_GFX1101(chipRevision))
+ {
+ }
+ if (ASICREV_IS_GFX1102(chipRevision))
+ {
+ }
+ break;
+ case FAMILY_GFX1103:
+ if (ASICREV_IS_GFX1103(chipRevision))
+ {
+ }
+ break;
+ default:
+ ADDR_ASSERT(!"Unknown chip family");
+ break;
+ }
+
+ m_configFlags.use32bppFor422Fmt = TRUE;
+
+ return family;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetBlk256SizeLog2
+*
+* @brief
+* Get block 256 size
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+void Gfx11Lib::GetBlk256SizeLog2(
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode, ///< [in] Swizzle mode
+ UINT_32 elemLog2, ///< [in] element size log2
+ UINT_32 numSamplesLog2, ///< [in] number of samples
+ Dim3d* pBlock ///< [out] block size
+ ) const
+{
+ if (IsThin(resourceType, swizzleMode))
+ {
+ UINT_32 blockBits = 8 - elemLog2;
+
+ // On GFX11, Z and R modes are the same thing.
+ if (IsZOrderSwizzle(swizzleMode) || IsRtOptSwizzle(swizzleMode))
+ {
+ blockBits -= numSamplesLog2;
+ }
+
+ pBlock->w = (blockBits >> 1) + (blockBits & 1);
+ pBlock->h = (blockBits >> 1);
+ pBlock->d = 0;
+ }
+ else
+ {
+ ADDR_ASSERT(IsThick(resourceType, swizzleMode));
+
+ UINT_32 blockBits = 8 - elemLog2;
+
+ pBlock->d = (blockBits / 3) + (((blockBits % 3) > 0) ? 1 : 0);
+ pBlock->w = (blockBits / 3) + (((blockBits % 3) > 1) ? 1 : 0);
+ pBlock->h = (blockBits / 3);
+ }
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetCompressedBlockSizeLog2
+*
+* @brief
+* Get compress block size
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+void Gfx11Lib::GetCompressedBlockSizeLog2(
+ Gfx11DataType dataType, ///< [in] Data type
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode, ///< [in] Swizzle mode
+ UINT_32 elemLog2, ///< [in] element size log2
+ UINT_32 numSamplesLog2, ///< [in] number of samples
+ Dim3d* pBlock ///< [out] block size
+ ) const
+{
+ if (dataType == Gfx11DataColor)
+ {
+ GetBlk256SizeLog2(resourceType, swizzleMode, elemLog2, numSamplesLog2, pBlock);
+ }
+ else
+ {
+ ADDR_ASSERT(dataType == Gfx11DataDepthStencil);
+ pBlock->w = 3;
+ pBlock->h = 3;
+ pBlock->d = 0;
+ }
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetMetaOverlapLog2
+*
+* @brief
+* Get meta block overlap
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+INT_32 Gfx11Lib::GetMetaOverlapLog2(
+ Gfx11DataType dataType, ///< [in] Data type
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode, ///< [in] Swizzle mode
+ UINT_32 elemLog2, ///< [in] element size log2
+ UINT_32 numSamplesLog2 ///< [in] number of samples
+ ) const
+{
+ Dim3d compBlock;
+ Dim3d microBlock;
+
+ GetCompressedBlockSizeLog2(dataType, resourceType, swizzleMode, elemLog2, numSamplesLog2, &compBlock);
+ GetBlk256SizeLog2(resourceType, swizzleMode, elemLog2, numSamplesLog2, &microBlock);
+
+ const INT_32 compSizeLog2 = compBlock.w + compBlock.h + compBlock.d;
+ const INT_32 blk256SizeLog2 = microBlock.w + microBlock.h + microBlock.d;
+ const INT_32 maxSizeLog2 = Max(compSizeLog2, blk256SizeLog2);
+ const INT_32 numPipesLog2 = GetEffectiveNumPipes();
+ INT_32 overlap = numPipesLog2 - maxSizeLog2;
+
+ if (numPipesLog2 > 1)
+ {
+ overlap++;
+ }
+
+ // In 16Bpp 8xaa, we lose 1 overlap bit because the block size reduction eats into a pipe anchor bit (y4)
+ if ((elemLog2 == 4) && (numSamplesLog2 == 3))
+ {
+ overlap--;
+ }
+ overlap = Max(overlap, 0);
+ return overlap;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::Get3DMetaOverlapLog2
+*
+* @brief
+* Get 3d meta block overlap
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+INT_32 Gfx11Lib::Get3DMetaOverlapLog2(
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode, ///< [in] Swizzle mode
+ UINT_32 elemLog2 ///< [in] element size log2
+ ) const
+{
+ Dim3d microBlock;
+ GetBlk256SizeLog2(resourceType, swizzleMode, elemLog2, 0, &microBlock);
+
+ INT_32 overlap = GetEffectiveNumPipes() - static_cast<INT_32>(microBlock.w);
+
+ overlap++;
+
+ if ((overlap < 0) || (IsStandardSwizzle(resourceType, swizzleMode) == TRUE))
+ {
+ overlap = 0;
+ }
+ return overlap;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetPipeRotateAmount
+*
+* @brief
+* Get pipe rotate amount
+*
+* @return
+* Pipe rotate amount
+************************************************************************************************************************
+*/
+
+INT_32 Gfx11Lib::GetPipeRotateAmount(
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode ///< [in] Swizzle mode
+ ) const
+{
+ INT_32 amount = 0;
+
+ if ((m_pipesLog2 >= (m_numSaLog2 + 1)) && (m_pipesLog2 > 1))
+ {
+ amount = ((m_pipesLog2 == (m_numSaLog2 + 1)) && IsRbAligned(resourceType, swizzleMode)) ?
+ 1 : m_pipesLog2 - (m_numSaLog2 + 1);
+ }
+
+ return amount;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetMetaBlkSize
+*
+* @brief
+* Get metadata block size
+*
+* @return
+* Meta block size
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::GetMetaBlkSize(
+ Gfx11DataType dataType, ///< [in] Data type
+ AddrResourceType resourceType, ///< [in] Resource type
+ AddrSwizzleMode swizzleMode, ///< [in] Swizzle mode
+ UINT_32 elemLog2, ///< [in] element size log2
+ UINT_32 numSamplesLog2, ///< [in] number of samples
+ BOOL_32 pipeAlign, ///< [in] pipe align
+ Dim3d* pBlock ///< [out] block size
+ ) const
+{
+ INT_32 metablkSizeLog2;
+
+ const INT_32 metaElemSizeLog2 = GetMetaElementSizeLog2(dataType);
+ const INT_32 metaCacheSizeLog2 = GetMetaCacheSizeLog2(dataType);
+ const INT_32 compBlkSizeLog2 = (dataType == Gfx11DataColor) ? 8 : 6 + numSamplesLog2 + elemLog2;
+ const INT_32 metaBlkSamplesLog2 = numSamplesLog2;
+ const INT_32 dataBlkSizeLog2 = GetBlockSizeLog2(swizzleMode);
+ INT_32 numPipesLog2 = m_pipesLog2;
+
+ if (IsThin(resourceType, swizzleMode))
+ {
+ if ((pipeAlign == FALSE) ||
+ (IsStandardSwizzle(resourceType, swizzleMode) == TRUE) ||
+ (IsDisplaySwizzle(resourceType, swizzleMode) == TRUE))
+ {
+ if (pipeAlign)
+ {
+ metablkSizeLog2 = Max(static_cast<INT_32>(m_pipeInterleaveLog2) + numPipesLog2, 12);
+ metablkSizeLog2 = Min(metablkSizeLog2, dataBlkSizeLog2);
+ }
+ else
+ {
+ metablkSizeLog2 = Min(dataBlkSizeLog2, 12);
+ }
+ }
+ else
+ {
+ if ((m_pipesLog2 == m_numSaLog2 + 1) && (m_pipesLog2 > 1))
+ {
+ numPipesLog2++;
+ }
+
+ INT_32 pipeRotateLog2 = GetPipeRotateAmount(resourceType, swizzleMode);
+
+ if (numPipesLog2 >= 4)
+ {
+ INT_32 overlapLog2 = GetMetaOverlapLog2(dataType, resourceType, swizzleMode, elemLog2, numSamplesLog2);
+
+ // In 16Bpe 8xaa, we have an extra overlap bit
+ if ((pipeRotateLog2 > 0) &&
+ (elemLog2 == 4) &&
+ (numSamplesLog2 == 3) &&
+ (IsZOrderSwizzle(swizzleMode) || (GetEffectiveNumPipes() > 3)))
+ {
+ overlapLog2++;
+ }
+
+ metablkSizeLog2 = metaCacheSizeLog2 + overlapLog2 + numPipesLog2;
+ metablkSizeLog2 = Max(metablkSizeLog2, static_cast<INT_32>(m_pipeInterleaveLog2) + numPipesLog2);
+ }
+ else
+ {
+ metablkSizeLog2 = Max(static_cast<INT_32>(m_pipeInterleaveLog2) + numPipesLog2, 12);
+ }
+
+ if (dataType == Gfx11DataDepthStencil)
+ {
+ // For htile surfaces, pad meta block size to 2K * num_pipes
+ metablkSizeLog2 = Max(metablkSizeLog2, 11 + numPipesLog2);
+ }
+
+ const INT_32 compFragLog2 = numSamplesLog2;
+
+ if (IsRtOptSwizzle(swizzleMode) && (compFragLog2 > 1) && (pipeRotateLog2 >= 1))
+ {
+ const INT_32 tmp = 8 + m_pipesLog2 + Max(pipeRotateLog2, compFragLog2 - 1);
+
+ metablkSizeLog2 = Max(metablkSizeLog2, tmp);
+ }
+ }
+
+ const INT_32 metablkBitsLog2 =
+ metablkSizeLog2 + compBlkSizeLog2 - elemLog2 - metaBlkSamplesLog2 - metaElemSizeLog2;
+ pBlock->w = 1 << ((metablkBitsLog2 >> 1) + (metablkBitsLog2 & 1));
+ pBlock->h = 1 << (metablkBitsLog2 >> 1);
+ pBlock->d = 1;
+ }
+ else
+ {
+ ADDR_ASSERT(IsThick(resourceType, swizzleMode));
+
+ if (pipeAlign)
+ {
+ if ((m_pipesLog2 == m_numSaLog2 + 1) &&
+ (m_pipesLog2 > 1) &&
+ IsRbAligned(resourceType, swizzleMode))
+ {
+ numPipesLog2++;
+ }
+
+ const INT_32 overlapLog2 = Get3DMetaOverlapLog2(resourceType, swizzleMode, elemLog2);
+
+ metablkSizeLog2 = metaCacheSizeLog2 + overlapLog2 + numPipesLog2;
+ metablkSizeLog2 = Max(metablkSizeLog2, static_cast<INT_32>(m_pipeInterleaveLog2) + numPipesLog2);
+ metablkSizeLog2 = Max(metablkSizeLog2, 12);
+ }
+ else
+ {
+ metablkSizeLog2 = 12;
+ }
+
+ const INT_32 metablkBitsLog2 =
+ metablkSizeLog2 + compBlkSizeLog2 - elemLog2 - metaBlkSamplesLog2 - metaElemSizeLog2;
+ pBlock->w = 1 << ((metablkBitsLog2 / 3) + (((metablkBitsLog2 % 3) > 0) ? 1 : 0));
+ pBlock->h = 1 << ((metablkBitsLog2 / 3) + (((metablkBitsLog2 % 3) > 1) ? 1 : 0));
+ pBlock->d = 1 << (metablkBitsLog2 / 3);
+ }
+
+ return (1 << static_cast<UINT_32>(metablkSizeLog2));
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ConvertSwizzlePatternToEquation
+*
+* @brief
+* Convert swizzle pattern to equation.
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+VOID Gfx11Lib::ConvertSwizzlePatternToEquation(
+ UINT_32 elemLog2, ///< [in] element bytes log2
+ AddrResourceType rsrcType, ///< [in] resource type
+ AddrSwizzleMode swMode, ///< [in] swizzle mode
+ const ADDR_SW_PATINFO* pPatInfo, ///< [in] swizzle pattern infor
+ ADDR_EQUATION* pEquation) ///< [out] equation converted from swizzle pattern
+ const
+{
+ ADDR_BIT_SETTING fullSwizzlePattern[20];
+ GetSwizzlePatternFromPatternInfo(pPatInfo, fullSwizzlePattern);
+
+ const ADDR_BIT_SETTING* pSwizzle = fullSwizzlePattern;
+ const UINT_32 blockSizeLog2 = GetBlockSizeLog2(swMode);
+
+ pEquation->numBits = blockSizeLog2;
+ pEquation->stackedDepthSlices = FALSE;
+
+ for (UINT_32 i = 0; i < elemLog2; i++)
+ {
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = i;
+ }
+
+ if (IsXor(swMode) == FALSE)
+ {
+ for (UINT_32 i = elemLog2; i < blockSizeLog2; i++)
+ {
+ ADDR_ASSERT(IsPow2(pSwizzle[i].value));
+
+ if (pSwizzle[i].x != 0)
+ {
+ ADDR_ASSERT(IsPow2(static_cast<UINT_32>(pSwizzle[i].x)));
+
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].x) + elemLog2;
+ }
+ else if (pSwizzle[i].y != 0)
+ {
+ ADDR_ASSERT(IsPow2(static_cast<UINT_32>(pSwizzle[i].y)));
+
+ pEquation->addr[i].channel = 1;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].y);
+ }
+ else
+ {
+ ADDR_ASSERT(pSwizzle[i].z != 0);
+ ADDR_ASSERT(IsPow2(static_cast<UINT_32>(pSwizzle[i].z)));
+
+ pEquation->addr[i].channel = 2;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].z);
+ }
+
+ pEquation->xor1[i].value = 0;
+ pEquation->xor2[i].value = 0;
+ }
+ }
+ else if (IsThin(rsrcType, swMode))
+ {
+ Dim3d dim;
+ ComputeThinBlockDimension(&dim.w, &dim.h, &dim.d, 8u << elemLog2, 0, rsrcType, swMode);
+
+ const UINT_32 blkXLog2 = Log2(dim.w);
+ const UINT_32 blkYLog2 = Log2(dim.h);
+ const UINT_32 blkXMask = dim.w - 1;
+ const UINT_32 blkYMask = dim.h - 1;
+
+ ADDR_BIT_SETTING swizzle[ADDR_MAX_EQUATION_BIT];
+ UINT_32 xMask = 0;
+ UINT_32 yMask = 0;
+ UINT_32 bMask = (1 << elemLog2) - 1;
+
+ for (UINT_32 i = elemLog2; i < blockSizeLog2; i++)
+ {
+ if (IsPow2(pSwizzle[i].value))
+ {
+ if (pSwizzle[i].x != 0)
+ {
+ ADDR_ASSERT((xMask & pSwizzle[i].x) == 0);
+ xMask |= pSwizzle[i].x;
+
+ const UINT_32 xLog2 = Log2(pSwizzle[i].x);
+
+ ADDR_ASSERT(xLog2 < blkXLog2);
+
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = xLog2 + elemLog2;
+ }
+ else
+ {
+ ADDR_ASSERT(pSwizzle[i].y != 0);
+ ADDR_ASSERT((yMask & pSwizzle[i].y) == 0);
+ yMask |= pSwizzle[i].y;
+
+ pEquation->addr[i].channel = 1;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].y);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkYLog2);
+ }
+
+ swizzle[i].value = 0;
+ bMask |= 1 << i;
+ }
+ else
+ {
+ if (pSwizzle[i].z != 0)
+ {
+ ADDR_ASSERT(IsPow2(static_cast<UINT_32>(pSwizzle[i].z)));
+
+ pEquation->xor2[i].channel = 2;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(pSwizzle[i].z);
+ }
+
+ swizzle[i].x = pSwizzle[i].x;
+ swizzle[i].y = pSwizzle[i].y;
+ swizzle[i].z = swizzle[i].s = 0;
+
+ ADDR_ASSERT(IsPow2(swizzle[i].value) == FALSE);
+
+ const UINT_32 xHi = swizzle[i].x & (~blkXMask);
+
+ if (xHi != 0)
+ {
+ ADDR_ASSERT(IsPow2(xHi));
+ ADDR_ASSERT(pEquation->xor1[i].value == 0);
+
+ pEquation->xor1[i].channel = 0;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(xHi) + elemLog2;
+
+ swizzle[i].x &= blkXMask;
+ }
+
+ const UINT_32 yHi = swizzle[i].y & (~blkYMask);
+
+ if (yHi != 0)
+ {
+ ADDR_ASSERT(IsPow2(yHi));
+
+ if (xHi == 0)
+ {
+ ADDR_ASSERT(pEquation->xor1[i].value == 0);
+ pEquation->xor1[i].channel = 1;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(yHi);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 1;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(yHi);
+ }
+
+ swizzle[i].y &= blkYMask;
+ }
+
+ if (swizzle[i].value == 0)
+ {
+ bMask |= 1 << i;
+ }
+ }
+ }
+
+ const UINT_32 pipeIntMask = (1 << m_pipeInterleaveLog2) - 1;
+ const UINT_32 blockMask = (1 << blockSizeLog2) - 1;
+
+ ADDR_ASSERT((bMask & pipeIntMask) == pipeIntMask);
+
+ while (bMask != blockMask)
+ {
+ for (UINT_32 i = m_pipeInterleaveLog2; i < blockSizeLog2; i++)
+ {
+ if ((bMask & (1 << i)) == 0)
+ {
+ if (IsPow2(swizzle[i].value))
+ {
+ if (swizzle[i].x != 0)
+ {
+ ADDR_ASSERT((xMask & swizzle[i].x) == 0);
+ xMask |= swizzle[i].x;
+
+ const UINT_32 xLog2 = Log2(swizzle[i].x);
+
+ ADDR_ASSERT(xLog2 < blkXLog2);
+
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = xLog2 + elemLog2;
+ }
+ else
+ {
+ ADDR_ASSERT(swizzle[i].y != 0);
+ ADDR_ASSERT((yMask & swizzle[i].y) == 0);
+ yMask |= swizzle[i].y;
+
+ pEquation->addr[i].channel = 1;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(swizzle[i].y);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkYLog2);
+ }
+
+ swizzle[i].value = 0;
+ bMask |= 1 << i;
+ }
+ else
+ {
+ const UINT_32 x = swizzle[i].x & xMask;
+ const UINT_32 y = swizzle[i].y & yMask;
+
+ if (x != 0)
+ {
+ ADDR_ASSERT(IsPow2(x));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 0;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(x) + elemLog2;
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 0;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(x) + elemLog2;
+ }
+ }
+
+ if (y != 0)
+ {
+ ADDR_ASSERT(IsPow2(y));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 1;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(y);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 1;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(y);
+ }
+ }
+
+ swizzle[i].x &= ~x;
+ swizzle[i].y &= ~y;
+ }
+ }
+ }
+ }
+
+ ADDR_ASSERT((xMask == blkXMask) && (yMask == blkYMask));
+ }
+ else
+ {
+ const Dim3d& blkDim = (blockSizeLog2 == Log2Size256K) ?
+ Block256K_Log2_3d[elemLog2] :
+ ((blockSizeLog2 == Log2Size4K) ? Block4K_Log2_3d[elemLog2] : Block64K_Log2_3d[elemLog2]);
+
+ const UINT_32 blkXLog2 = blkDim.w;
+ const UINT_32 blkYLog2 = blkDim.h;
+ const UINT_32 blkZLog2 = blkDim.d;
+ const UINT_32 blkXMask = (1 << blkXLog2) - 1;
+ const UINT_32 blkYMask = (1 << blkYLog2) - 1;
+ const UINT_32 blkZMask = (1 << blkZLog2) - 1;
+
+ ADDR_BIT_SETTING swizzle[ADDR_MAX_EQUATION_BIT] = {};
+ UINT_32 xMask = 0;
+ UINT_32 yMask = 0;
+ UINT_32 zMask = 0;
+ UINT_32 bMask = (1 << elemLog2) - 1;
+
+ for (UINT_32 i = elemLog2; i < blockSizeLog2; i++)
+ {
+ if (IsPow2(pSwizzle[i].value))
+ {
+ if (pSwizzle[i].x != 0)
+ {
+ ADDR_ASSERT((xMask & pSwizzle[i].x) == 0);
+ xMask |= pSwizzle[i].x;
+
+ const UINT_32 xLog2 = Log2(pSwizzle[i].x);
+
+ ADDR_ASSERT(xLog2 < blkXLog2);
+
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = xLog2 + elemLog2;
+ }
+ else if (pSwizzle[i].y != 0)
+ {
+ ADDR_ASSERT((yMask & pSwizzle[i].y) == 0);
+ yMask |= pSwizzle[i].y;
+
+ pEquation->addr[i].channel = 1;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].y);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkYLog2);
+ }
+ else
+ {
+ ADDR_ASSERT(pSwizzle[i].z != 0);
+ ADDR_ASSERT((zMask & pSwizzle[i].z) == 0);
+ zMask |= pSwizzle[i].z;
+
+ pEquation->addr[i].channel = 2;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(pSwizzle[i].z);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkZLog2);
+ }
+
+ swizzle[i].value = 0;
+ bMask |= 1 << i;
+ }
+ else
+ {
+ swizzle[i].x = pSwizzle[i].x;
+ swizzle[i].y = pSwizzle[i].y;
+ swizzle[i].z = pSwizzle[i].z;
+ swizzle[i].s = 0;
+
+ ADDR_ASSERT(IsPow2(swizzle[i].value) == FALSE);
+
+ const UINT_32 xHi = swizzle[i].x & (~blkXMask);
+ const UINT_32 yHi = swizzle[i].y & (~blkYMask);
+ const UINT_32 zHi = swizzle[i].z & (~blkZMask);
+
+ ADDR_ASSERT((xHi == 0) || (yHi== 0) || (zHi == 0));
+
+ if (xHi != 0)
+ {
+ ADDR_ASSERT(IsPow2(xHi));
+ ADDR_ASSERT(pEquation->xor1[i].value == 0);
+
+ pEquation->xor1[i].channel = 0;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(xHi) + elemLog2;
+
+ swizzle[i].x &= blkXMask;
+ }
+
+ if (yHi != 0)
+ {
+ ADDR_ASSERT(IsPow2(yHi));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 1;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(yHi);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 1;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(yHi);
+ }
+
+ swizzle[i].y &= blkYMask;
+ }
+
+ if (zHi != 0)
+ {
+ ADDR_ASSERT(IsPow2(zHi));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 2;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(zHi);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 2;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(zHi);
+ }
+
+ swizzle[i].z &= blkZMask;
+ }
+
+ if (swizzle[i].value == 0)
+ {
+ bMask |= 1 << i;
+ }
+ }
+ }
+
+ const UINT_32 pipeIntMask = (1 << m_pipeInterleaveLog2) - 1;
+ const UINT_32 blockMask = (1 << blockSizeLog2) - 1;
+
+ ADDR_ASSERT((bMask & pipeIntMask) == pipeIntMask);
+
+ while (bMask != blockMask)
+ {
+ for (UINT_32 i = m_pipeInterleaveLog2; i < blockSizeLog2; i++)
+ {
+ if ((bMask & (1 << i)) == 0)
+ {
+ if (IsPow2(swizzle[i].value))
+ {
+ if (swizzle[i].x != 0)
+ {
+ ADDR_ASSERT((xMask & swizzle[i].x) == 0);
+ xMask |= swizzle[i].x;
+
+ const UINT_32 xLog2 = Log2(swizzle[i].x);
+
+ ADDR_ASSERT(xLog2 < blkXLog2);
+
+ pEquation->addr[i].channel = 0;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = xLog2 + elemLog2;
+ }
+ else if (swizzle[i].y != 0)
+ {
+ ADDR_ASSERT((yMask & swizzle[i].y) == 0);
+ yMask |= swizzle[i].y;
+
+ pEquation->addr[i].channel = 1;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(swizzle[i].y);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkYLog2);
+ }
+ else
+ {
+ ADDR_ASSERT(swizzle[i].z != 0);
+ ADDR_ASSERT((zMask & swizzle[i].z) == 0);
+ zMask |= swizzle[i].z;
+
+ pEquation->addr[i].channel = 2;
+ pEquation->addr[i].valid = 1;
+ pEquation->addr[i].index = Log2(swizzle[i].z);
+
+ ADDR_ASSERT(pEquation->addr[i].index < blkZLog2);
+ }
+
+ swizzle[i].value = 0;
+ bMask |= 1 << i;
+ }
+ else
+ {
+ const UINT_32 x = swizzle[i].x & xMask;
+ const UINT_32 y = swizzle[i].y & yMask;
+ const UINT_32 z = swizzle[i].z & zMask;
+
+ if (x != 0)
+ {
+ ADDR_ASSERT(IsPow2(x));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 0;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(x) + elemLog2;
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 0;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(x) + elemLog2;
+ }
+ }
+
+ if (y != 0)
+ {
+ ADDR_ASSERT(IsPow2(y));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 1;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(y);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 1;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(y);
+ }
+ }
+
+ if (z != 0)
+ {
+ ADDR_ASSERT(IsPow2(z));
+
+ if (pEquation->xor1[i].value == 0)
+ {
+ pEquation->xor1[i].channel = 2;
+ pEquation->xor1[i].valid = 1;
+ pEquation->xor1[i].index = Log2(z);
+ }
+ else
+ {
+ ADDR_ASSERT(pEquation->xor2[i].value == 0);
+ pEquation->xor2[i].channel = 2;
+ pEquation->xor2[i].valid = 1;
+ pEquation->xor2[i].index = Log2(z);
+ }
+ }
+
+ swizzle[i].x &= ~x;
+ swizzle[i].y &= ~y;
+ swizzle[i].z &= ~z;
+ }
+ }
+ }
+ }
+
+ ADDR_ASSERT((xMask == blkXMask) && (yMask == blkYMask) && (zMask == blkZMask));
+ }
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::InitEquationTable
+*
+* @brief
+* Initialize Equation table.
+*
+* @return
+* N/A
+************************************************************************************************************************
+*/
+VOID Gfx11Lib::InitEquationTable()
+{
+ memset(m_equationTable, 0, sizeof(m_equationTable));
+
+ for (UINT_32 rsrcTypeIdx = 0; rsrcTypeIdx < MaxRsrcType; rsrcTypeIdx++)
+ {
+ const AddrResourceType rsrcType = static_cast<AddrResourceType>(rsrcTypeIdx + ADDR_RSRC_TEX_2D);
+
+ for (UINT_32 swModeIdx = 0; swModeIdx < MaxSwModeType; swModeIdx++)
+ {
+ const AddrSwizzleMode swMode = static_cast<AddrSwizzleMode>(swModeIdx);
+
+ for (UINT_32 elemLog2 = 0; elemLog2 < MaxElementBytesLog2; elemLog2++)
+ {
+ UINT_32 equationIndex = ADDR_INVALID_EQUATION_INDEX;
+ const ADDR_SW_PATINFO* pPatInfo = GetSwizzlePatternInfo(swMode, rsrcType, elemLog2, 1);
+
+ if (pPatInfo != NULL)
+ {
+ ADDR_ASSERT(IsValidSwMode(swMode));
+
+ if (pPatInfo->maxItemCount <= 3)
+ {
+ ADDR_EQUATION equation = {};
+
+ ConvertSwizzlePatternToEquation(elemLog2, rsrcType, swMode, pPatInfo, &equation);
+
+ equationIndex = m_numEquations;
+ ADDR_ASSERT(equationIndex < EquationTableSize);
+
+ m_equationTable[equationIndex] = equation;
+
+ m_numEquations++;
+ }
+ else
+ {
+ // We only see "ill" equation from 64/128 BPE + 3D resource + SW_64KB_D_X
+ ADDR_ASSERT((elemLog2 == 3) || (elemLog2 == 4));
+ ADDR_ASSERT(rsrcType == ADDR_RSRC_TEX_3D);
+ ADDR_ASSERT(swMode == ADDR_SW_64KB_D_X);
+ }
+ }
+
+ m_equationLookupTable[rsrcTypeIdx][swModeIdx][elemLog2] = equationIndex;
+ }
+ }
+ }
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlGetEquationIndex
+*
+* @brief
+* Interface function stub of GetEquationIndex
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::HwlGetEquationIndex(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ UINT_32 equationIdx = ADDR_INVALID_EQUATION_INDEX;
+
+ if ((pIn->resourceType == ADDR_RSRC_TEX_2D) ||
+ (pIn->resourceType == ADDR_RSRC_TEX_3D))
+ {
+ const UINT_32 rsrcTypeIdx = static_cast<UINT_32>(pIn->resourceType) - 1;
+ const UINT_32 swModeIdx = static_cast<UINT_32>(pIn->swizzleMode);
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+
+ equationIdx = m_equationLookupTable[rsrcTypeIdx][swModeIdx][elemLog2];
+ }
+
+ if (pOut->pMipInfo != NULL)
+ {
+ for (UINT_32 i = 0; i < pIn->numMipLevels; i++)
+ {
+ pOut->pMipInfo[i].equationIndex = equationIdx;
+ }
+ }
+
+ return equationIdx;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetValidDisplaySwizzleModes
+*
+* @brief
+* Get valid swizzle modes mask for displayable surface
+*
+* @return
+* Valid swizzle modes mask for displayable surface
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::GetValidDisplaySwizzleModes(
+ UINT_32 bpp
+ ) const
+{
+ UINT_32 swModeMask = 0;
+
+ if (bpp <= 64)
+ {
+ swModeMask = Dcn32SwModeMask;
+ }
+
+ return swModeMask;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::IsValidDisplaySwizzleMode
+*
+* @brief
+* Check if a swizzle mode is supported by display engine
+*
+* @return
+* TRUE is swizzle mode is supported by display engine
+************************************************************************************************************************
+*/
+BOOL_32 Gfx11Lib::IsValidDisplaySwizzleMode(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn ///< [in] input structure
+ ) const
+{
+ ADDR_ASSERT(pIn->resourceType == ADDR_RSRC_TEX_2D);
+
+ return (GetValidDisplaySwizzleModes(pIn->bpp) & (1 << pIn->swizzleMode)) ? TRUE : FALSE;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetMaxNumMipsInTail
+*
+* @brief
+* Return max number of mips in tails
+*
+* @return
+* Max number of mips in tails
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::GetMaxNumMipsInTail(
+ UINT_32 blockSizeLog2, ///< block size log2
+ BOOL_32 isThin ///< is thin or thick
+ ) const
+{
+ UINT_32 effectiveLog2 = blockSizeLog2;
+
+ if (isThin == FALSE)
+ {
+ effectiveLog2 -= (blockSizeLog2 - 8) / 3;
+ }
+
+ return (effectiveLog2 <= 11) ? (1 + (1 << (effectiveLog2 - 9))) : (effectiveLog2 - 4);
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputePipeBankXor
+*
+* @brief
+* Generate a PipeBankXor value to be ORed into bits above pipeInterleaveBits of address
+*
+* @return
+* PipeBankXor value
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputePipeBankXor(
+ const ADDR2_COMPUTE_PIPEBANKXOR_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ if (IsNonPrtXor(pIn->swizzleMode))
+ {
+ pOut->pipeBankXor = 0;
+ }
+ else
+ {
+ pOut->pipeBankXor = 0;
+ }
+
+ return ADDR_OK;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSlicePipeBankXor
+*
+* @brief
+* Generate slice PipeBankXor value based on base PipeBankXor value and slice id
+*
+* @return
+* PipeBankXor value
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSlicePipeBankXor(
+ const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if (IsNonPrtXor(pIn->swizzleMode))
+ {
+ if (pIn->bpe == 0)
+ {
+ ADDR_ASSERT_ALWAYS();
+
+ // Require a valid bytes-per-element value passed from client...
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ else
+ {
+ const ADDR_SW_PATINFO* pPatInfo = GetSwizzlePatternInfo(pIn->swizzleMode,
+ pIn->resourceType,
+ Log2(pIn->bpe >> 3),
+ 1);
+
+ if (pPatInfo != NULL)
+ {
+ ADDR_BIT_SETTING fullSwizzlePattern[20];
+ GetSwizzlePatternFromPatternInfo(pPatInfo, fullSwizzlePattern);
+
+ const UINT_32 pipeBankXorOffset =
+ ComputeOffsetFromSwizzlePattern(reinterpret_cast<const UINT_64*>(fullSwizzlePattern),
+ GetBlockSizeLog2(pIn->swizzleMode),
+ 0,
+ 0,
+ pIn->slice,
+ 0);
+
+ const UINT_32 pipeBankXor = pipeBankXorOffset >> m_pipeInterleaveLog2;
+
+ // Should have no bit set under pipe interleave
+ ADDR_ASSERT((pipeBankXor << m_pipeInterleaveLog2) == pipeBankXorOffset);
+
+ pOut->pipeBankXor = pIn->basePipeBankXor ^ pipeBankXor;
+ }
+ else
+ {
+ // Should never come here...
+ ADDR_NOT_IMPLEMENTED();
+
+ returnCode = ADDR_NOTSUPPORTED;
+ }
+ }
+ }
+ else
+ {
+ pOut->pipeBankXor = 0;
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSubResourceOffsetForSwizzlePattern
+*
+* @brief
+* Compute sub resource offset to support swizzle pattern
+*
+* @return
+* Offset
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSubResourceOffsetForSwizzlePattern(
+ const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_ASSERT(IsThin(pIn->resourceType, pIn->swizzleMode));
+
+ pOut->offset = pIn->slice * pIn->sliceSize + pIn->macroBlockOffset;
+
+ return ADDR_OK;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeNonBlockCompressedView
+*
+* @brief
+* Compute non-block-compressed view for a given mipmap level/slice.
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeNonBlockCompressedView(
+ const ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if (pIn->resourceType != ADDR_RSRC_TEX_2D)
+ {
+ // Only 2D resource can have a NonBC view...
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ else if ((pIn->format != ADDR_FMT_ASTC_8x8) &&
+ ((pIn->format < ADDR_FMT_BC1) || (pIn->format > ADDR_FMT_BC7)))
+ {
+ // Only support BC1~BC7 or ASTC_8x8 for now...
+ returnCode = ADDR_NOTSUPPORTED;
+ }
+ else
+ {
+ UINT_32 bcWidth, bcHeight;
+ UINT_32 bpp = GetElemLib()->GetBitsPerPixel(pIn->format, NULL, &bcWidth, &bcHeight);
+
+ ADDR2_COMPUTE_SURFACE_INFO_INPUT infoIn = {};
+ infoIn.flags = pIn->flags;
+ infoIn.swizzleMode = pIn->swizzleMode;
+ infoIn.resourceType = pIn->resourceType;
+ infoIn.bpp = bpp;
+ infoIn.width = PowTwoAlign(pIn->width, bcWidth) / bcWidth;
+ infoIn.height = PowTwoAlign(pIn->height, bcHeight) / bcHeight;
+ infoIn.numSlices = pIn->numSlices;
+ infoIn.numMipLevels = pIn->numMipLevels;
+ infoIn.numSamples = 1;
+ infoIn.numFrags = 1;
+
+ ADDR2_MIP_INFO mipInfo[MaxMipLevels] = {};
+
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT infoOut = {};
+ infoOut.pMipInfo = mipInfo;
+
+ const BOOL_32 tiled = (pIn->swizzleMode != ADDR_SW_LINEAR) ? TRUE : FALSE;
+
+ if (tiled)
+ {
+ returnCode = HwlComputeSurfaceInfoTiled(&infoIn, &infoOut);
+ }
+ else
+ {
+ returnCode = HwlComputeSurfaceInfoLinear(&infoIn, &infoOut);
+ }
+
+ if (returnCode == ADDR_OK)
+ {
+ ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT subOffIn = {};
+ subOffIn.swizzleMode = infoIn.swizzleMode;
+ subOffIn.resourceType = infoIn.resourceType;
+ subOffIn.slice = pIn->slice;
+ subOffIn.sliceSize = infoOut.sliceSize;
+ subOffIn.macroBlockOffset = mipInfo[pIn->mipId].macroBlockOffset;
+ subOffIn.mipTailOffset = mipInfo[pIn->mipId].mipTailOffset;
+
+ ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT subOffOut = {};
+
+ // For any mipmap level, move nonBc view base address by offset
+ HwlComputeSubResourceOffsetForSwizzlePattern(&subOffIn, &subOffOut);
+ pOut->offset = subOffOut.offset;
+
+ ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT slicePbXorIn = {};
+ slicePbXorIn.bpe = infoIn.bpp;
+ slicePbXorIn.swizzleMode = infoIn.swizzleMode;
+ slicePbXorIn.resourceType = infoIn.resourceType;
+ slicePbXorIn.basePipeBankXor = pIn->pipeBankXor;
+ slicePbXorIn.slice = pIn->slice;
+
+ ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT slicePbXorOut = {};
+
+ // For any mipmap level, nonBc view should use computed pbXor
+ HwlComputeSlicePipeBankXor(&slicePbXorIn, &slicePbXorOut);
+ pOut->pipeBankXor = slicePbXorOut.pipeBankXor;
+
+ const BOOL_32 inTail = tiled && (pIn->mipId >= infoOut.firstMipIdInTail) ? TRUE : FALSE;
+ const UINT_32 requestMipWidth = PowTwoAlign(Max(pIn->width >> pIn->mipId, 1u), bcWidth) / bcWidth;
+ const UINT_32 requestMipHeight = PowTwoAlign(Max(pIn->height >> pIn->mipId, 1u), bcHeight) / bcHeight;
+
+ if (inTail)
+ {
+ // For mipmap level that is in mip tail block, hack a lot of things...
+ // Basically all mipmap levels in tail block will be viewed as a small mipmap chain that all levels
+ // are fit in tail block:
+
+ // - mipId = relative mip id (which is counted from first mip ID in tail in original mip chain)
+ pOut->mipId = pIn->mipId - infoOut.firstMipIdInTail;
+
+ // - at least 2 mipmap levels (since only 1 mipmap level will not be viewed as mipmap!)
+ pOut->numMipLevels = Max(infoIn.numMipLevels - infoOut.firstMipIdInTail, 2u);
+
+ // - (mip0) width = requestMipWidth << mipId, the value can't exceed mip tail dimension threshold
+ pOut->unalignedWidth = Min(requestMipWidth << pOut->mipId, infoOut.blockWidth / 2);
+
+ // - (mip0) height = requestMipHeight << mipId, the value can't exceed mip tail dimension threshold
+ pOut->unalignedHeight = Min(requestMipHeight << pOut->mipId, infoOut.blockHeight);
+ }
+ // This check should cover at least mipId == 0
+ else if (requestMipWidth << pIn->mipId == infoIn.width)
+ {
+ // For mipmap level [N] that is not in mip tail block and downgraded without losing element:
+ // - only one mipmap level and mipId = 0
+ pOut->mipId = 0;
+ pOut->numMipLevels = 1;
+
+ // (mip0) width = requestMipWidth
+ pOut->unalignedWidth = requestMipWidth;
+
+ // (mip0) height = requestMipHeight
+ pOut->unalignedHeight = requestMipHeight;
+ }
+ else
+ {
+ // For mipmap level [N] that is not in mip tail block and downgraded with element losing,
+ // We have to make it a multiple mipmap view (2 levels view here), add one extra element if needed,
+ // because single mip view may have different pitch value than original (multiple) mip view...
+ // A simple case would be:
+ // - 64KB block swizzle mode, 8 Bytes-Per-Element. Block dim = [0x80, 0x40]
+ // - 2 mipmap levels with API mip0 width = 0x401/mip1 width = 0x200 and non-BC view
+ // mip0 width = 0x101/mip1 width = 0x80
+ // By multiple mip view, the pitch for mip level 1 would be 0x100 bytes, due to rounding up logic in
+ // GetMipSize(), and by single mip level view the pitch will only be 0x80 bytes.
+
+ // - 2 levels and mipId = 1
+ pOut->mipId = 1;
+ pOut->numMipLevels = 2;
+
+ const UINT_32 upperMipWidth =
+ PowTwoAlign(Max(pIn->width >> (pIn->mipId - 1), 1u), bcWidth) / bcWidth;
+ const UINT_32 upperMipHeight =
+ PowTwoAlign(Max(pIn->height >> (pIn->mipId - 1), 1u), bcHeight) / bcHeight;
+
+ const BOOL_32 needToAvoidInTail =
+ tiled && (requestMipWidth <= infoOut.blockWidth / 2) && (requestMipHeight <= infoOut.blockHeight) ?
+ TRUE : FALSE;
+
+ const UINT_32 hwMipWidth = PowTwoAlign(ShiftCeil(infoIn.width, pIn->mipId), infoOut.blockWidth);
+ const UINT_32 hwMipHeight = PowTwoAlign(ShiftCeil(infoIn.height, pIn->mipId), infoOut.blockHeight);
+
+ const BOOL_32 needExtraWidth =
+ ((upperMipWidth < requestMipWidth * 2) ||
+ ((upperMipWidth == requestMipWidth * 2) &&
+ ((needToAvoidInTail == TRUE) ||
+ (hwMipWidth > PowTwoAlign(requestMipWidth, infoOut.blockWidth))))) ? TRUE : FALSE;
+
+ const BOOL_32 needExtraHeight =
+ ((upperMipHeight < requestMipHeight * 2) ||
+ ((upperMipHeight == requestMipHeight * 2) &&
+ ((needToAvoidInTail == TRUE) ||
+ (hwMipHeight > PowTwoAlign(requestMipHeight, infoOut.blockHeight))))) ? TRUE : FALSE;
+
+ // (mip0) width = requestLastMipLevelWidth
+ pOut->unalignedWidth = upperMipWidth + (needExtraWidth ? 1: 0);
+
+ // (mip0) height = requestLastMipLevelHeight
+ pOut->unalignedHeight = upperMipHeight + (needExtraHeight ? 1: 0);
+ }
+
+ // Assert the downgrading from this mip[0] width would still generate correct mip[N] width
+ ADDR_ASSERT(ShiftRight(pOut->unalignedWidth, pOut->mipId) == requestMipWidth);
+ // Assert the downgrading from this mip[0] height would still generate correct mip[N] height
+ ADDR_ASSERT(ShiftRight(pOut->unalignedHeight, pOut->mipId) == requestMipHeight);
+ }
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ValidateNonSwModeParams
+*
+* @brief
+* Validate compute surface info params except swizzle mode
+*
+* @return
+* TRUE if parameters are valid, FALSE otherwise
+************************************************************************************************************************
+*/
+BOOL_32 Gfx11Lib::ValidateNonSwModeParams(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const
+{
+ BOOL_32 valid = TRUE;
+
+ if ((pIn->bpp == 0) || (pIn->bpp > 128) || (pIn->width == 0) || (pIn->numFrags > 8))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ else if (pIn->flags.fmask == 1)
+ {
+ // There is no FMASK for GFX11 ASICs
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ else if (pIn->numSamples > 8)
+ {
+ // There is no EQAA support for GFX11 ASICs, so the max number of sample is 8
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ else if ((pIn->numFrags != 0) && (pIn->numSamples != pIn->numFrags))
+ {
+ // There is no EQAA support for GFX11 ASICs, so the number of sample has to be same as number of fragment
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ const ADDR2_SURFACE_FLAGS flags = pIn->flags;
+ const AddrResourceType rsrcType = pIn->resourceType;
+ const BOOL_32 mipmap = (pIn->numMipLevels > 1);
+ const BOOL_32 msaa = (pIn->numSamples > 1);
+ const BOOL_32 display = flags.display;
+ const BOOL_32 tex3d = IsTex3d(rsrcType);
+ const BOOL_32 tex2d = IsTex2d(rsrcType);
+ const BOOL_32 tex1d = IsTex1d(rsrcType);
+ const BOOL_32 stereo = flags.qbStereo;
+
+ // Resource type check
+ if (tex1d)
+ {
+ if (msaa || display || stereo)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (tex2d)
+ {
+ if ((msaa && mipmap) || (stereo && msaa) || (stereo && mipmap))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (tex3d)
+ {
+ if (msaa || display || stereo)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ return valid;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ValidateSwModeParams
+*
+* @brief
+* Validate compute surface info related to swizzle mode
+*
+* @return
+* TRUE if parameters are valid, FALSE otherwise
+************************************************************************************************************************
+*/
+BOOL_32 Gfx11Lib::ValidateSwModeParams(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const
+{
+ BOOL_32 valid = TRUE;
+
+ if (pIn->swizzleMode >= ADDR_SW_MAX_TYPE)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ else if (IsValidSwMode(pIn->swizzleMode) == FALSE)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ const ADDR2_SURFACE_FLAGS flags = pIn->flags;
+ const AddrResourceType rsrcType = pIn->resourceType;
+ const AddrSwizzleMode swizzle = pIn->swizzleMode;
+ const BOOL_32 msaa = (pIn->numSamples > 1);
+ const BOOL_32 zbuffer = flags.depth || flags.stencil;
+ const BOOL_32 color = flags.color;
+ const BOOL_32 display = flags.display;
+ const BOOL_32 tex3d = IsTex3d(rsrcType);
+ const BOOL_32 tex2d = IsTex2d(rsrcType);
+ const BOOL_32 tex1d = IsTex1d(rsrcType);
+ const BOOL_32 thin3d = flags.view3dAs2dArray;
+ const BOOL_32 linear = IsLinear(swizzle);
+ const BOOL_32 blk256B = IsBlock256b(swizzle);
+ const BOOL_32 isNonPrtXor = IsNonPrtXor(swizzle);
+ const BOOL_32 prt = flags.prt;
+
+ // Misc check
+ if (msaa && (GetBlockSize(swizzle) < (m_pipeInterleaveBytes * pIn->numSamples)))
+ {
+ // MSAA surface must have blk_bytes/pipe_interleave >= num_samples
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ if (display && (IsValidDisplaySwizzleMode(pIn) == FALSE))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ if ((pIn->bpp == 96) && (linear == FALSE))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ const UINT_32 swizzleMask = 1 << swizzle;
+
+ // Resource type check
+ if (tex1d)
+ {
+ if ((swizzleMask & Gfx11Rsrc1dSwModeMask) == 0)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (tex2d)
+ {
+ if ((swizzleMask & Gfx11Rsrc2dSwModeMask) == 0)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ else if (prt && ((swizzleMask & Gfx11Rsrc2dPrtSwModeMask) == 0))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (tex3d)
+ {
+ if (((swizzleMask & Gfx11Rsrc3dSwModeMask) == 0) ||
+ (prt && ((swizzleMask & Gfx11Rsrc3dPrtSwModeMask) == 0)) ||
+ (thin3d && ((swizzleMask & Gfx11Rsrc3dThinSwModeMask) == 0)))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+
+ // Swizzle type check
+ if (linear)
+ {
+ if (zbuffer || msaa || (pIn->bpp == 0) || ((pIn->bpp % 8) != 0))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (IsZOrderSwizzle(swizzle))
+ {
+ if ((pIn->bpp > 64) ||
+ (msaa && (color || (pIn->bpp > 32))) ||
+ ElemLib::IsBlockCompressed(pIn->format) ||
+ ElemLib::IsMacroPixelPacked(pIn->format))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (IsStandardSwizzle(rsrcType, swizzle))
+ {
+ if (zbuffer || msaa)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (IsDisplaySwizzle(rsrcType, swizzle))
+ {
+ if (zbuffer || msaa)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else if (IsRtOptSwizzle(swizzle))
+ {
+ if (zbuffer)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ // Block type check
+ if (blk256B)
+ {
+ if (zbuffer || tex3d || msaa)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+ }
+
+ return valid;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSurfaceInfoSanityCheck
+*
+* @brief
+* Compute surface info sanity check
+*
+* @return
+* Offset
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSurfaceInfoSanityCheck(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn ///< [in] input structure
+ ) const
+{
+ return ValidateNonSwModeParams(pIn) && ValidateSwModeParams(pIn) ? ADDR_OK : ADDR_INVALIDPARAMS;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlGetPreferredSurfaceSetting
+*
+* @brief
+* Internal function to get suggested surface information for cliet to use
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlGetPreferredSurfaceSetting(
+ const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn, ///< [in] input structure
+ ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if (pIn->flags.fmask)
+ {
+ // There is no FMASK for GFX11 ASICs.
+ ADDR_ASSERT_ALWAYS();
+
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ else
+ {
+ UINT_32 bpp = pIn->bpp;
+ UINT_32 width = Max(pIn->width, 1u);
+ UINT_32 height = Max(pIn->height, 1u);
+
+ // Set format to INVALID will skip this conversion
+ if (pIn->format != ADDR_FMT_INVALID)
+ {
+ ElemMode elemMode = ADDR_UNCOMPRESSED;
+ UINT_32 expandX, expandY;
+
+ // Get compression/expansion factors and element mode which indicates compression/expansion
+ bpp = GetElemLib()->GetBitsPerPixel(pIn->format,
+ &elemMode,
+ &expandX,
+ &expandY);
+
+ UINT_32 basePitch = 0;
+ GetElemLib()->AdjustSurfaceInfo(elemMode,
+ expandX,
+ expandY,
+ &bpp,
+ &basePitch,
+ &width,
+ &height);
+ }
+
+ const UINT_32 numSlices = Max(pIn->numSlices, 1u);
+ const UINT_32 numMipLevels = Max(pIn->numMipLevels, 1u);
+ const UINT_32 numSamples = Max(pIn->numSamples, 1u);
+ const BOOL_32 msaa = numSamples > 1;
+
+ // Pre sanity check on non swizzle mode parameters
+ ADDR2_COMPUTE_SURFACE_INFO_INPUT localIn = {};
+ localIn.flags = pIn->flags;
+ localIn.resourceType = pIn->resourceType;
+ localIn.format = pIn->format;
+ localIn.bpp = bpp;
+ localIn.width = width;
+ localIn.height = height;
+ localIn.numSlices = numSlices;
+ localIn.numMipLevels = numMipLevels;
+ localIn.numSamples = numSamples;
+ localIn.numFrags = numSamples;
+
+ if (ValidateNonSwModeParams(&localIn))
+ {
+ // Forbid swizzle mode(s) by client setting
+ ADDR2_SWMODE_SET allowedSwModeSet = {};
+ allowedSwModeSet.value |= pIn->forbiddenBlock.linear ? 0 : Gfx11LinearSwModeMask;
+ allowedSwModeSet.value |= pIn->forbiddenBlock.micro ? 0 : Gfx11Blk256BSwModeMask;
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.macroThin4KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? 0 : Gfx11Blk4KBSwModeMask);
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.macroThick4KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? Gfx11Rsrc3dThick4KBSwModeMask : 0);
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.macroThin64KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? Gfx11Rsrc3dThin64KBSwModeMask : Gfx11Blk64KBSwModeMask);
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.macroThick64KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? Gfx11Rsrc3dThick64KBSwModeMask : 0);
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.gfx11.thin256KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? Gfx11Rsrc3dThin256KBSwModeMask : Gfx11Blk256KBSwModeMask);
+ allowedSwModeSet.value |=
+ pIn->forbiddenBlock.gfx11.thick256KB ? 0 :
+ ((pIn->resourceType == ADDR_RSRC_TEX_3D) ? Gfx11Rsrc3dThick256KBSwModeMask : 0);
+
+ if (pIn->preferredSwSet.value != 0)
+ {
+ allowedSwModeSet.value &= pIn->preferredSwSet.sw_Z ? ~0 : ~Gfx11ZSwModeMask;
+ allowedSwModeSet.value &= pIn->preferredSwSet.sw_S ? ~0 : ~Gfx11StandardSwModeMask;
+ allowedSwModeSet.value &= pIn->preferredSwSet.sw_D ? ~0 : ~Gfx11DisplaySwModeMask;
+ allowedSwModeSet.value &= pIn->preferredSwSet.sw_R ? ~0 : ~Gfx11RenderSwModeMask;
+ }
+
+ if (pIn->noXor)
+ {
+ allowedSwModeSet.value &= ~Gfx11XorSwModeMask;
+ }
+
+ if (pIn->maxAlign > 0)
+ {
+ if (pIn->maxAlign < Size256K)
+ {
+ allowedSwModeSet.value &= ~Gfx11Blk256KBSwModeMask;
+ }
+
+ if (pIn->maxAlign < Size64K)
+ {
+ allowedSwModeSet.value &= ~Gfx11Blk64KBSwModeMask;
+ }
+
+ if (pIn->maxAlign < Size4K)
+ {
+ allowedSwModeSet.value &= ~Gfx11Blk4KBSwModeMask;
+ }
+
+ if (pIn->maxAlign < Size256)
+ {
+ allowedSwModeSet.value &= ~Gfx11Blk256BSwModeMask;
+ }
+ }
+
+ // Filter out invalid swizzle mode(s) by image attributes and HW restrictions
+ switch (pIn->resourceType)
+ {
+ case ADDR_RSRC_TEX_1D:
+ allowedSwModeSet.value &= Gfx11Rsrc1dSwModeMask;
+ break;
+
+ case ADDR_RSRC_TEX_2D:
+ allowedSwModeSet.value &= pIn->flags.prt ? Gfx11Rsrc2dPrtSwModeMask : Gfx11Rsrc2dSwModeMask;
+ break;
+
+ case ADDR_RSRC_TEX_3D:
+ allowedSwModeSet.value &= pIn->flags.prt ? Gfx11Rsrc3dPrtSwModeMask : Gfx11Rsrc3dSwModeMask;
+
+ if (pIn->flags.view3dAs2dArray)
+ {
+ allowedSwModeSet.value &= Gfx11Rsrc3dThinSwModeMask;
+ }
+ break;
+
+ default:
+ ADDR_ASSERT_ALWAYS();
+ allowedSwModeSet.value = 0;
+ break;
+ }
+
+ if (ElemLib::IsBlockCompressed(pIn->format) ||
+ ElemLib::IsMacroPixelPacked(pIn->format) ||
+ (bpp > 64) ||
+ (msaa && ((bpp > 32) || pIn->flags.color || pIn->flags.unordered)))
+ {
+ allowedSwModeSet.value &= ~Gfx11ZSwModeMask;
+ }
+
+ if (pIn->format == ADDR_FMT_32_32_32)
+ {
+ allowedSwModeSet.value &= Gfx11LinearSwModeMask;
+ }
+
+ if (msaa)
+ {
+ allowedSwModeSet.value &= Gfx11MsaaSwModeMask;
+ }
+
+ if (pIn->flags.depth || pIn->flags.stencil)
+ {
+ allowedSwModeSet.value &= Gfx11ZSwModeMask;
+ }
+
+ if (pIn->flags.display)
+ {
+ allowedSwModeSet.value &= GetValidDisplaySwizzleModes(bpp);
+ }
+
+ if (allowedSwModeSet.value != 0)
+ {
+#if DEBUG
+ // Post sanity check, at least AddrLib should accept the output generated by its own
+ UINT_32 validateSwModeSet = allowedSwModeSet.value;
+
+ for (UINT_32 i = 0; validateSwModeSet != 0; i++)
+ {
+ if (validateSwModeSet & 1)
+ {
+ localIn.swizzleMode = static_cast<AddrSwizzleMode>(i);
+ ADDR_ASSERT(ValidateSwModeParams(&localIn));
+ }
+
+ validateSwModeSet >>= 1;
+ }
+#endif
+
+ pOut->resourceType = pIn->resourceType;
+ pOut->validSwModeSet = allowedSwModeSet;
+ pOut->canXor = (allowedSwModeSet.value & Gfx11XorSwModeMask) ? TRUE : FALSE;
+ pOut->validBlockSet = GetAllowedBlockSet(allowedSwModeSet, pOut->resourceType);
+ pOut->validSwTypeSet = GetAllowedSwSet(allowedSwModeSet);
+
+ pOut->clientPreferredSwSet = pIn->preferredSwSet;
+
+ if (pOut->clientPreferredSwSet.value == 0)
+ {
+ pOut->clientPreferredSwSet.value = AddrSwSetAll;
+ }
+
+ // Apply optional restrictions
+ if (pIn->flags.needEquation)
+ {
+ FilterInvalidEqSwizzleMode(allowedSwModeSet, pIn->resourceType, Log2(bpp >> 3));
+ }
+
+ if (allowedSwModeSet.value == Gfx11LinearSwModeMask)
+ {
+ pOut->swizzleMode = ADDR_SW_LINEAR;
+ }
+ else
+ {
+ const BOOL_32 computeMinSize = (pIn->flags.minimizeAlign == 1) || (pIn->memoryBudget >= 1.0);
+
+ if ((height > 1) && (computeMinSize == FALSE))
+ {
+ // Always ignore linear swizzle mode if:
+ // 1. This is a (2D/3D) resource with height > 1
+ // 2. Client doesn't require computing minimize size
+ allowedSwModeSet.swLinear = 0;
+ }
+
+ ADDR2_BLOCK_SET allowedBlockSet = GetAllowedBlockSet(allowedSwModeSet, pOut->resourceType);
+
+ // Determine block size if there are 2 or more block type candidates
+ if (IsPow2(allowedBlockSet.value) == FALSE)
+ {
+ AddrSwizzleMode swMode[AddrBlockMaxTiledType] = {};
+
+ swMode[AddrBlockLinear] = ADDR_SW_LINEAR;
+
+ if (pOut->resourceType == ADDR_RSRC_TEX_3D)
+ {
+ swMode[AddrBlockThick4KB] = ADDR_SW_4KB_S_X;
+ swMode[AddrBlockThin64KB] = ADDR_SW_64KB_R_X;
+ swMode[AddrBlockThick64KB] = ADDR_SW_64KB_S_X;
+ swMode[AddrBlockThin256KB] = ADDR_SW_256KB_R_X;
+ swMode[AddrBlockThick256KB] = ADDR_SW_256KB_S_X;
+ }
+ else
+ {
+ swMode[AddrBlockMicro] = ADDR_SW_256B_D;
+ swMode[AddrBlockThin4KB] = ADDR_SW_4KB_D_X;
+ swMode[AddrBlockThin64KB] = ADDR_SW_64KB_D_X;
+ swMode[AddrBlockThin256KB] = ADDR_SW_256KB_D_X;
+ }
+
+ UINT_64 padSize[AddrBlockMaxTiledType] = {};
+
+ const UINT_32 ratioLow = computeMinSize ? 1 : (pIn->flags.opt4space ? 3 : 2);
+ const UINT_32 ratioHi = computeMinSize ? 1 : (pIn->flags.opt4space ? 2 : 1);
+ const UINT_64 sizeAlignInElement = Max(NextPow2(pIn->minSizeAlign) / (bpp >> 3), 1u);
+ UINT_32 minSizeBlk = AddrBlockMicro;
+ UINT_64 minSize = 0;
+
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT localOut = {};
+
+ for (UINT_32 i = AddrBlockLinear; i < AddrBlockMaxTiledType; i++)
+ {
+ if (IsBlockTypeAvaiable(allowedBlockSet, static_cast<AddrBlockType>(i)))
+ {
+ localIn.swizzleMode = swMode[i];
+
+ if (localIn.swizzleMode == ADDR_SW_LINEAR)
+ {
+ returnCode = HwlComputeSurfaceInfoLinear(&localIn, &localOut);
+ }
+ else
+ {
+ returnCode = HwlComputeSurfaceInfoTiled(&localIn, &localOut);
+ }
+
+ if (returnCode == ADDR_OK)
+ {
+ padSize[i] = localOut.surfSize;
+
+ if ((minSize == 0) ||
+ BlockTypeWithinMemoryBudget(minSize, padSize[i], ratioLow, ratioHi))
+ {
+ minSize = padSize[i];
+ minSizeBlk = i;
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ break;
+ }
+ }
+ }
+
+ if (pIn->memoryBudget > 1.0)
+ {
+ // If minimum size is given by swizzle mode with bigger-block type, then don't ever check
+ // smaller-block type again in coming loop
+ switch (minSizeBlk)
+ {
+ case AddrBlockThick256KB:
+ allowedBlockSet.gfx11.thin256KB = 0;
+ case AddrBlockThin256KB:
+ allowedBlockSet.macroThick64KB = 0;
+ case AddrBlockThick64KB:
+ allowedBlockSet.macroThin64KB = 0;
+ case AddrBlockThin64KB:
+ allowedBlockSet.macroThick4KB = 0;
+ case AddrBlockThick4KB:
+ allowedBlockSet.macroThin4KB = 0;
+ case AddrBlockThin4KB:
+ allowedBlockSet.micro = 0;
+ case AddrBlockMicro:
+ allowedBlockSet.linear = 0;
+ case AddrBlockLinear:
+ break;
+
+ default:
+ ADDR_ASSERT_ALWAYS();
+ break;
+ }
+
+ for (UINT_32 i = AddrBlockMicro; i < AddrBlockMaxTiledType; i++)
+ {
+ if ((i != minSizeBlk) &&
+ IsBlockTypeAvaiable(allowedBlockSet, static_cast<AddrBlockType>(i)))
+ {
+ if (BlockTypeWithinMemoryBudget(minSize, padSize[i], 0, 0, pIn->memoryBudget) == FALSE)
+ {
+ // Clear the block type if the memory waste is unacceptable
+ allowedBlockSet.value &= ~(1u << (i - 1));
+ }
+ }
+ }
+
+ // Remove linear block type if 2 or more block types are allowed
+ if (IsPow2(allowedBlockSet.value) == FALSE)
+ {
+ allowedBlockSet.linear = 0;
+ }
+
+ // Select the biggest allowed block type
+ minSizeBlk = Log2NonPow2(allowedBlockSet.value) + 1;
+
+ if (minSizeBlk == static_cast<UINT_32>(AddrBlockMaxTiledType))
+ {
+ minSizeBlk = AddrBlockLinear;
+ }
+ }
+
+ switch (minSizeBlk)
+ {
+ case AddrBlockLinear:
+ allowedSwModeSet.value &= Gfx11LinearSwModeMask;
+ break;
+
+ case AddrBlockMicro:
+ ADDR_ASSERT(pOut->resourceType != ADDR_RSRC_TEX_3D);
+ allowedSwModeSet.value &= Gfx11Blk256BSwModeMask;
+ break;
+
+ case AddrBlockThin4KB:
+ ADDR_ASSERT(pOut->resourceType != ADDR_RSRC_TEX_3D);
+ allowedSwModeSet.value &= Gfx11Blk4KBSwModeMask;
+ break;
+
+ case AddrBlockThick4KB:
+ ADDR_ASSERT(pOut->resourceType == ADDR_RSRC_TEX_3D);
+ allowedSwModeSet.value &= Gfx11Rsrc3dThick4KBSwModeMask;
+ break;
+
+ case AddrBlockThin64KB:
+ allowedSwModeSet.value &= (pOut->resourceType == ADDR_RSRC_TEX_3D) ?
+ Gfx11Rsrc3dThin64KBSwModeMask : Gfx11Blk64KBSwModeMask;
+ break;
+
+ case AddrBlockThick64KB:
+ ADDR_ASSERT(pOut->resourceType == ADDR_RSRC_TEX_3D);
+ allowedSwModeSet.value &= Gfx11Rsrc3dThick64KBSwModeMask;
+ break;
+
+ case AddrBlockThin256KB:
+ allowedSwModeSet.value &= (pOut->resourceType == ADDR_RSRC_TEX_3D) ?
+ Gfx11Rsrc3dThin256KBSwModeMask : Gfx11Blk256KBSwModeMask;
+ break;
+
+ case AddrBlockThick256KB:
+ ADDR_ASSERT(pOut->resourceType == ADDR_RSRC_TEX_3D);
+ allowedSwModeSet.value &= Gfx11Rsrc3dThick256KBSwModeMask;
+ break;
+
+ default:
+ ADDR_ASSERT_ALWAYS();
+ allowedSwModeSet.value = 0;
+ break;
+ }
+ }
+
+ // Block type should be determined.
+ ADDR_ASSERT(IsPow2(GetAllowedBlockSet(allowedSwModeSet, pOut->resourceType).value));
+
+ ADDR2_SWTYPE_SET allowedSwSet = GetAllowedSwSet(allowedSwModeSet);
+
+ // Determine swizzle type if there are 2 or more swizzle type candidates
+ if ((allowedSwSet.value != 0) && (IsPow2(allowedSwSet.value) == FALSE))
+ {
+ if (ElemLib::IsBlockCompressed(pIn->format))
+ {
+ if (allowedSwSet.sw_D)
+ {
+ allowedSwModeSet.value &= Gfx11DisplaySwModeMask;
+ }
+ else if (allowedSwSet.sw_S)
+ {
+ allowedSwModeSet.value &= Gfx11StandardSwModeMask;
+ }
+ else
+ {
+ ADDR_ASSERT(allowedSwSet.sw_R);
+ allowedSwModeSet.value &= Gfx11RenderSwModeMask;
+ }
+ }
+ else if (ElemLib::IsMacroPixelPacked(pIn->format))
+ {
+ if (allowedSwSet.sw_S)
+ {
+ allowedSwModeSet.value &= Gfx11StandardSwModeMask;
+ }
+ else if (allowedSwSet.sw_D)
+ {
+ allowedSwModeSet.value &= Gfx11DisplaySwModeMask;
+ }
+ else
+ {
+ ADDR_ASSERT(allowedSwSet.sw_R);
+ allowedSwModeSet.value &= Gfx11RenderSwModeMask;
+ }
+ }
+ else if (pIn->resourceType == ADDR_RSRC_TEX_3D)
+ {
+ if (allowedSwSet.sw_D)
+ {
+ allowedSwModeSet.value &= Gfx11DisplaySwModeMask;
+ }
+ else if (allowedSwSet.sw_S)
+ {
+ allowedSwModeSet.value &= Gfx11StandardSwModeMask;
+ }
+ else if (allowedSwSet.sw_R)
+ {
+ allowedSwModeSet.value &= Gfx11RenderSwModeMask;
+ }
+ else
+ {
+ ADDR_ASSERT(allowedSwSet.sw_Z);
+ allowedSwModeSet.value &= Gfx11ZSwModeMask;
+ }
+ }
+ else
+ {
+ if (allowedSwSet.sw_R)
+ {
+ allowedSwModeSet.value &= Gfx11RenderSwModeMask;
+ }
+ else if (allowedSwSet.sw_D)
+ {
+ allowedSwModeSet.value &= Gfx11DisplaySwModeMask;
+ }
+ else if (allowedSwSet.sw_Z)
+ {
+ allowedSwModeSet.value &= Gfx11ZSwModeMask;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+
+ // Swizzle type should be determined.
+ ADDR_ASSERT(IsPow2(GetAllowedSwSet(allowedSwModeSet).value));
+ }
+
+ // Determine swizzle mode now. Always select the "largest" swizzle mode for a given block type +
+ // swizzle type combination. E.g, for AddrBlockThin64KB + ADDR_SW_S, select SW_64KB_S_X(25) if it's
+ // available, or otherwise select SW_64KB_S_T(17) if it's available, or otherwise select SW_64KB_S(9).
+ pOut->swizzleMode = static_cast<AddrSwizzleMode>(Log2NonPow2(allowedSwModeSet.value));
+ }
+ }
+ else
+ {
+ // Invalid combination...
+ ADDR_ASSERT_ALWAYS();
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ }
+ else
+ {
+ // Invalid combination...
+ ADDR_ASSERT_ALWAYS();
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeStereoInfo
+*
+* @brief
+* Compute height alignment and right eye pipeBankXor for stereo surface
+*
+* @return
+* Error code
+*
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::ComputeStereoInfo(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< Compute surface info
+ UINT_32* pAlignY, ///< Stereo requested additional alignment in Y
+ UINT_32* pRightXor ///< Right eye xor
+ ) const
+{
+ ADDR_E_RETURNCODE ret = ADDR_OK;
+
+ *pRightXor = 0;
+
+ if (IsNonPrtXor(pIn->swizzleMode))
+ {
+ const UINT_32 blkSizeLog2 = GetBlockSizeLog2(pIn->swizzleMode);
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+ const UINT_32 rsrcType = static_cast<UINT_32>(pIn->resourceType) - 1;
+ const UINT_32 swMode = static_cast<UINT_32>(pIn->swizzleMode);
+ const UINT_32 eqIndex = m_equationLookupTable[rsrcType][swMode][elemLog2];
+
+ if (eqIndex != ADDR_INVALID_EQUATION_INDEX)
+ {
+ UINT_32 yMax = 0;
+ UINT_32 yPosMask = 0;
+
+ // First get "max y bit"
+ for (UINT_32 i = m_pipeInterleaveLog2; i < blkSizeLog2; i++)
+ {
+ ADDR_ASSERT(m_equationTable[eqIndex].addr[i].valid == 1);
+
+ if ((m_equationTable[eqIndex].addr[i].channel == 1) &&
+ (m_equationTable[eqIndex].addr[i].index > yMax))
+ {
+ yMax = m_equationTable[eqIndex].addr[i].index;
+ }
+
+ if ((m_equationTable[eqIndex].xor1[i].valid == 1) &&
+ (m_equationTable[eqIndex].xor1[i].channel == 1) &&
+ (m_equationTable[eqIndex].xor1[i].index > yMax))
+ {
+ yMax = m_equationTable[eqIndex].xor1[i].index;
+ }
+
+ if ((m_equationTable[eqIndex].xor2[i].valid == 1) &&
+ (m_equationTable[eqIndex].xor2[i].channel == 1) &&
+ (m_equationTable[eqIndex].xor2[i].index > yMax))
+ {
+ yMax = m_equationTable[eqIndex].xor2[i].index;
+ }
+ }
+
+ // Then loop again for populating a position mask of "max Y bit"
+ for (UINT_32 i = m_pipeInterleaveLog2; i < blkSizeLog2; i++)
+ {
+ if ((m_equationTable[eqIndex].addr[i].channel == 1) &&
+ (m_equationTable[eqIndex].addr[i].index == yMax))
+ {
+ yPosMask |= 1u << i;
+ }
+ else if ((m_equationTable[eqIndex].xor1[i].valid == 1) &&
+ (m_equationTable[eqIndex].xor1[i].channel == 1) &&
+ (m_equationTable[eqIndex].xor1[i].index == yMax))
+ {
+ yPosMask |= 1u << i;
+ }
+ else if ((m_equationTable[eqIndex].xor2[i].valid == 1) &&
+ (m_equationTable[eqIndex].xor2[i].channel == 1) &&
+ (m_equationTable[eqIndex].xor2[i].index == yMax))
+ {
+ yPosMask |= 1u << i;
+ }
+ }
+
+ const UINT_32 additionalAlign = 1 << yMax;
+
+ if (additionalAlign >= *pAlignY)
+ {
+ *pAlignY = additionalAlign;
+
+ const UINT_32 alignedHeight = PowTwoAlign(pIn->height, additionalAlign);
+
+ if ((alignedHeight >> yMax) & 1)
+ {
+ *pRightXor = yPosMask >> m_pipeInterleaveLog2;
+ }
+ }
+ }
+ else
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSurfaceInfoTiled
+*
+* @brief
+* Internal function to calculate alignment for tiled surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSurfaceInfoTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE ret;
+
+ // Mip chain dimesion and epitch has no meaning in GFX11, set to default value
+ pOut->mipChainPitch = 0;
+ pOut->mipChainHeight = 0;
+ pOut->mipChainSlice = 0;
+ pOut->epitchIsHeight = FALSE;
+
+ // Following information will be provided in ComputeSurfaceInfoMacroTiled() if necessary
+ pOut->mipChainInTail = FALSE;
+ pOut->firstMipIdInTail = pIn->numMipLevels;
+
+ if (IsBlock256b(pIn->swizzleMode))
+ {
+ ret = ComputeSurfaceInfoMicroTiled(pIn, pOut);
+ }
+ else
+ {
+ ret = ComputeSurfaceInfoMacroTiled(pIn, pOut);
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeSurfaceInfoMicroTiled
+*
+* @brief
+* Internal function to calculate alignment for micro tiled surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::ComputeSurfaceInfoMicroTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE ret = ComputeBlockDimensionForSurf(&pOut->blockWidth,
+ &pOut->blockHeight,
+ &pOut->blockSlices,
+ pIn->bpp,
+ pIn->numSamples,
+ pIn->resourceType,
+ pIn->swizzleMode);
+
+ if (ret == ADDR_OK)
+ {
+ const UINT_32 blockSize = GetBlockSize(pIn->swizzleMode);
+
+ pOut->pitch = PowTwoAlign(pIn->width, pOut->blockWidth);
+ pOut->height = PowTwoAlign(pIn->height, pOut->blockHeight);
+ pOut->numSlices = pIn->numSlices;
+ pOut->baseAlign = blockSize;
+
+ if (pIn->numMipLevels > 1)
+ {
+ const UINT_32 mip0Width = pIn->width;
+ const UINT_32 mip0Height = pIn->height;
+ UINT_64 mipSliceSize = 0;
+
+ for (INT_32 i = static_cast<INT_32>(pIn->numMipLevels) - 1; i >= 0; i--)
+ {
+ UINT_32 mipWidth, mipHeight;
+
+ GetMipSize(mip0Width, mip0Height, 1, i, &mipWidth, &mipHeight);
+
+ const UINT_32 mipActualWidth = PowTwoAlign(mipWidth, pOut->blockWidth);
+ const UINT_32 mipActualHeight = PowTwoAlign(mipHeight, pOut->blockHeight);
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[i].pitch = mipActualWidth;
+ pOut->pMipInfo[i].height = mipActualHeight;
+ pOut->pMipInfo[i].depth = 1;
+ pOut->pMipInfo[i].offset = mipSliceSize;
+ pOut->pMipInfo[i].mipTailOffset = 0;
+ pOut->pMipInfo[i].macroBlockOffset = mipSliceSize;
+ }
+
+ mipSliceSize += mipActualWidth * mipActualHeight * (pIn->bpp >> 3);
+ }
+
+ pOut->sliceSize = mipSliceSize;
+ pOut->surfSize = mipSliceSize * pOut->numSlices;
+ }
+ else
+ {
+ pOut->sliceSize = static_cast<UINT_64>(pOut->pitch) * pOut->height * (pIn->bpp >> 3);
+ pOut->surfSize = pOut->sliceSize * pOut->numSlices;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[0].pitch = pOut->pitch;
+ pOut->pMipInfo[0].height = pOut->height;
+ pOut->pMipInfo[0].depth = 1;
+ pOut->pMipInfo[0].offset = 0;
+ pOut->pMipInfo[0].mipTailOffset = 0;
+ pOut->pMipInfo[0].macroBlockOffset = 0;
+ }
+ }
+
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeSurfaceInfoMacroTiled
+*
+* @brief
+* Internal function to calculate alignment for macro tiled surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::ComputeSurfaceInfoMacroTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE returnCode = ComputeBlockDimensionForSurf(&pOut->blockWidth,
+ &pOut->blockHeight,
+ &pOut->blockSlices,
+ pIn->bpp,
+ pIn->numSamples,
+ pIn->resourceType,
+ pIn->swizzleMode);
+
+ if (returnCode == ADDR_OK)
+ {
+ UINT_32 heightAlign = pOut->blockHeight;
+
+ if (pIn->flags.qbStereo)
+ {
+ UINT_32 rightXor = 0;
+
+ returnCode = ComputeStereoInfo(pIn, &heightAlign, &rightXor);
+
+ if (returnCode == ADDR_OK)
+ {
+ pOut->pStereoInfo->rightSwizzle = rightXor;
+ }
+ }
+
+ if (returnCode == ADDR_OK)
+ {
+ const UINT_32 blockSizeLog2 = GetBlockSizeLog2(pIn->swizzleMode);
+ const UINT_32 blockSize = 1 << blockSizeLog2;
+
+ pOut->pitch = PowTwoAlign(pIn->width, pOut->blockWidth);
+ pOut->height = PowTwoAlign(pIn->height, heightAlign);
+ pOut->numSlices = PowTwoAlign(pIn->numSlices, pOut->blockSlices);
+ pOut->baseAlign = blockSize;
+
+ if (pIn->numMipLevels > 1)
+ {
+ const Dim3d tailMaxDim = GetMipTailDim(pIn->resourceType,
+ pIn->swizzleMode,
+ pOut->blockWidth,
+ pOut->blockHeight,
+ pOut->blockSlices);
+ const UINT_32 mip0Width = pIn->width;
+ const UINT_32 mip0Height = pIn->height;
+ const BOOL_32 isThin = IsThin(pIn->resourceType, pIn->swizzleMode);
+ const UINT_32 mip0Depth = isThin ? 1 : pIn->numSlices;
+ const UINT_32 maxMipsInTail = GetMaxNumMipsInTail(blockSizeLog2, isThin);
+ const UINT_32 index = Log2(pIn->bpp >> 3);
+ UINT_32 firstMipInTail = pIn->numMipLevels;
+ UINT_64 mipChainSliceSize = 0;
+ UINT_64 mipSize[MaxMipLevels];
+ UINT_64 mipSliceSize[MaxMipLevels];
+
+ Dim3d fixedTailMaxDim = tailMaxDim;
+
+ if ((IsZOrderSwizzle(pIn->swizzleMode) || IsRtOptSwizzle(pIn->swizzleMode)) && (index <= 1))
+ {
+ fixedTailMaxDim.w /= Block256_2d[index].w / Block256_2d[2].w;
+ fixedTailMaxDim.h /= Block256_2d[index].h / Block256_2d[2].h;
+ }
+
+ for (UINT_32 i = 0; i < pIn->numMipLevels; i++)
+ {
+ UINT_32 mipWidth, mipHeight, mipDepth;
+
+ GetMipSize(mip0Width, mip0Height, mip0Depth, i, &mipWidth, &mipHeight, &mipDepth);
+
+ if (IsInMipTail(fixedTailMaxDim, maxMipsInTail, mipWidth, mipHeight, pIn->numMipLevels - i))
+ {
+ firstMipInTail = i;
+ mipChainSliceSize += blockSize / pOut->blockSlices;
+ break;
+ }
+ else
+ {
+ const UINT_32 pitch = PowTwoAlign(mipWidth, pOut->blockWidth);
+ const UINT_32 height = PowTwoAlign(mipHeight, pOut->blockHeight);
+ const UINT_32 depth = PowTwoAlign(mipDepth, pOut->blockSlices);
+ const UINT_64 sliceSize = static_cast<UINT_64>(pitch) * height * (pIn->bpp >> 3);
+
+ mipSize[i] = sliceSize * depth;
+ mipSliceSize[i] = sliceSize * pOut->blockSlices;
+ mipChainSliceSize += sliceSize;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[i].pitch = pitch;
+ pOut->pMipInfo[i].height = height;
+ pOut->pMipInfo[i].depth = depth;
+ }
+ }
+ }
+
+ pOut->sliceSize = mipChainSliceSize;
+ pOut->surfSize = mipChainSliceSize * pOut->numSlices;
+ pOut->mipChainInTail = (firstMipInTail == 0) ? TRUE : FALSE;
+ pOut->firstMipIdInTail = firstMipInTail;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ UINT_64 offset = 0;
+ UINT_64 macroBlkOffset = 0;
+ UINT_32 tailMaxDepth = 0;
+
+ if (firstMipInTail != pIn->numMipLevels)
+ {
+ UINT_32 mipWidth, mipHeight;
+
+ GetMipSize(mip0Width, mip0Height, mip0Depth, firstMipInTail,
+ &mipWidth, &mipHeight, &tailMaxDepth);
+
+ offset = blockSize * PowTwoAlign(tailMaxDepth, pOut->blockSlices) / pOut->blockSlices;
+ macroBlkOffset = blockSize;
+ }
+
+ for (INT_32 i = firstMipInTail - 1; i >= 0; i--)
+ {
+ pOut->pMipInfo[i].offset = offset;
+ pOut->pMipInfo[i].macroBlockOffset = macroBlkOffset;
+ pOut->pMipInfo[i].mipTailOffset = 0;
+
+ offset += mipSize[i];
+ macroBlkOffset += mipSliceSize[i];
+ }
+
+ UINT_32 pitch = tailMaxDim.w;
+ UINT_32 height = tailMaxDim.h;
+ UINT_32 depth = isThin ? 1 : PowTwoAlign(tailMaxDepth, Block256_3d[index].d);
+
+ tailMaxDepth = isThin ? 1 : (depth / Block256_3d[index].d);
+
+ for (UINT_32 i = firstMipInTail; i < pIn->numMipLevels; i++)
+ {
+ const UINT_32 m = maxMipsInTail - 1 - (i - firstMipInTail);
+ const UINT_32 mipOffset = (m > 6) ? (16 << m) : (m << 8);
+
+ pOut->pMipInfo[i].offset = mipOffset * tailMaxDepth;
+ pOut->pMipInfo[i].mipTailOffset = mipOffset;
+ pOut->pMipInfo[i].macroBlockOffset = 0;
+
+ pOut->pMipInfo[i].pitch = pitch;
+ pOut->pMipInfo[i].height = height;
+ pOut->pMipInfo[i].depth = depth;
+
+ UINT_32 mipX = ((mipOffset >> 9) & 1) |
+ ((mipOffset >> 10) & 2) |
+ ((mipOffset >> 11) & 4) |
+ ((mipOffset >> 12) & 8) |
+ ((mipOffset >> 13) & 16) |
+ ((mipOffset >> 14) & 32);
+ UINT_32 mipY = ((mipOffset >> 8) & 1) |
+ ((mipOffset >> 9) & 2) |
+ ((mipOffset >> 10) & 4) |
+ ((mipOffset >> 11) & 8) |
+ ((mipOffset >> 12) & 16) |
+ ((mipOffset >> 13) & 32);
+
+ if (blockSizeLog2 & 1)
+ {
+ const UINT_32 temp = mipX;
+ mipX = mipY;
+ mipY = temp;
+
+ if (index & 1)
+ {
+ mipY = (mipY << 1) | (mipX & 1);
+ mipX = mipX >> 1;
+ }
+ }
+
+ if (isThin)
+ {
+ pOut->pMipInfo[i].mipTailCoordX = mipX * Block256_2d[index].w;
+ pOut->pMipInfo[i].mipTailCoordY = mipY * Block256_2d[index].h;
+ pOut->pMipInfo[i].mipTailCoordZ = 0;
+
+ pitch = Max(pitch >> 1, Block256_2d[index].w);
+ height = Max(height >> 1, Block256_2d[index].h);
+ depth = 1;
+ }
+ else
+ {
+ pOut->pMipInfo[i].mipTailCoordX = mipX * Block256_3d[index].w;
+ pOut->pMipInfo[i].mipTailCoordY = mipY * Block256_3d[index].h;
+ pOut->pMipInfo[i].mipTailCoordZ = 0;
+
+ pitch = Max(pitch >> 1, Block256_3d[index].w);
+ height = Max(height >> 1, Block256_3d[index].h);
+ depth = PowTwoAlign(Max(depth >> 1, 1u), Block256_3d[index].d);
+ }
+ }
+ }
+ }
+ else
+ {
+ pOut->sliceSize = static_cast<UINT_64>(pOut->pitch) * pOut->height * (pIn->bpp >> 3) * pIn->numSamples;
+ pOut->surfSize = pOut->sliceSize * pOut->numSlices;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[0].pitch = pOut->pitch;
+ pOut->pMipInfo[0].height = pOut->height;
+ pOut->pMipInfo[0].depth = IsTex3d(pIn->resourceType)? pOut->numSlices : 1;
+ pOut->pMipInfo[0].offset = 0;
+ pOut->pMipInfo[0].mipTailOffset = 0;
+ pOut->pMipInfo[0].macroBlockOffset = 0;
+ pOut->pMipInfo[0].mipTailCoordX = 0;
+ pOut->pMipInfo[0].mipTailCoordY = 0;
+ pOut->pMipInfo[0].mipTailCoordZ = 0;
+ }
+ }
+ }
+ }
+
+ return returnCode;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSurfaceAddrFromCoordTiled
+*
+* @brief
+* Internal function to calculate address from coord for tiled swizzle surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSurfaceAddrFromCoordTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE ret;
+
+ if (IsBlock256b(pIn->swizzleMode))
+ {
+ ret = ComputeSurfaceAddrFromCoordMicroTiled(pIn, pOut);
+ }
+ else
+ {
+ ret = ComputeSurfaceAddrFromCoordMacroTiled(pIn, pOut);
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeOffsetFromEquation
+*
+* @brief
+* Compute offset from equation
+*
+* @return
+* Offset
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::ComputeOffsetFromEquation(
+ const ADDR_EQUATION* pEq, ///< Equation
+ UINT_32 x, ///< x coord in bytes
+ UINT_32 y, ///< y coord in pixel
+ UINT_32 z ///< z coord in slice
+ ) const
+{
+ UINT_32 offset = 0;
+
+ for (UINT_32 i = 0; i < pEq->numBits; i++)
+ {
+ UINT_32 v = 0;
+
+ if (pEq->addr[i].valid)
+ {
+ if (pEq->addr[i].channel == 0)
+ {
+ v ^= (x >> pEq->addr[i].index) & 1;
+ }
+ else if (pEq->addr[i].channel == 1)
+ {
+ v ^= (y >> pEq->addr[i].index) & 1;
+ }
+ else
+ {
+ ADDR_ASSERT(pEq->addr[i].channel == 2);
+ v ^= (z >> pEq->addr[i].index) & 1;
+ }
+ }
+
+ if (pEq->xor1[i].valid)
+ {
+ if (pEq->xor1[i].channel == 0)
+ {
+ v ^= (x >> pEq->xor1[i].index) & 1;
+ }
+ else if (pEq->xor1[i].channel == 1)
+ {
+ v ^= (y >> pEq->xor1[i].index) & 1;
+ }
+ else
+ {
+ ADDR_ASSERT(pEq->xor1[i].channel == 2);
+ v ^= (z >> pEq->xor1[i].index) & 1;
+ }
+ }
+
+ if (pEq->xor2[i].valid)
+ {
+ if (pEq->xor2[i].channel == 0)
+ {
+ v ^= (x >> pEq->xor2[i].index) & 1;
+ }
+ else if (pEq->xor2[i].channel == 1)
+ {
+ v ^= (y >> pEq->xor2[i].index) & 1;
+ }
+ else
+ {
+ ADDR_ASSERT(pEq->xor2[i].channel == 2);
+ v ^= (z >> pEq->xor2[i].index) & 1;
+ }
+ }
+
+ offset |= (v << i);
+ }
+
+ return offset;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeOffsetFromSwizzlePattern
+*
+* @brief
+* Compute offset from swizzle pattern
+*
+* @return
+* Offset
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::ComputeOffsetFromSwizzlePattern(
+ const UINT_64* pPattern, ///< Swizzle pattern
+ UINT_32 numBits, ///< Number of bits in pattern
+ UINT_32 x, ///< x coord in pixel
+ UINT_32 y, ///< y coord in pixel
+ UINT_32 z, ///< z coord in slice
+ UINT_32 s ///< sample id
+ ) const
+{
+ UINT_32 offset = 0;
+ const ADDR_BIT_SETTING* pSwizzlePattern = reinterpret_cast<const ADDR_BIT_SETTING*>(pPattern);
+
+ for (UINT_32 i = 0; i < numBits; i++)
+ {
+ UINT_32 v = 0;
+
+ if (pSwizzlePattern[i].x != 0)
+ {
+ UINT_16 mask = pSwizzlePattern[i].x;
+ UINT_32 xBits = x;
+
+ while (mask != 0)
+ {
+ if (mask & 1)
+ {
+ v ^= xBits & 1;
+ }
+
+ xBits >>= 1;
+ mask >>= 1;
+ }
+ }
+
+ if (pSwizzlePattern[i].y != 0)
+ {
+ UINT_16 mask = pSwizzlePattern[i].y;
+ UINT_32 yBits = y;
+
+ while (mask != 0)
+ {
+ if (mask & 1)
+ {
+ v ^= yBits & 1;
+ }
+
+ yBits >>= 1;
+ mask >>= 1;
+ }
+ }
+
+ if (pSwizzlePattern[i].z != 0)
+ {
+ UINT_16 mask = pSwizzlePattern[i].z;
+ UINT_32 zBits = z;
+
+ while (mask != 0)
+ {
+ if (mask & 1)
+ {
+ v ^= zBits & 1;
+ }
+
+ zBits >>= 1;
+ mask >>= 1;
+ }
+ }
+
+ if (pSwizzlePattern[i].s != 0)
+ {
+ UINT_16 mask = pSwizzlePattern[i].s;
+ UINT_32 sBits = s;
+
+ while (mask != 0)
+ {
+ if (mask & 1)
+ {
+ v ^= sBits & 1;
+ }
+
+ sBits >>= 1;
+ mask >>= 1;
+ }
+ }
+
+ offset |= (v << i);
+ }
+
+ return offset;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetSwizzlePatternInfo
+*
+* @brief
+* Get swizzle pattern
+*
+* @return
+* Swizzle pattern information
+************************************************************************************************************************
+*/
+const ADDR_SW_PATINFO* Gfx11Lib::GetSwizzlePatternInfo(
+ AddrSwizzleMode swizzleMode, ///< Swizzle mode
+ AddrResourceType resourceType, ///< Resource type
+ UINT_32 elemLog2, ///< Element size in bytes log2
+ UINT_32 numFrag ///< Number of fragment
+ ) const
+{
+ const UINT_32 index = IsXor(swizzleMode) ? (m_colorBaseIndex + elemLog2) : elemLog2;
+ const ADDR_SW_PATINFO* patInfo = NULL;
+ const UINT_32 swizzleMask = 1 << swizzleMode;
+ const BOOL_32 isBlock256k = IsBlock256kb(swizzleMode);
+ const BOOL_32 isBlock64K = IsBlock64kb(swizzleMode);
+
+ if (IsLinear(swizzleMode) == FALSE)
+ {
+ if (resourceType == ADDR_RSRC_TEX_3D)
+ {
+ ADDR_ASSERT(numFrag == 1);
+
+ if ((swizzleMask & Gfx11Rsrc3dSwModeMask) != 0)
+ {
+ if (IsZOrderSwizzle(swizzleMode) || IsRtOptSwizzle(swizzleMode))
+ {
+ if (isBlock256k)
+ {
+ ADDR_ASSERT((swizzleMode == ADDR_SW_256KB_Z_X) || (swizzleMode == ADDR_SW_256KB_R_X));
+ patInfo = GFX11_SW_256K_ZR_X_1xaa_PATINFO;
+ }
+ else if (isBlock64K)
+ {
+ ADDR_ASSERT((swizzleMode == ADDR_SW_64KB_Z_X) || (swizzleMode == ADDR_SW_64KB_R_X));
+ patInfo = GFX11_SW_64K_ZR_X_1xaa_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (IsDisplaySwizzle(resourceType, swizzleMode))
+ {
+ if (isBlock256k)
+ {
+ ADDR_ASSERT(swizzleMode == ADDR_SW_256KB_D_X);
+ // patInfo = GFX11_SW_256K_D3_X_PATINFO;
+ }
+ else if (isBlock64K)
+ {
+ ADDR_ASSERT(swizzleMode == ADDR_SW_64KB_D_X);
+ patInfo = GFX11_SW_64K_D3_X_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else
+ {
+ ADDR_ASSERT(IsStandardSwizzle(resourceType, swizzleMode));
+
+ if (isBlock256k)
+ {
+ ADDR_ASSERT(swizzleMode == ADDR_SW_256KB_S_X);
+ patInfo = GFX11_SW_256K_S3_X_PATINFO;
+ }
+ else if (isBlock64K)
+ {
+ if (swizzleMode == ADDR_SW_64KB_S)
+ {
+ patInfo = GFX11_SW_64K_S3_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_64KB_S_X)
+ {
+ patInfo = GFX11_SW_64K_S3_X_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_64KB_S_T)
+ {
+ patInfo = GFX11_SW_64K_S3_T_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (IsBlock4kb(swizzleMode))
+ {
+ if (swizzleMode == ADDR_SW_4KB_S)
+ {
+ patInfo = GFX11_SW_4K_S3_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_4KB_S_X)
+ {
+ patInfo = GFX11_SW_4K_S3_X_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ }
+ }
+ else
+ {
+ if ((swizzleMask & Gfx11Rsrc2dSwModeMask) != 0)
+ {
+ if (IsBlock256b(swizzleMode))
+ {
+ ADDR_ASSERT(swizzleMode == ADDR_SW_256B_D);
+ patInfo = GFX11_SW_256_D_PATINFO;
+ }
+ else if (IsBlock4kb(swizzleMode))
+ {
+ if (swizzleMode == ADDR_SW_4KB_D)
+ {
+ patInfo = GFX11_SW_4K_D_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_4KB_D_X)
+ {
+ patInfo = GFX11_SW_4K_D_X_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (isBlock64K)
+ {
+ if (IsZOrderSwizzle(swizzleMode) || IsRtOptSwizzle(swizzleMode))
+ {
+ if (numFrag == 1)
+ {
+ patInfo = GFX11_SW_64K_ZR_X_1xaa_PATINFO;
+ }
+ else if (numFrag == 2)
+ {
+ patInfo = GFX11_SW_64K_ZR_X_2xaa_PATINFO;
+ }
+ else if (numFrag == 4)
+ {
+ patInfo = GFX11_SW_64K_ZR_X_4xaa_PATINFO;
+ }
+ else if (numFrag == 8)
+ {
+ patInfo = GFX11_SW_64K_ZR_X_8xaa_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (IsDisplaySwizzle(resourceType, swizzleMode))
+ {
+ if (swizzleMode == ADDR_SW_64KB_D)
+ {
+ patInfo = GFX11_SW_64K_D_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_64KB_D_X)
+ {
+ patInfo = GFX11_SW_64K_D_X_PATINFO;
+ }
+ else if (swizzleMode == ADDR_SW_64KB_D_T)
+ {
+ patInfo = GFX11_SW_64K_D_T_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (isBlock256k)
+ {
+ if (IsZOrderSwizzle(swizzleMode) || IsRtOptSwizzle(swizzleMode))
+ {
+ if (numFrag == 1)
+ {
+ patInfo = GFX11_SW_256K_ZR_X_1xaa_PATINFO;
+ }
+ else if (numFrag == 2)
+ {
+ patInfo = GFX11_SW_256K_ZR_X_2xaa_PATINFO;
+ }
+ else if (numFrag == 4)
+ {
+ patInfo = GFX11_SW_256K_ZR_X_4xaa_PATINFO;
+ }
+ else if (numFrag == 8)
+ {
+ patInfo = GFX11_SW_256K_ZR_X_8xaa_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else if (IsDisplaySwizzle(resourceType, swizzleMode))
+ {
+ ADDR_ASSERT(swizzleMode == ADDR_SW_256KB_D_X);
+ patInfo = GFX11_SW_256K_D_X_PATINFO;
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ else
+ {
+ ADDR_ASSERT_ALWAYS();
+ }
+ }
+ }
+ }
+
+ return (patInfo != NULL) ? &patInfo[index] : NULL;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeSurfaceAddrFromCoordMicroTiled
+*
+* @brief
+* Internal function to calculate address from coord for micro tiled swizzle surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::ComputeSurfaceAddrFromCoordMicroTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR2_COMPUTE_SURFACE_INFO_INPUT localIn = {};
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT localOut = {};
+ ADDR2_MIP_INFO mipInfo[MaxMipLevels];
+
+ localIn.swizzleMode = pIn->swizzleMode;
+ localIn.flags = pIn->flags;
+ localIn.resourceType = pIn->resourceType;
+ localIn.bpp = pIn->bpp;
+ localIn.width = Max(pIn->unalignedWidth, 1u);
+ localIn.height = Max(pIn->unalignedHeight, 1u);
+ localIn.numSlices = Max(pIn->numSlices, 1u);
+ localIn.numMipLevels = Max(pIn->numMipLevels, 1u);
+ localIn.numSamples = Max(pIn->numSamples, 1u);
+ localIn.numFrags = localIn.numSamples;
+ localOut.pMipInfo = mipInfo;
+
+ ADDR_E_RETURNCODE ret = ComputeSurfaceInfoMicroTiled(&localIn, &localOut);
+
+ if (ret == ADDR_OK)
+ {
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+ const UINT_32 rsrcType = static_cast<UINT_32>(pIn->resourceType) - 1;
+ const UINT_32 swMode = static_cast<UINT_32>(pIn->swizzleMode);
+ const UINT_32 eqIndex = m_equationLookupTable[rsrcType][swMode][elemLog2];
+
+ if (eqIndex != ADDR_INVALID_EQUATION_INDEX)
+ {
+ const UINT_32 pb = mipInfo[pIn->mipId].pitch / localOut.blockWidth;
+ const UINT_32 yb = pIn->y / localOut.blockHeight;
+ const UINT_32 xb = pIn->x / localOut.blockWidth;
+ const UINT_32 blockIndex = yb * pb + xb;
+ const UINT_32 blockSize = 256;
+ const UINT_32 blk256Offset = ComputeOffsetFromEquation(&m_equationTable[eqIndex],
+ pIn->x << elemLog2,
+ pIn->y,
+ 0);
+ pOut->addr = localOut.sliceSize * pIn->slice +
+ mipInfo[pIn->mipId].macroBlockOffset +
+ (blockIndex * blockSize) +
+ blk256Offset;
+ }
+ else
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::ComputeSurfaceAddrFromCoordMacroTiled
+*
+* @brief
+* Internal function to calculate address from coord for macro tiled swizzle surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::ComputeSurfaceAddrFromCoordMacroTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR2_COMPUTE_SURFACE_INFO_INPUT localIn = {};
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT localOut = {};
+ ADDR2_MIP_INFO mipInfo[MaxMipLevels];
+
+ localIn.swizzleMode = pIn->swizzleMode;
+ localIn.flags = pIn->flags;
+ localIn.resourceType = pIn->resourceType;
+ localIn.bpp = pIn->bpp;
+ localIn.width = Max(pIn->unalignedWidth, 1u);
+ localIn.height = Max(pIn->unalignedHeight, 1u);
+ localIn.numSlices = Max(pIn->numSlices, 1u);
+ localIn.numMipLevels = Max(pIn->numMipLevels, 1u);
+ localIn.numSamples = Max(pIn->numSamples, 1u);
+ localIn.numFrags = localIn.numSamples;
+ localOut.pMipInfo = mipInfo;
+
+ ADDR_E_RETURNCODE ret = ComputeSurfaceInfoMacroTiled(&localIn, &localOut);
+
+ if (ret == ADDR_OK)
+ {
+ const UINT_32 elemLog2 = Log2(pIn->bpp >> 3);
+ const UINT_32 blkSizeLog2 = GetBlockSizeLog2(pIn->swizzleMode);
+ const UINT_32 blkMask = (1 << blkSizeLog2) - 1;
+ const UINT_32 pipeMask = (1 << m_pipesLog2) - 1;
+ const UINT_32 bankMask = ((1 << GetBankXorBits(blkSizeLog2)) - 1) << (m_pipesLog2 + ColumnBits);
+ const UINT_32 pipeBankXor = IsXor(pIn->swizzleMode) ?
+ (((pIn->pipeBankXor & (pipeMask | bankMask)) << m_pipeInterleaveLog2) & blkMask) : 0;
+
+ if (localIn.numSamples > 1)
+ {
+ const ADDR_SW_PATINFO* pPatInfo = GetSwizzlePatternInfo(pIn->swizzleMode,
+ pIn->resourceType,
+ elemLog2,
+ localIn.numSamples);
+
+ if (pPatInfo != NULL)
+ {
+ const UINT_32 pb = localOut.pitch / localOut.blockWidth;
+ const UINT_32 yb = pIn->y / localOut.blockHeight;
+ const UINT_32 xb = pIn->x / localOut.blockWidth;
+ const UINT_64 blkIdx = yb * pb + xb;
+
+ ADDR_BIT_SETTING fullSwizzlePattern[20];
+ GetSwizzlePatternFromPatternInfo(pPatInfo, fullSwizzlePattern);
+
+ const UINT_32 blkOffset =
+ ComputeOffsetFromSwizzlePattern(reinterpret_cast<const UINT_64*>(fullSwizzlePattern),
+ blkSizeLog2,
+ pIn->x,
+ pIn->y,
+ pIn->slice,
+ pIn->sample);
+
+ pOut->addr = (localOut.sliceSize * pIn->slice) +
+ (blkIdx << blkSizeLog2) +
+ (blkOffset ^ pipeBankXor);
+ }
+ else
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ }
+ else
+ {
+ const UINT_32 rsrcIdx = (pIn->resourceType == ADDR_RSRC_TEX_3D) ? 1 : 0;
+ const UINT_32 swMode = static_cast<UINT_32>(pIn->swizzleMode);
+ const UINT_32 eqIndex = m_equationLookupTable[rsrcIdx][swMode][elemLog2];
+
+ if (eqIndex != ADDR_INVALID_EQUATION_INDEX)
+ {
+ const BOOL_32 inTail = (mipInfo[pIn->mipId].mipTailOffset != 0) ? TRUE : FALSE;
+ const BOOL_32 isThin = IsThin(pIn->resourceType, pIn->swizzleMode);
+ const UINT_64 sliceSize = isThin ? localOut.sliceSize : (localOut.sliceSize * localOut.blockSlices);
+ const UINT_32 sliceId = isThin ? pIn->slice : (pIn->slice / localOut.blockSlices);
+ const UINT_32 x = inTail ? (pIn->x + mipInfo[pIn->mipId].mipTailCoordX) : pIn->x;
+ const UINT_32 y = inTail ? (pIn->y + mipInfo[pIn->mipId].mipTailCoordY) : pIn->y;
+ const UINT_32 z = inTail ? (pIn->slice + mipInfo[pIn->mipId].mipTailCoordZ) : pIn->slice;
+ const UINT_32 pb = mipInfo[pIn->mipId].pitch / localOut.blockWidth;
+ const UINT_32 yb = pIn->y / localOut.blockHeight;
+ const UINT_32 xb = pIn->x / localOut.blockWidth;
+ const UINT_64 blkIdx = yb * pb + xb;
+ const UINT_32 blkOffset = ComputeOffsetFromEquation(&m_equationTable[eqIndex],
+ x << elemLog2,
+ y,
+ z);
+ pOut->addr = sliceSize * sliceId +
+ mipInfo[pIn->mipId].macroBlockOffset +
+ (blkIdx << blkSizeLog2) +
+ (blkOffset ^ pipeBankXor);
+ }
+ else
+ {
+ ret = ADDR_INVALIDPARAMS;
+ }
+ }
+ }
+
+ return ret;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeMaxBaseAlignments
+*
+* @brief
+* Gets maximum alignments
+* @return
+* maximum alignments
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::HwlComputeMaxBaseAlignments() const
+{
+ return Size256K;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeMaxMetaBaseAlignments
+*
+* @brief
+* Gets maximum alignments for metadata
+* @return
+* maximum alignments for metadata
+************************************************************************************************************************
+*/
+UINT_32 Gfx11Lib::HwlComputeMaxMetaBaseAlignments() const
+{
+ Dim3d metaBlk;
+
+ // Max base alignment for Htile
+ const AddrSwizzleMode ValidSwizzleModeForHtile[] =
+ {
+ ADDR_SW_64KB_Z_X,
+ ADDR_SW_256KB_Z_X,
+ };
+
+ UINT_32 maxBaseAlignHtile = 0;
+
+ for (UINT_32 swIdx = 0; swIdx < sizeof(ValidSwizzleModeForHtile) / sizeof(ValidSwizzleModeForHtile[0]); swIdx++)
+ {
+ for (UINT_32 bppLog2 = 0; bppLog2 < 3; bppLog2++)
+ {
+ for (UINT_32 numFragLog2 = 0; numFragLog2 < 4; numFragLog2++)
+ {
+ const UINT_32 metaBlkSizeHtile = GetMetaBlkSize(Gfx11DataDepthStencil,
+ ADDR_RSRC_TEX_2D,
+ ValidSwizzleModeForHtile[swIdx],
+ bppLog2,
+ numFragLog2,
+ TRUE,
+ &metaBlk);
+
+ maxBaseAlignHtile = Max(maxBaseAlignHtile, metaBlkSizeHtile);
+ }
+ }
+ }
+
+ // Max base alignment for 2D Dcc
+ const AddrSwizzleMode ValidSwizzleModeForDcc2D[] =
+ {
+ ADDR_SW_64KB_R_X,
+ ADDR_SW_256KB_R_X,
+ };
+
+ UINT_32 maxBaseAlignDcc2D = 0;
+
+ for (UINT_32 swIdx = 0; swIdx < sizeof(ValidSwizzleModeForDcc2D) / sizeof(ValidSwizzleModeForDcc2D[0]); swIdx++)
+ {
+ for (UINT_32 bppLog2 = 0; bppLog2 < MaxNumOfBpp; bppLog2++)
+ {
+ for (UINT_32 numFragLog2 = 0; numFragLog2 < 4; numFragLog2++)
+ {
+ const UINT_32 metaBlkSize2D = GetMetaBlkSize(Gfx11DataColor,
+ ADDR_RSRC_TEX_2D,
+ ValidSwizzleModeForDcc2D[swIdx],
+ bppLog2,
+ numFragLog2,
+ TRUE,
+ &metaBlk);
+
+ maxBaseAlignDcc2D = Max(maxBaseAlignDcc2D, metaBlkSize2D);
+ }
+ }
+ }
+
+ // Max base alignment for 3D Dcc
+ const AddrSwizzleMode ValidSwizzleModeForDcc3D[] =
+ {
+ ADDR_SW_64KB_S_X,
+ ADDR_SW_64KB_D_X,
+ ADDR_SW_64KB_R_X,
+ ADDR_SW_256KB_S_X,
+ ADDR_SW_256KB_D_X,
+ ADDR_SW_256KB_R_X,
+ };
+
+ UINT_32 maxBaseAlignDcc3D = 0;
+
+ for (UINT_32 swIdx = 0; swIdx < sizeof(ValidSwizzleModeForDcc3D) / sizeof(ValidSwizzleModeForDcc3D[0]); swIdx++)
+ {
+ for (UINT_32 bppLog2 = 0; bppLog2 < MaxNumOfBpp; bppLog2++)
+ {
+ const UINT_32 metaBlkSize3D = GetMetaBlkSize(Gfx11DataColor,
+ ADDR_RSRC_TEX_3D,
+ ValidSwizzleModeForDcc3D[swIdx],
+ bppLog2,
+ 0,
+ TRUE,
+ &metaBlk);
+
+ maxBaseAlignDcc3D = Max(maxBaseAlignDcc3D, metaBlkSize3D);
+ }
+ }
+
+ return Max(maxBaseAlignHtile, Max(maxBaseAlignDcc2D, maxBaseAlignDcc3D));
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetMetaElementSizeLog2
+*
+* @brief
+* Gets meta data element size log2
+* @return
+* Meta data element size log2
+************************************************************************************************************************
+*/
+INT_32 Gfx11Lib::GetMetaElementSizeLog2(
+ Gfx11DataType dataType) ///< Data surface type
+{
+ INT_32 elemSizeLog2 = 0;
+
+ if (dataType == Gfx11DataColor)
+ {
+ elemSizeLog2 = 0;
+ }
+ else
+ {
+ ADDR_ASSERT(dataType == Gfx11DataDepthStencil);
+ elemSizeLog2 = 2;
+ }
+
+ return elemSizeLog2;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::GetMetaCacheSizeLog2
+*
+* @brief
+* Gets meta data cache line size log2
+* @return
+* Meta data cache line size log2
+************************************************************************************************************************
+*/
+INT_32 Gfx11Lib::GetMetaCacheSizeLog2(
+ Gfx11DataType dataType) ///< Data surface type
+{
+ INT_32 cacheSizeLog2 = 0;
+
+ if (dataType == Gfx11DataColor)
+ {
+ cacheSizeLog2 = 6;
+ }
+ else
+ {
+ ADDR_ASSERT(dataType == Gfx11DataDepthStencil);
+ cacheSizeLog2 = 8;
+ }
+
+ return cacheSizeLog2;
+}
+
+/**
+************************************************************************************************************************
+* Gfx11Lib::HwlComputeSurfaceInfoLinear
+*
+* @brief
+* Internal function to calculate alignment for linear surface
+*
+* @return
+* ADDR_E_RETURNCODE
+************************************************************************************************************************
+*/
+ADDR_E_RETURNCODE Gfx11Lib::HwlComputeSurfaceInfoLinear(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn, ///< [in] input structure
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [out] output structure
+ ) const
+{
+ ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+ if (IsTex1d(pIn->resourceType) && (pIn->height > 1))
+ {
+ returnCode = ADDR_INVALIDPARAMS;
+ }
+ else
+ {
+ const UINT_32 elementBytes = pIn->bpp >> 3;
+ const UINT_32 pitchAlign = (pIn->swizzleMode == ADDR_SW_LINEAR_GENERAL) ? 1 : (256 / elementBytes);
+ const UINT_32 mipDepth = (pIn->resourceType == ADDR_RSRC_TEX_3D) ? pIn->numSlices : 1;
+ UINT_32 pitch = PowTwoAlign(pIn->width, pitchAlign);
+ UINT_32 actualHeight = pIn->height;
+ UINT_64 sliceSize = 0;
+
+ if (pIn->numMipLevels > 1)
+ {
+ for (INT_32 i = static_cast<INT_32>(pIn->numMipLevels) - 1; i >= 0; i--)
+ {
+ UINT_32 mipWidth, mipHeight;
+
+ GetMipSize(pIn->width, pIn->height, 1, i, &mipWidth, &mipHeight);
+
+ const UINT_32 mipActualWidth = PowTwoAlign(mipWidth, pitchAlign);
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[i].pitch = mipActualWidth;
+ pOut->pMipInfo[i].height = mipHeight;
+ pOut->pMipInfo[i].depth = mipDepth;
+ pOut->pMipInfo[i].offset = sliceSize;
+ pOut->pMipInfo[i].mipTailOffset = 0;
+ pOut->pMipInfo[i].macroBlockOffset = sliceSize;
+ }
+
+ sliceSize += static_cast<UINT_64>(mipActualWidth) * mipHeight * elementBytes;
+ }
+ }
+ else
+ {
+ returnCode = ApplyCustomizedPitchHeight(pIn, elementBytes, pitchAlign, &pitch, &actualHeight);
+
+ if (returnCode == ADDR_OK)
+ {
+ sliceSize = static_cast<UINT_64>(pitch) * actualHeight * elementBytes;
+
+ if (pOut->pMipInfo != NULL)
+ {
+ pOut->pMipInfo[0].pitch = pitch;
+ pOut->pMipInfo[0].height = actualHeight;
+ pOut->pMipInfo[0].depth = mipDepth;
+ pOut->pMipInfo[0].offset = 0;
+ pOut->pMipInfo[0].mipTailOffset = 0;
+ pOut->pMipInfo[0].macroBlockOffset = 0;
+ }
+ }
+ }
+
+ if (returnCode == ADDR_OK)
+ {
+ pOut->pitch = pitch;
+ pOut->height = actualHeight;
+ pOut->numSlices = pIn->numSlices;
+ pOut->sliceSize = sliceSize;
+ pOut->surfSize = sliceSize * pOut->numSlices;
+ pOut->baseAlign = (pIn->swizzleMode == ADDR_SW_LINEAR_GENERAL) ? elementBytes : 256;
+ pOut->blockWidth = pitchAlign;
+ pOut->blockHeight = 1;
+ pOut->blockSlices = 1;
+
+ // Following members are useless on GFX11
+ pOut->mipChainPitch = 0;
+ pOut->mipChainHeight = 0;
+ pOut->mipChainSlice = 0;
+ pOut->epitchIsHeight = FALSE;
+
+ // Post calculation validate
+ ADDR_ASSERT(pOut->sliceSize > 0);
+ }
+ }
+
+ return returnCode;
+}
+
+} // V2
+} // Addr
diff --git a/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.h b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.h
new file mode 100644
index 000000000..ad742bf48
--- /dev/null
+++ b/lib/mesa/src/amd/addrlib/src/gfx11/gfx11addrlib.h
@@ -0,0 +1,561 @@
+/*
+************************************************************************************************************************
+*
+* Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE
+*
+***********************************************************************************************************************/
+
+/**
+************************************************************************************************************************
+* @file gfx11addrlib.h
+* @brief Contains the Gfx11Lib class definition.
+************************************************************************************************************************
+*/
+
+#ifndef __GFX11_ADDR_LIB_H__
+#define __GFX11_ADDR_LIB_H__
+
+#include "addrlib2.h"
+#include "coord.h"
+#include "gfx11SwizzlePattern.h"
+
+namespace Addr
+{
+namespace V2
+{
+
+/**
+************************************************************************************************************************
+* @brief GFX11 specific settings structure.
+************************************************************************************************************************
+*/
+struct Gfx11ChipSettings
+{
+ struct
+ {
+ UINT_32 reserved1 : 32;
+
+ // Misc configuration bits
+ UINT_32 reserved2 : 32;
+ };
+};
+
+/**
+************************************************************************************************************************
+* @brief GFX11 data surface type.
+************************************************************************************************************************
+*/
+enum Gfx11DataType
+{
+ Gfx11DataColor,
+ Gfx11DataDepthStencil,
+};
+
+const UINT_32 Gfx11LinearSwModeMask = (1u << ADDR_SW_LINEAR);
+
+const UINT_32 Gfx11Blk256BSwModeMask = (1u << ADDR_SW_256B_D);
+
+const UINT_32 Gfx11Blk4KBSwModeMask = (1u << ADDR_SW_4KB_S) |
+ (1u << ADDR_SW_4KB_D) |
+ (1u << ADDR_SW_4KB_S_X) |
+ (1u << ADDR_SW_4KB_D_X);
+
+const UINT_32 Gfx11Blk64KBSwModeMask = (1u << ADDR_SW_64KB_S) |
+ (1u << ADDR_SW_64KB_D) |
+ (1u << ADDR_SW_64KB_S_T) |
+ (1u << ADDR_SW_64KB_D_T) |
+ (1u << ADDR_SW_64KB_Z_X) |
+ (1u << ADDR_SW_64KB_S_X) |
+ (1u << ADDR_SW_64KB_D_X) |
+ (1u << ADDR_SW_64KB_R_X);
+
+const UINT_32 Gfx11Blk256KBSwModeMask = (1u << ADDR_SW_256KB_Z_X) |
+ (1u << ADDR_SW_256KB_S_X) |
+ (1u << ADDR_SW_256KB_D_X) |
+ (1u << ADDR_SW_256KB_R_X);
+
+const UINT_32 Gfx11ZSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
+ (1u << ADDR_SW_256KB_Z_X);
+
+const UINT_32 Gfx11StandardSwModeMask = (1u << ADDR_SW_4KB_S) |
+ (1u << ADDR_SW_64KB_S) |
+ (1u << ADDR_SW_64KB_S_T) |
+ (1u << ADDR_SW_4KB_S_X) |
+ (1u << ADDR_SW_64KB_S_X) |
+ (1u << ADDR_SW_256KB_S_X);
+
+const UINT_32 Gfx11DisplaySwModeMask = (1u << ADDR_SW_256B_D) |
+ (1u << ADDR_SW_4KB_D) |
+ (1u << ADDR_SW_64KB_D) |
+ (1u << ADDR_SW_64KB_D_T) |
+ (1u << ADDR_SW_4KB_D_X) |
+ (1u << ADDR_SW_64KB_D_X) |
+ (1u << ADDR_SW_256KB_D_X);
+
+const UINT_32 Gfx11RenderSwModeMask = (1u << ADDR_SW_64KB_R_X) |
+ (1u << ADDR_SW_256KB_R_X);
+
+const UINT_32 Gfx11XSwModeMask = (1u << ADDR_SW_4KB_S_X) |
+ (1u << ADDR_SW_4KB_D_X) |
+ (1u << ADDR_SW_64KB_Z_X) |
+ (1u << ADDR_SW_64KB_S_X) |
+ (1u << ADDR_SW_64KB_D_X) |
+ (1u << ADDR_SW_64KB_R_X) |
+ Gfx11Blk256KBSwModeMask;
+
+const UINT_32 Gfx11TSwModeMask = (1u << ADDR_SW_64KB_S_T) |
+ (1u << ADDR_SW_64KB_D_T);
+
+const UINT_32 Gfx11XorSwModeMask = Gfx11XSwModeMask |
+ Gfx11TSwModeMask;
+
+const UINT_32 Gfx11Rsrc1dSwModeMask = (1u << ADDR_SW_LINEAR) |
+ (1u << ADDR_SW_64KB_R_X) |
+ (1u << ADDR_SW_64KB_Z_X) ;
+
+const UINT_32 Gfx11Rsrc2dSwModeMask = Gfx11LinearSwModeMask |
+ Gfx11DisplaySwModeMask |
+ Gfx11ZSwModeMask |
+ Gfx11RenderSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dSwModeMask = Gfx11LinearSwModeMask |
+ Gfx11StandardSwModeMask |
+ Gfx11ZSwModeMask |
+ Gfx11RenderSwModeMask |
+ (1u << ADDR_SW_64KB_D_X) |
+ (1u << ADDR_SW_256KB_D_X);
+
+const UINT_32 Gfx11Rsrc2dPrtSwModeMask =
+ (Gfx11Blk4KBSwModeMask | Gfx11Blk64KBSwModeMask) & ~Gfx11XSwModeMask & Gfx11Rsrc2dSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dPrtSwModeMask =
+ (Gfx11Blk4KBSwModeMask | Gfx11Blk64KBSwModeMask) & ~Gfx11XSwModeMask & Gfx11Rsrc3dSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dThin64KBSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
+ (1u << ADDR_SW_64KB_R_X);
+
+const UINT_32 Gfx11Rsrc3dThin256KBSwModeMask = (1u << ADDR_SW_256KB_Z_X) |
+ (1u << ADDR_SW_256KB_R_X);
+
+const UINT_32 Gfx11Rsrc3dThinSwModeMask = Gfx11Rsrc3dThin64KBSwModeMask | Gfx11Rsrc3dThin256KBSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dThickSwModeMask = Gfx11Rsrc3dSwModeMask & ~(Gfx11Rsrc3dThinSwModeMask | Gfx11LinearSwModeMask);
+
+const UINT_32 Gfx11Rsrc3dThick4KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk4KBSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dThick64KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk64KBSwModeMask;
+
+const UINT_32 Gfx11Rsrc3dThick256KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk256KBSwModeMask;
+
+const UINT_32 Gfx11MsaaSwModeMask = Gfx11ZSwModeMask |
+ Gfx11RenderSwModeMask;
+
+const UINT_32 Dcn32SwModeMask = (1u << ADDR_SW_LINEAR) |
+ (1u << ADDR_SW_64KB_D) |
+ (1u << ADDR_SW_64KB_D_T) |
+ (1u << ADDR_SW_64KB_D_X) |
+ (1u << ADDR_SW_64KB_R_X) |
+ (1u << ADDR_SW_256KB_D_X) |
+ (1u << ADDR_SW_256KB_R_X);
+
+const UINT_32 Size256K = 262144u;
+const UINT_32 Log2Size256K = 18u;
+
+/**
+************************************************************************************************************************
+* @brief This class is the GFX11 specific address library
+* function set.
+************************************************************************************************************************
+*/
+class Gfx11Lib : public Lib
+{
+public:
+ /// Creates Gfx11Lib object
+ static Addr::Lib* CreateObj(const Client* pClient)
+ {
+ VOID* pMem = Object::ClientAlloc(sizeof(Gfx11Lib), pClient);
+ return (pMem != NULL) ? new (pMem) Gfx11Lib(pClient) : NULL;
+ }
+
+protected:
+ Gfx11Lib(const Client* pClient);
+ virtual ~Gfx11Lib();
+
+ virtual BOOL_32 HwlIsStandardSwizzle(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const
+ {
+ return m_swizzleModeTable[swizzleMode].isStd;
+ }
+
+ virtual BOOL_32 HwlIsDisplaySwizzle(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const
+ {
+ return m_swizzleModeTable[swizzleMode].isDisp;
+ }
+
+ virtual BOOL_32 HwlIsThin(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const
+ {
+ return ((IsTex1d(resourceType) == TRUE) ||
+ (IsTex2d(resourceType) == TRUE) ||
+ ((IsTex3d(resourceType) == TRUE) &&
+ (m_swizzleModeTable[swizzleMode].isStd == FALSE) &&
+ (m_swizzleModeTable[swizzleMode].isDisp == FALSE)));
+ }
+
+ virtual BOOL_32 HwlIsThick(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const
+ {
+ return ((IsTex3d(resourceType) == TRUE) &&
+ (m_swizzleModeTable[swizzleMode].isStd || m_swizzleModeTable[swizzleMode].isDisp));
+ }
+
+ virtual ADDR_E_RETURNCODE HwlComputeHtileInfo(
+ const ADDR2_COMPUTE_HTILE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_HTILE_INFO_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeDccInfo(
+ const ADDR2_COMPUTE_DCCINFO_INPUT* pIn,
+ ADDR2_COMPUTE_DCCINFO_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeHtileAddrFromCoord(
+ const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn,
+ ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT* pOut);
+
+ virtual ADDR_E_RETURNCODE HwlComputeHtileCoordFromAddr(
+ const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT* pIn,
+ ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT* pOut);
+
+ virtual ADDR_E_RETURNCODE HwlSupportComputeDccAddrFromCoord(
+ const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn);
+
+ virtual VOID HwlComputeDccAddrFromCoord(
+ const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn,
+ ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT* pOut);
+
+ virtual UINT_32 HwlGetEquationIndex(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
+
+ virtual UINT_32 HwlGetEquationTableInfo(const ADDR_EQUATION** ppEquationTable) const
+ {
+ *ppEquationTable = m_equationTable;
+
+ return m_numEquations;
+ }
+
+ virtual ADDR_E_RETURNCODE HwlComputePipeBankXor(
+ const ADDR2_COMPUTE_PIPEBANKXOR_INPUT* pIn,
+ ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSlicePipeBankXor(
+ const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT* pIn,
+ ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSubResourceOffsetForSwizzlePattern(
+ const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT* pIn,
+ ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeNonBlockCompressedView(
+ const ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_INPUT* pIn,
+ ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlGetPreferredSurfaceSetting(
+ const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
+ ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoSanityCheck(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoLinear(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
+
+ virtual ADDR_E_RETURNCODE HwlComputeSurfaceAddrFromCoordTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
+
+ virtual UINT_32 HwlComputeMaxBaseAlignments() const;
+
+ virtual UINT_32 HwlComputeMaxMetaBaseAlignments() const;
+
+ virtual BOOL_32 HwlInitGlobalParams(const ADDR_CREATE_INPUT* pCreateIn);
+
+ virtual ChipFamily HwlConvertChipFamily(UINT_32 uChipFamily, UINT_32 uChipRevision);
+
+private:
+ // Initialize equation table
+ VOID InitEquationTable();
+
+ ADDR_E_RETURNCODE ComputeSurfaceInfoMacroTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
+
+ ADDR_E_RETURNCODE ComputeSurfaceInfoMicroTiled(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
+
+ ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMacroTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
+
+ ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMicroTiled(
+ const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
+ ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
+
+ UINT_32 ComputeOffsetFromSwizzlePattern(
+ const UINT_64* pPattern,
+ UINT_32 numBits,
+ UINT_32 x,
+ UINT_32 y,
+ UINT_32 z,
+ UINT_32 s) const;
+
+ UINT_32 ComputeOffsetFromEquation(
+ const ADDR_EQUATION* pEq,
+ UINT_32 x,
+ UINT_32 y,
+ UINT_32 z) const;
+
+ ADDR_E_RETURNCODE ComputeStereoInfo(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
+ UINT_32* pAlignY,
+ UINT_32* pRightXor) const;
+
+ static void GetMipSize(
+ UINT_32 mip0Width,
+ UINT_32 mip0Height,
+ UINT_32 mip0Depth,
+ UINT_32 mipId,
+ UINT_32* pMipWidth,
+ UINT_32* pMipHeight,
+ UINT_32* pMipDepth = NULL)
+ {
+ *pMipWidth = ShiftCeil(Max(mip0Width, 1u), mipId);
+ *pMipHeight = ShiftCeil(Max(mip0Height, 1u), mipId);
+
+ if (pMipDepth != NULL)
+ {
+ *pMipDepth = ShiftCeil(Max(mip0Depth, 1u), mipId);
+ }
+ }
+
+ const ADDR_SW_PATINFO* GetSwizzlePatternInfo(
+ AddrSwizzleMode swizzleMode,
+ AddrResourceType resourceType,
+ UINT_32 log2Elem,
+ UINT_32 numFrag) const;
+
+ VOID GetSwizzlePatternFromPatternInfo(
+ const ADDR_SW_PATINFO* pPatInfo,
+ ADDR_BIT_SETTING (&pSwizzle)[20]) const
+ {
+ memcpy(pSwizzle,
+ GFX11_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx],
+ sizeof(GFX11_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx]));
+
+ memcpy(&pSwizzle[8],
+ GFX11_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx],
+ sizeof(GFX11_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx]));
+
+ memcpy(&pSwizzle[12],
+ GFX11_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx],
+ sizeof(GFX11_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx]));
+
+ memcpy(&pSwizzle[16],
+ GFX11_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx],
+ sizeof(GFX11_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx]));
+ }
+
+ VOID ConvertSwizzlePatternToEquation(
+ UINT_32 elemLog2,
+ AddrResourceType rsrcType,
+ AddrSwizzleMode swMode,
+ const ADDR_SW_PATINFO* pPatInfo,
+ ADDR_EQUATION* pEquation) const;
+
+ static INT_32 GetMetaElementSizeLog2(Gfx11DataType dataType);
+
+ static INT_32 GetMetaCacheSizeLog2(Gfx11DataType dataType);
+
+ void GetBlk256SizeLog2(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode,
+ UINT_32 elemLog2,
+ UINT_32 numSamplesLog2,
+ Dim3d* pBlock) const;
+
+ void GetCompressedBlockSizeLog2(
+ Gfx11DataType dataType,
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode,
+ UINT_32 elemLog2,
+ UINT_32 numSamplesLog2,
+ Dim3d* pBlock) const;
+
+ INT_32 GetMetaOverlapLog2(
+ Gfx11DataType dataType,
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode,
+ UINT_32 elemLog2,
+ UINT_32 numSamplesLog2) const;
+
+ INT_32 Get3DMetaOverlapLog2(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode,
+ UINT_32 elemLog2) const;
+
+ UINT_32 GetMetaBlkSize(
+ Gfx11DataType dataType,
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode,
+ UINT_32 elemLog2,
+ UINT_32 numSamplesLog2,
+ BOOL_32 pipeAlign,
+ Dim3d* pBlock) const;
+
+ INT_32 GetPipeRotateAmount(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const;
+
+ INT_32 GetEffectiveNumPipes() const
+ {
+ return ((m_numSaLog2 + 1) >= m_pipesLog2) ? m_pipesLog2 : m_numSaLog2 + 1;
+ }
+
+ BOOL_32 IsRbAligned(
+ AddrResourceType resourceType,
+ AddrSwizzleMode swizzleMode) const
+ {
+ const BOOL_32 isRtopt = IsRtOptSwizzle(swizzleMode);
+ const BOOL_32 isZ = IsZOrderSwizzle(swizzleMode);
+ const BOOL_32 isDisplay = IsDisplaySwizzle(swizzleMode);
+
+ return (IsTex2d(resourceType) && (isRtopt || isZ)) ||
+ (IsTex3d(resourceType) && isDisplay);
+
+ }
+
+ UINT_32 GetValidDisplaySwizzleModes(UINT_32 bpp) const;
+
+ BOOL_32 IsValidDisplaySwizzleMode(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
+
+ UINT_32 GetMaxNumMipsInTail(UINT_32 blockSizeLog2, BOOL_32 isThin) const;
+
+ static ADDR2_BLOCK_SET GetAllowedBlockSet(ADDR2_SWMODE_SET allowedSwModeSet, AddrResourceType rsrcType)
+ {
+ ADDR2_BLOCK_SET allowedBlockSet = {};
+
+ allowedBlockSet.micro = (allowedSwModeSet.value & Gfx11Blk256BSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.linear = (allowedSwModeSet.value & Gfx11LinearSwModeMask) ? TRUE : FALSE;
+
+ if (rsrcType == ADDR_RSRC_TEX_3D)
+ {
+ allowedBlockSet.macroThick4KB = (allowedSwModeSet.value & Gfx11Rsrc3dThick4KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.macroThin64KB = (allowedSwModeSet.value & Gfx11Rsrc3dThin64KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.macroThick64KB = (allowedSwModeSet.value & Gfx11Rsrc3dThick64KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.gfx11.thin256KB = (allowedSwModeSet.value & Gfx11Rsrc3dThin256KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.gfx11.thick256KB = (allowedSwModeSet.value & Gfx11Rsrc3dThick256KBSwModeMask) ? TRUE : FALSE;
+ }
+ else
+ {
+ allowedBlockSet.macroThin4KB = (allowedSwModeSet.value & Gfx11Blk4KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.macroThin64KB = (allowedSwModeSet.value & Gfx11Blk64KBSwModeMask) ? TRUE : FALSE;
+ allowedBlockSet.gfx11.thin256KB = (allowedSwModeSet.value & Gfx11Blk256KBSwModeMask) ? TRUE : FALSE;
+ }
+
+ return allowedBlockSet;
+ }
+
+ static ADDR2_SWTYPE_SET GetAllowedSwSet(ADDR2_SWMODE_SET allowedSwModeSet)
+ {
+ ADDR2_SWTYPE_SET allowedSwSet = {};
+
+ allowedSwSet.sw_Z = (allowedSwModeSet.value & Gfx11ZSwModeMask) ? TRUE : FALSE;
+ allowedSwSet.sw_S = (allowedSwModeSet.value & Gfx11StandardSwModeMask) ? TRUE : FALSE;
+ allowedSwSet.sw_D = (allowedSwModeSet.value & Gfx11DisplaySwModeMask) ? TRUE : FALSE;
+ allowedSwSet.sw_R = (allowedSwModeSet.value & Gfx11RenderSwModeMask) ? TRUE : FALSE;
+
+ return allowedSwSet;
+ }
+
+ BOOL_32 IsInMipTail(
+ Dim3d mipTailDim,
+ UINT_32 maxNumMipsInTail,
+ UINT_32 mipWidth,
+ UINT_32 mipHeight,
+ UINT_32 numMipsToTheEnd) const
+ {
+ BOOL_32 inTail = ((mipWidth <= mipTailDim.w) &&
+ (mipHeight <= mipTailDim.h) &&
+ (numMipsToTheEnd <= maxNumMipsInTail));
+
+ return inTail;
+ }
+
+ UINT_32 GetBankXorBits(UINT_32 blockBits) const
+ {
+ return (blockBits > m_pipeInterleaveLog2 + m_pipesLog2 + ColumnBits) ?
+ Min(blockBits - m_pipeInterleaveLog2 - m_pipesLog2 - ColumnBits, BankBits) : 0;
+ }
+
+ BOOL_32 ValidateNonSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
+ BOOL_32 ValidateSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
+
+ BOOL_32 IsBlock256kb(AddrSwizzleMode swizzleMode) const { return IsBlockVariable(swizzleMode); }
+
+ // TODO: figure out if there is any Column bits on GFX11...
+ static const UINT_32 ColumnBits = 2;
+ static const UINT_32 BankBits = 4;
+ static const UINT_32 UnalignedDccType = 3;
+
+ static const Dim3d Block256_3d[MaxNumOfBpp];
+ static const Dim3d Block256K_Log2_3d[MaxNumOfBpp];
+ static const Dim3d Block64K_Log2_3d[MaxNumOfBpp];
+ static const Dim3d Block4K_Log2_3d[MaxNumOfBpp];
+
+ static const SwizzleModeFlags SwizzleModeTable[ADDR_SW_MAX_TYPE];
+
+ // Number of packers log2
+ UINT_32 m_numPkrLog2;
+ // Number of shader array log2
+ UINT_32 m_numSaLog2;
+
+ Gfx11ChipSettings m_settings;
+
+ UINT_32 m_colorBaseIndex;
+ UINT_32 m_htileBaseIndex;
+ UINT_32 m_dccBaseIndex;
+};
+
+} // V2
+} // Addr
+
+#endif
+