You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1739 lines
61 KiB
C
1739 lines
61 KiB
C
//=====================================================================
|
|
// Copyright (c) 2020 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
|
|
// AUTHORS OR COPYRIGHT HOLDERS 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.
|
|
//
|
|
//=====================================================================
|
|
#ifndef BC7_ENCODE_KERNEL_H
|
|
#define BC7_ENCODE_KERNEL_H
|
|
|
|
#pragma warning(disable:4505) // disable warnings on unreferenced local function has been removed
|
|
|
|
#if defined(ISPC)||defined(ASPM)
|
|
//#include "..\..\Common\Common_Def.h"
|
|
#include "Common_Def.h"
|
|
#else
|
|
#include "Common_Def.h"
|
|
#endif
|
|
|
|
// cmp param uniform data tracking
|
|
typedef CGU_UINT8 CGU_CHANNEL;
|
|
typedef CGV_UINT32 CGV_SHIFT32;
|
|
typedef CGV_UINT8 CGV_BYTE;
|
|
typedef CGV_FLOAT CGV_ERROR;
|
|
typedef CGV_FLOAT CGV_IMAGE;
|
|
typedef CGV_INT CGV_EPOCODE;
|
|
typedef CGV_UINT8 CGV_CMPOUT;
|
|
typedef CGV_UINT8 CGV_INDEX;
|
|
typedef CGV_UINT32 CGV_INDEXPACKED;
|
|
typedef CGV_UINT32 CGV_CMPOUTPACKED;
|
|
typedef CGV_INT CGV_LEVELS;
|
|
typedef CGV_INT CGV_SUBSETS;
|
|
typedef CGV_INT CGV_MASK;
|
|
typedef CGV_INT CGV_ITTERATIONS;
|
|
typedef CGV_INT CGV_PARTID;
|
|
typedef CGV_INT CGV_FIXUPINDEX;
|
|
typedef CGV_INT CGV_RAMP;
|
|
typedef CGV_INT CGV_ENTRIES;
|
|
typedef CGV_INT CGV_TYPEINT;
|
|
typedef CGV_UINT32 CGV_TYPEUINT32;
|
|
typedef CGU_UINT8 CGU_BYTE;
|
|
typedef CGV_CMPOUT CGUV_CMPOUT;
|
|
typedef CGU_UINT8 CGUV_DSTPTR;
|
|
|
|
#define USE_VARYING
|
|
#ifdef USE_VARYING
|
|
typedef CGV_INT CGUV_BLOCKWIDTH;
|
|
#else
|
|
typedef CGU_INT CGUV_BLOCKWIDTH;
|
|
#endif
|
|
|
|
#ifndef ASPM_GPU
|
|
|
|
struct cmp_bc7_state
|
|
{
|
|
CGV_IMAGE block[16][4];
|
|
CGV_SHIFT32 best_data[4];
|
|
} ;
|
|
|
|
|
|
typedef enum
|
|
{
|
|
CGU_FORMAT_Unknown, // Undefined texture format.
|
|
|
|
// Channel Component formats-------------------------------------------------------------------------------
|
|
CGU_FORMAT_RGBA_8888, // RGBA format with 8-bit fixed channels.
|
|
|
|
// Formats supported by GPU
|
|
CGU_FORMAT_BC1, // A four component opaque (or 1-bit alpha) compressed texture format for Microsoft DirectX10. Identical to DXT1. Four bits per pixel.
|
|
CGU_FORMAT_BC6H, // BC6H compressed texture format
|
|
CGU_FORMAT_BC7, // BC7 compressed texture format
|
|
|
|
// Formats supported by CPU
|
|
CGU_FORMAT_GTC, // GTC Gradient Texture Compressor
|
|
CGU_FORMAT_MAX
|
|
} CGU_FORMAT;
|
|
|
|
//------------------------------------
|
|
// The structure describing a texture
|
|
//------------------------------------
|
|
struct CGU_Texture_Type
|
|
{
|
|
// Optional Settings
|
|
CGU_FLOAT m_fquality; // Minimum resulting quality to maintain while processing the texture, default is 0.05
|
|
CGU_INT8 m_nBlockHeight; // Size of the texture tiles (blocks) to use.during processing
|
|
CGU_INT8 m_nBlockWidth; // default = 4
|
|
CGU_INT8 m_nBlockDepth; // default = 1
|
|
|
|
// Required settings
|
|
CGU_FORMAT m_format; // Texture format
|
|
CGU_UINT32 m_src_width; // Width of the texture.
|
|
CGU_UINT32 m_src_height; // Height of the texture.
|
|
CGU_UINT32 m_stride; // Number of bytes to start of next line
|
|
CGU_UINT32 m_dwDataSize; // Size of the allocated texture data.
|
|
CGU_UINT8* m_pData; // Pointer to the texture data
|
|
};
|
|
|
|
#endif // End of ASPM_CPU
|
|
|
|
#define SOURCE_BLOCK_SIZE 16 // Size of a source block in pixels (each pixel has RGBA:8888 channels)
|
|
#define COMPRESSED_BLOCK_SIZE 16 // Size of a compressed block in bytes
|
|
#define MAX_CHANNELS 4
|
|
#define MAX_SUBSETS 3 // Maximum number of possible subsets
|
|
#define MAX_SUBSET_SIZE 16 // Largest possible size for an individual subset
|
|
#define BC7_qFAST_THRESHOLD 0.50f
|
|
#define MAX_INDEX_BITS 4 // Maximum number of index bits
|
|
|
|
typedef struct
|
|
{
|
|
CGV_IMAGE image;
|
|
CGV_INDEX index;
|
|
} CMP_di;
|
|
|
|
typedef struct
|
|
{
|
|
CGV_IMAGE image;
|
|
CGV_UINT8 index;
|
|
} CMP_du;
|
|
|
|
#define MAX_PARTITION_ENTRIES 64
|
|
|
|
#define MAX_PARTITIONS_TABLE 193
|
|
|
|
#define MAX_PARTITIONS 64 // Maximum number of partition types
|
|
|
|
#define EPSILON 0.00390625f
|
|
#define DIMENSION 4
|
|
#define BlockX 4
|
|
#define BlockY 4
|
|
#define QUANT_RT 250.0f // quality = 0.05f
|
|
//==========================================================================================================
|
|
#define LOG_CL_RANGE 5
|
|
#define LOG_CL_BASE 2
|
|
#define BIT_BASE 5
|
|
#define BIT_RANGE 9
|
|
#define MAX_CLUSTERS_BIG 16
|
|
#define MAX_CLUSTERS 8
|
|
#define BTT(bits) (bits-BIT_BASE)
|
|
#define CLT(cl) (cl-LOG_CL_BASE)
|
|
|
|
#define MAX_TRY_QUANT_TRACE 2 // used in optQuantTrace_d : increasing this has no gain in quality!, keep it set at 2
|
|
#define MAX_TRY_SHAKER 5 // used in ep_shaker_2_d if set at 4 PSNR drops by -0.1 SSIM stays the same
|
|
#define NUM_BLOCK_TYPES 8 // Number of block types in the format
|
|
|
|
#define BC7_MAX_TRACE 25000
|
|
|
|
// If this is defined, ramp calculation is done via math floor and division.
|
|
// Otherwise, ramp calculation is done by bit shifting
|
|
#define USE_HIGH_PRECISION_INTERPOLATION_BC7
|
|
|
|
typedef struct
|
|
{
|
|
CGU_INT32 k;
|
|
CGV_FLOAT d;
|
|
} TRACE;
|
|
|
|
|
|
typedef struct
|
|
#ifdef ASPM
|
|
BC7_EncodeState
|
|
#endif
|
|
{
|
|
CGV_IMAGE image_src[64];
|
|
CGV_CMPOUT cmp_out[COMPRESSED_BLOCK_SIZE];
|
|
|
|
// Common
|
|
CGV_ERROR opaque_err; // error for coding alpha=255
|
|
CGV_ERROR best_err;
|
|
|
|
// set per mode
|
|
CGU_CHANNEL channels3or4;
|
|
CGU_UINT8 bits;
|
|
CGU_INT clusters;
|
|
CGU_BYTE componentBits;
|
|
CGU_UINT8 numPartitionModes;
|
|
CGU_INT maxSubSets;
|
|
CGU_UINT8 numClusters0[2];
|
|
CGU_UINT8 numClusters1[2];
|
|
CGU_UINT8 max_idxMode;
|
|
CGU_INT modeBits[2];
|
|
CGU_BOOL optimizedQ;
|
|
|
|
CGU_UINT32 validModeMask;
|
|
CGU_INT part_count;
|
|
CGU_CHANNEL channels;
|
|
|
|
// use_icmp
|
|
CGV_CMPOUTPACKED best_cmp_out[5];
|
|
CGV_BOOL cmp_isout16Bytes;
|
|
CGU_INT refineIterations;
|
|
CGU_INT fastSkipTreshold;
|
|
}
|
|
#ifndef ASPM
|
|
BC7_EncodeState
|
|
#endif
|
|
;
|
|
|
|
typedef struct
|
|
#ifdef ASPM
|
|
cmp_mode_parameters
|
|
#endif
|
|
{
|
|
CGV_EPOCODE color_qendpoint[8];
|
|
CGV_EPOCODE alpha_qendpoint[8];
|
|
CGV_INDEXPACKED best_color_index[2];
|
|
CGV_INDEXPACKED best_alpha_index[2];
|
|
CGV_INDEX color_index[SOURCE_BLOCK_SIZE];
|
|
CGV_INDEX alpha_index[SOURCE_BLOCK_SIZE];
|
|
CGV_SHIFT32 idxMode;
|
|
CGV_SHIFT32 rotated_channel;
|
|
}
|
|
#ifndef ASPM
|
|
cmp_mode_parameters
|
|
#endif
|
|
;
|
|
|
|
|
|
typedef struct
|
|
#ifdef ASPM
|
|
BC7_Encode
|
|
#endif
|
|
{
|
|
// Global data setup at initialization time
|
|
CGU_FLOAT quality; // range is 0 to 1
|
|
CGU_FLOAT errorThreshold; // use 5 to 75
|
|
CGU_UINT32 validModeMask; // bit for mode masks def to 0xFF
|
|
CGU_BOOL imageNeedsAlpha; // default: false
|
|
CGU_BOOL colourRestrict; // default: false
|
|
CGU_BOOL alphaRestrict; // default: false
|
|
|
|
// Used to track errors in internal state code
|
|
CGV_ERROR opaque_err;
|
|
CGV_ERROR best_err;
|
|
|
|
CGU_FLOAT minThreshold;
|
|
CGU_FLOAT maxThreshold;;
|
|
|
|
// icmp code settings
|
|
CGU_INT refineIterations;
|
|
CGU_INT part_count;
|
|
CGU_INT channels;
|
|
}
|
|
#ifndef ASPM
|
|
BC7_Encode
|
|
#endif
|
|
;
|
|
|
|
CMP_CONSTANT CGU_FLOAT rampWeights[5][SOURCE_BLOCK_SIZE] = {
|
|
{ 0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f}, // 0 bit index
|
|
{ 0.000000f,1.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f}, // 1 bit index
|
|
{ 0.000000f,0.328125f,0.671875f,1.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f}, // 2 bit index
|
|
{ 0.000000f,0.140625f,0.281250f,0.421875f,0.578125f,0.718750f,0.859375f,1.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f,0.000000f}, // 3 bit index
|
|
{ 0.000000f,0.062500f,0.140625f,0.203125f,0.265625f,0.328125f,0.406250f,0.468750f,0.531250f,0.593750f,0.671875f,0.734375f,0.796875f,0.859375f,0.937500f,1.000000f} // 4 bit index
|
|
};
|
|
|
|
#ifndef ASPM_GPU
|
|
typedef struct
|
|
#ifdef ASPM
|
|
BC7_EncodeRamps
|
|
#endif
|
|
{
|
|
CGU_INT ep_d[4][256];
|
|
#ifdef USE_BC7_SP_ERR_IDX
|
|
CGU_UINT8 sp_err[3*4*256*2*2*16];
|
|
CGU_INT sp_idx[3*4*256*2*2*16*2];
|
|
#endif
|
|
#ifdef USE_BC7_RAMP
|
|
CGU_FLOAT ramp[3*4*256*256*16];
|
|
#endif
|
|
CGU_BOOL ramp_init;
|
|
}
|
|
#ifndef ASPM
|
|
BC7_EncodeRamps
|
|
#endif
|
|
;
|
|
#endif
|
|
|
|
CMP_CONSTANT CGU_UINT8 npv_nd[2][8] = {
|
|
{1,2,4,8,16,32,0,0}, // 3
|
|
{1,2,4,0,0 ,0 ,0,0} // 4
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
NO_ALPHA,
|
|
COMBINED_ALPHA,
|
|
SEPARATE_ALPHA
|
|
} CMP_BCE;
|
|
|
|
// Endpoint encoding type
|
|
typedef enum
|
|
{
|
|
NO_PBIT,
|
|
ONE_PBIT,
|
|
TWO_PBIT,
|
|
THREE_PBIT,
|
|
FOUR_PBIT,
|
|
FIVE_PBIT
|
|
} CMP_PBIT;
|
|
|
|
typedef struct
|
|
#ifdef ASPM
|
|
BC7_Encode_local
|
|
#endif
|
|
{
|
|
// Data for compressing a particular block mode
|
|
CGV_INT clusters[2];
|
|
CGV_BYTE parityBits;
|
|
CGV_BYTE componentBits[MAX_CHANNELS];
|
|
|
|
CMP_BCE encodingType; // Type of block
|
|
CGU_UINT8 partitionBits; // Number of bits for partition data
|
|
CGU_UINT8 rotationBits; // Number of bits for component rotation
|
|
CGU_UINT8 indexModeBits; // Number of bits for index selection
|
|
CMP_PBIT pBitType; // Type of P-bit encoding
|
|
CGU_UINT8 subsetCount; // Number of subsets
|
|
CGU_UINT8 indexBits[2]; // Number of bits per index in each index set
|
|
|
|
// Bulky temporary data used during compression of a block
|
|
CGV_UINT8 storedindex[MAX_PARTITIONS][MAX_SUBSETS][MAX_SUBSET_SIZE];
|
|
CGV_ERROR storedError[MAX_PARTITIONS];
|
|
CGV_UINT8 sortedModes[MAX_PARTITIONS];
|
|
|
|
// This stores the min and max for the components of the block, and the ranges
|
|
CGV_IMAGE blockMin[MAX_CHANNELS];
|
|
CGV_IMAGE blockMax[MAX_CHANNELS];
|
|
CGV_IMAGE blockRange[MAX_CHANNELS];
|
|
CGV_IMAGE blockMaxRange;
|
|
}
|
|
#ifndef ASPM
|
|
BC7_Encode_local
|
|
#endif
|
|
;
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
CART,
|
|
SAME_PAR,
|
|
BCC,
|
|
SAME_FCC,
|
|
FCC,
|
|
FCC_SAME_BCC,
|
|
} CMP_qt;
|
|
|
|
// Block component encoding
|
|
|
|
|
|
// Descriptor structure for block encodings
|
|
typedef struct
|
|
{
|
|
uniform CMP_BCE encodingType; // Type of block
|
|
CGU_UINT8 partitionBits; // Number of bits for partition data
|
|
CGU_UINT8 rotationBits; // Number of bits for component rotation
|
|
CGU_UINT8 indexModeBits; // Number of bits for index selection
|
|
CGU_UINT8 scalarBits; // Number of bits for one scalar endpoint
|
|
CGU_UINT8 vectorBits; // Number of bits for one vector endpoint(excluding P bits)
|
|
uniform CMP_PBIT pBitType; // Type of P-bit encoding
|
|
CGU_UINT8 subsetCount; // Number of subsets
|
|
CGU_UINT8 indexBits[2]; // Number of bits per index in each index set
|
|
} CMP_BTI;
|
|
|
|
typedef enum
|
|
{
|
|
COMP_RED = 0,
|
|
COMP_GREEN = 1,
|
|
COMP_BLUE = 2,
|
|
COMP_ALPHA = 3
|
|
} COMPONENT;
|
|
|
|
CMP_CONSTANT CGU_UINT8 componentRotations[4][4] = {
|
|
{ COMP_ALPHA, COMP_RED, COMP_GREEN, COMP_BLUE },
|
|
{ COMP_RED, COMP_ALPHA, COMP_GREEN, COMP_BLUE },
|
|
{ COMP_GREEN, COMP_RED, COMP_ALPHA, COMP_BLUE },
|
|
{ COMP_BLUE, COMP_RED, COMP_GREEN, COMP_ALPHA }
|
|
};
|
|
|
|
CMP_CONSTANT CMP_BTI bti[NUM_BLOCK_TYPES] = {
|
|
//encodingType,partitionBits,rotationBits,indexModeBits,scalarBits,vectorBits,pBitType, subsetCount,indexBits[0]&[1]
|
|
{ NO_ALPHA, 4, 0, 0, 0, 12, TWO_PBIT, 3, { 3, 0 } }, // Format Mode 0
|
|
{ NO_ALPHA, 6, 0, 0, 0, 18, ONE_PBIT, 2, { 3, 0 } }, // Format Mode 1
|
|
{ NO_ALPHA, 6, 0, 0, 0, 15, NO_PBIT, 3, { 2, 0 } }, // Format Mode 2
|
|
{ NO_ALPHA, 6, 0, 0, 0, 21, TWO_PBIT, 2, { 2, 0 } }, // Format Mode 3
|
|
{ SEPARATE_ALPHA, 0, 2, 1, 6, 15, NO_PBIT, 1, { 2, 3 } }, // Format Mode 4
|
|
{ SEPARATE_ALPHA, 0, 2, 0, 8, 21, NO_PBIT, 1, { 2, 2 } }, // Format Mode 5
|
|
{ COMBINED_ALPHA, 0, 0, 0, 0, 28, TWO_PBIT, 1, { 4, 0 } }, // Format Mode 6
|
|
{ COMBINED_ALPHA, 6, 0, 0, 0, 20, TWO_PBIT, 2, { 2, 0 } } // Format Mode 7
|
|
};
|
|
|
|
CMP_CONSTANT CGU_UINT8 par_vectors_nd[2][8][64][2][4] = {
|
|
{ // 3D
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{1,1,1,0},{1,1,1,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{1,1,1,0}},{{1,1,1,0},{0,0,0,0}},{{1,1,1,0},{1,1,1,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{1,1,0,0},{1,1,0,0}},{{1,0,1,0},{1,0,1,0}},{{0,1,1,0},{0,1,1,0}},{{0,0,0,0},{1,1,1,0}},{{1,1,1,0},{0,0,0,0}},{{0,1,0,0},{0,1,0,0}},{{1,1,1,0},{1,1,1,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{1,1,0,0},{0,0,0,0}},{{1,0,1,0},{0,0,0,0}},{{0,1,1,0},{0,0,0,0}},{{0,0,0,0},{1,1,0,0}},{{1,1,0,0},{1,1,0,0}},{{1,0,1,0},{1,1,0,0}},{{0,1,1,0},{1,1,0,0}},
|
|
{{0,0,0,0},{1,0,1,0}},{{1,1,0,0},{1,0,1,0}},{{1,0,1,0},{1,0,1,0}},{{0,1,1,0},{1,0,1,0}},{{0,0,0,0},{0,1,1,0}},{{1,1,0,0},{0,1,1,0}},{{1,0,1,0},{0,1,1,0}},{{0,1,1,0},{0,1,1,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{1,1,0,0},{0,0,0,0}},{{1,0,1,0},{0,0,0,0}},{{0,1,1,0},{0,0,0,0}},{{0,0,0,0},{1,1,0,0}},{{1,1,0,0},{1,1,0,0}},{{1,0,1,0},{1,1,0,0}},{{0,1,1,0},{1,1,0,0}},
|
|
{{0,0,0,0},{1,0,1,0}},{{1,1,0,0},{1,0,1,0}},{{1,0,1,0},{1,0,1,0}},{{0,1,1,0},{1,0,1,0}},{{0,0,0,0},{0,1,1,0}},{{1,1,0,0},{0,1,1,0}},{{1,0,1,0},{0,1,1,0}},{{0,1,1,0},{0,1,1,0}},
|
|
{{1,0,0,0},{1,1,1,0}},{{0,1,0,0},{1,1,1,0}},{{0,0,1,0},{1,1,1,0}},{{1,1,1,0},{1,1,1,0}},{{1,0,0,0},{0,0,1,0}},{{0,1,0,0},{0,0,1,0}},{{0,0,1,0},{0,0,1,0}},{{1,1,1,0},{0,0,1,0}},
|
|
{{1,0,0,0},{1,0,0,0}},{{0,1,0,0},{1,0,0,0}},{{0,0,1,0},{1,0,0,0}},{{1,1,1,0},{1,0,0,0}},{{1,0,0,0},{0,1,0,0}},{{0,1,0,0},{0,1,0,0}},{{0,0,1,0},{0,1,0,0}},{{1,1,1,0},{0,1,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
},
|
|
{ // 4D
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{1,1,1,1},{1,1,1,1}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{1,1,1,1}},{{1,1,1,1},{0,0,0,0}},{{1,1,1,1},{1,1,1,1}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,1}},{{0,1,1,1},{0,0,0,0}},{{0,1,1,1},{0,1,1,1}},{{1,0,0,0},{1,0,0,0}},{{1,0,0,0},{1,1,1,1}},{{1,1,1,1},{1,0,0,0}},{{1,1,1,1},{1,1,1,1}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,1}},{{0,1,1,1},{0,0,0,0}},{{0,1,1,1},{0,1,1,1}},{{1,0,0,0},{1,0,0,0}},{{1,0,0,0},{1,1,1,1}},{{1,1,1,1},{1,0,0,0}},{{1,1,1,1},{1,1,1,1}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,1,1}},{{0,0,1,1},{0,0,0,0}},{{0,1,0,1},{0,1,0,1}},{{1,0,0,0},{1,0,0,0}},{{1,0,0,0},{1,0,1,1}},{{1,0,1,1},{1,0,0,0}},{{1,1,0,1},{1,1,0,1}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
{
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},
|
|
{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0}}
|
|
},
|
|
},
|
|
};
|
|
|
|
CMP_CONSTANT CGU_UINT32 subset_mask_table[] = {
|
|
// 2 subset region patterns
|
|
0x0000CCCCu, // 0 1100 1100 1100 1100 (MSB..LSB)
|
|
0x00008888u, // 1 1000 1000 1000 1000
|
|
0x0000EEEEu, // 2 1110 1110 1110 1110
|
|
0x0000ECC8u, // 3 1110 1100 1100 1000
|
|
0x0000C880u, // 4 1100 1000 1000 0000
|
|
0x0000FEECu, // 5 1111 1110 1110 1100
|
|
0x0000FEC8u, // 6 1111 1110 1100 1000
|
|
0x0000EC80u, // 7 1110 1100 1000 0000
|
|
0x0000C800u, // 8 1100 1000 0000 0000
|
|
0x0000FFECu, // 9 1111 1111 1110 1100
|
|
0x0000FE80u, // 10 1111 1110 1000 0000
|
|
0x0000E800u, // 11 1110 1000 0000 0000
|
|
0x0000FFE8u, // 12 1111 1111 1110 1000
|
|
0x0000FF00u, // 13 1111 1111 0000 0000
|
|
0x0000FFF0u, // 14 1111 1111 1111 0000
|
|
0x0000F000u, // 15 1111 0000 0000 0000
|
|
0x0000F710u, // 16 1111 0111 0001 0000
|
|
0x0000008Eu, // 17 0000 0000 1000 1110
|
|
0x00007100u, // 18 0111 0001 0000 0000
|
|
0x000008CEu, // 19 0000 1000 1100 1110
|
|
0x0000008Cu, // 20 0000 0000 1000 1100
|
|
0x00007310u, // 21 0111 0011 0001 0000
|
|
0x00003100u, // 22 0011 0001 0000 0000
|
|
0x00008CCEu, // 23 1000 1100 1100 1110
|
|
0x0000088Cu, // 24 0000 1000 1000 1100
|
|
0x00003110u, // 25 0011 0001 0001 0000
|
|
0x00006666u, // 26 0110 0110 0110 0110
|
|
0x0000366Cu, // 27 0011 0110 0110 1100
|
|
0x000017E8u, // 28 0001 0111 1110 1000
|
|
0x00000FF0u, // 29 0000 1111 1111 0000
|
|
0x0000718Eu, // 30 0111 0001 1000 1110
|
|
0x0000399Cu, // 31 0011 1001 1001 1100
|
|
0x0000AAAAu, // 32 1010 1010 1010 1010
|
|
0x0000F0F0u, // 33 1111 0000 1111 0000
|
|
0x00005A5Au, // 34 0101 1010 0101 1010
|
|
0x000033CCu, // 35 0011 0011 1100 1100
|
|
0x00003C3Cu, // 36 0011 1100 0011 1100
|
|
0x000055AAu, // 37 0101 0101 1010 1010
|
|
0x00009696u, // 38 1001 0110 1001 0110
|
|
0x0000A55Au, // 39 1010 0101 0101 1010
|
|
0x000073CEu, // 40 0111 0011 1100 1110
|
|
0x000013C8u, // 41 0001 0011 1100 1000
|
|
0x0000324Cu, // 42 0011 0010 0100 1100
|
|
0x00003BDCu, // 43 0011 1011 1101 1100
|
|
0x00006996u, // 44 0110 1001 1001 0110
|
|
0x0000C33Cu, // 45 1100 0011 0011 1100
|
|
0x00009966u, // 46 1001 1001 0110 0110
|
|
0x00000660u, // 47 0000 0110 0110 0000
|
|
0x00000272u, // 48 0000 0010 0111 0010
|
|
0x000004E4u, // 49 0000 0100 1110 0100
|
|
0x00004E40u, // 50 0100 1110 0100 0000
|
|
0x00002720u, // 51 0010 0111 0010 0000
|
|
0x0000C936u, // 52 1100 1001 0011 0110
|
|
0x0000936Cu, // 53 1001 0011 0110 1100
|
|
0x000039C6u, // 54 0011 1001 1100 0110
|
|
0x0000639Cu, // 55 0110 0011 1001 1100
|
|
0x00009336u, // 56 1001 0011 0011 0110
|
|
0x00009CC6u, // 57 1001 1100 1100 0110
|
|
0x0000817Eu, // 58 1000 0001 0111 1110
|
|
0x0000E718u, // 59 1110 0111 0001 1000
|
|
0x0000CCF0u, // 60 1100 1100 1111 0000
|
|
0x00000FCCu, // 61 0000 1111 1100 1100
|
|
0x00007744u, // 62 0111 0111 0100 0100
|
|
0x0000EE22u, // 63 1110 1110 0010 0010
|
|
// 3 Subset region patterns
|
|
0xF60008CCu,// 0 1111 0110 0000 0000 : 0000 1000 1100 1100 = 2222122011001100 (MSB...LSB)
|
|
0x73008CC8u,// 1 0111 0011 0000 0000 : 1000 1100 1100 1000 = 1222112211001000
|
|
0x3310CC80u,// 2 0011 0011 0001 0000 : 1100 1100 1000 0000 = 1122112210020000
|
|
0x00CEEC00u,// 3 0000 0000 1100 1110 : 1110 1100 0000 0000 = 1110110022002220
|
|
0xCC003300u,// 4 1100 1100 0000 0000 : 0011 0011 0000 0000 = 2211221100000000
|
|
0xCC0000CCu,// 5 1100 1100 0000 0000 : 0000 0000 1100 1100 = 2200220011001100
|
|
0x00CCFF00u,// 6 0000 0000 1100 1100 : 1111 1111 0000 0000 = 1111111122002200
|
|
0x3300CCCCu,// 7 0011 0011 0000 0000 : 1100 1100 1100 1100 = 1122112211001100
|
|
0xF0000F00u,// 8 1111 0000 0000 0000 : 0000 1111 0000 0000 = 2222111100000000
|
|
0xF0000FF0u,// 9 1111 0000 0000 0000 : 0000 1111 1111 0000 = 2222111111110000
|
|
0xFF0000F0u,// 10 1111 1111 0000 0000 : 0000 0000 1111 0000 = 2222222211110000
|
|
0x88884444u,// 11 1000 1000 1000 1000 : 0100 0100 0100 0100 = 2100210021002100
|
|
0x88886666u,// 12 1000 1000 1000 1000 : 0110 0110 0110 0110 = 2110211021102110
|
|
0xCCCC2222u,// 13 1100 1100 1100 1100 : 0010 0010 0010 0010 = 2210221022102210
|
|
0xEC80136Cu,// 14 1110 1100 1000 0000 : 0001 0011 0110 1100 = 2221221121101100
|
|
0x7310008Cu,// 15 0111 0011 0001 0000 : 0000 0000 1000 1100 = 0222002210021100
|
|
0xC80036C8u,// 16 1100 1000 0000 0000 : 0011 0110 1100 1000 = 2211211011001000
|
|
0x310008CEu,// 17 0011 0001 0000 0000 : 0000 1000 1100 1110 = 0022100211001110
|
|
0xCCC03330u,// 18 1100 1100 1100 0000 : 0011 0011 0011 0000 = 2211221122110000
|
|
0x0CCCF000u,// 19 0000 1100 1100 1100 : 1111 0000 0000 0000 = 1111220022002200
|
|
0xEE0000EEu,// 20 1110 1110 0000 0000 : 0000 0000 1110 1110 = 2220222011101110
|
|
0x77008888u,// 21 0111 0111 0000 0000 : 1000 1000 1000 1000 = 1222122210001000
|
|
0xCC0022C0u,// 22 1100 1100 0000 0000 : 0010 0010 1100 0000 = 2210221011000000
|
|
0x33004430u,// 23 0011 0011 0000 0000 : 0100 0100 0011 0000 = 0122012200110000
|
|
0x00CC0C22u,// 24 0000 0000 1100 1100 : 0000 1100 0010 0010 = 0000110022102210
|
|
0xFC880344u,// 25 1111 1100 1000 1000 : 0000 0011 0100 0100 = 2222221121002100
|
|
0x06606996u,// 26 0000 0110 0110 0000 : 0110 1001 1001 0110 = 0110122112210110
|
|
0x66009960u,// 27 0110 0110 0000 0000 : 1001 1001 0110 0000 = 1221122101100000
|
|
0xC88C0330u,// 28 1100 1000 1000 1100 : 0000 0011 0011 0000 = 2200201120112200
|
|
0xF9000066u,// 29 1111 1001 0000 0000 : 0000 0000 0110 0110 = 2222200201100110
|
|
0x0CC0C22Cu,// 30 0000 1100 1100 0000 : 1100 0010 0010 1100 = 1100221022101100
|
|
0x73108C00u,// 31 0111 0011 0001 0000 : 1000 1100 0000 0000 = 1222112200020000
|
|
0xEC801300u,// 32 1110 1100 1000 0000 : 0001 0011 0000 0000 = 2221221120000000
|
|
0x08CEC400u,// 33 0000 1000 1100 1110 : 1100 0100 0000 0000 = 1100210022002220
|
|
0xEC80004Cu,// 34 1110 1100 1000 0000 : 0000 0000 0100 1100 = 2220220021001100
|
|
0x44442222u,// 35 0100 0100 0100 0100 : 0010 0010 0010 0010 = 0210021002100210
|
|
0x0F0000F0u,// 36 0000 1111 0000 0000 : 0000 0000 1111 0000 = 0000222211110000
|
|
0x49242492u,// 37 0100 1001 0010 0100 : 0010 0100 1001 0010 = 0210210210210210
|
|
0x42942942u,// 38 0100 0010 1001 0100 : 0010 1001 0100 0010 = 0210102121020210
|
|
0x0C30C30Cu,// 39 0000 1100 0011 0000 : 1100 0011 0000 1100 = 1100221100221100
|
|
0x03C0C03Cu,// 40 0000 0011 1100 0000 : 1100 0000 0011 1100 = 1100002222111100
|
|
0xFF0000AAu,// 41 1111 1111 0000 0000 : 0000 0000 1010 1010 = 2222222210101010
|
|
0x5500AA00u,// 42 0101 0101 0000 0000 : 1010 1010 0000 0000 = 1212121200000000
|
|
0xCCCC3030u,// 43 1100 1100 1100 1100 : 0011 0000 0011 0000 = 2211220022112200
|
|
0x0C0CC0C0u,// 44 0000 1100 0000 1100 : 1100 0000 1100 0000 = 1100220011002200
|
|
0x66669090u,// 45 0110 0110 0110 0110 : 1001 0000 1001 0000 = 1221022012210220
|
|
0x0FF0A00Au,// 46 0000 1111 1111 0000 : 1010 0000 0000 1010 = 1010222222221010
|
|
0x5550AAA0u,// 47 0101 0101 0101 0000 : 1010 1010 1010 0000 = 1212121212120000
|
|
0xF0000AAAu,// 48 1111 0000 0000 0000 : 0000 1010 1010 1010 = 2222101010101010
|
|
0x0E0EE0E0u,// 49 0000 1110 0000 1110 : 1110 0000 1110 0000 = 1110222011102220
|
|
0x88887070u,// 50 1000 1000 1000 1000 : 0111 0000 0111 0000 = 2111200021112000
|
|
0x99906660u,// 51 1001 1001 1001 0000 : 0110 0110 0110 0000 = 2112211221120000
|
|
0xE00E0EE0u,// 52 1110 0000 0000 1110 : 0000 1110 1110 0000 = 2220111011102220
|
|
0x88880770u,// 53 1000 1000 1000 1000 : 0000 0111 0111 0000 = 2000211121112000
|
|
0xF0000666u,// 54 1111 0000 0000 0000 : 0000 0110 0110 0110 = 2222011001100110
|
|
0x99006600u,// 55 1001 1001 0000 0000 : 0110 0110 0000 0000 = 2112211200000000
|
|
0xFF000066u,// 56 1111 1111 0000 0000 : 0000 0000 0110 0110 = 2222222201100110
|
|
0xC00C0CC0u,// 57 1100 0000 0000 1100 : 0000 1100 1100 0000 = 2200110011002200
|
|
0xCCCC0330u,// 58 1100 1100 1100 1100 : 0000 0011 0011 0000 = 2200221122112200
|
|
0x90006000u,// 59 1001 0000 0000 0000 : 0110 0000 0000 0000 = 2112000000000000
|
|
0x08088080u,// 60 0000 1000 0000 1000 : 1000 0000 1000 0000 = 1000200010002000
|
|
0xEEEE1010u,// 61 1110 1110 1110 1110 : 0001 0000 0001 0000 = 2221222022212220
|
|
0xFFF0000Au,// 62 1111 1111 1111 0000 : 0000 0000 0000 1010 = 2222222222221010
|
|
0x731008CEu,// 63 0111 0011 0001 0000 : 0000 1000 1100 1110 = 0222102211021110
|
|
};
|
|
|
|
CMP_CONSTANT CGV_EPOCODE rampI[5*SOURCE_BLOCK_SIZE] = {
|
|
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0 bit index
|
|
0 ,64,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 1 bit index
|
|
0 ,21,43,64,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2 bit index
|
|
0 ,9 ,18,27,37,46,55,64,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3 bit index
|
|
0 ,4 ,9 ,13,17,21,26,30,34,38,43,47,51,55,60,64 // 4 bit index
|
|
};
|
|
|
|
// same as CMP SDK v3.1 BC7_FIXUPINDEX1 & BC7_FIXUPINDEX2 for each partition range 0..63
|
|
// The data is saved as a packed INT = (BC7_FIXUPINDEX1 << 4 + BC7_FIXUPINDEX2)
|
|
CMP_CONSTANT CGV_FIXUPINDEX FIXUPINDEX[] = {
|
|
// 2 subset partitions 0..63
|
|
0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u,
|
|
0xf0u, 0x20u, 0x80u, 0x20u, 0x20u, 0x80u, 0x80u, 0xf0u, 0x20u, 0x80u, 0x20u, 0x20u, 0x80u, 0x80u, 0x20u, 0x20u,
|
|
0xf0u, 0xf0u, 0x60u, 0x80u, 0x20u, 0x80u, 0xf0u, 0xf0u, 0x20u, 0x80u, 0x20u, 0x20u, 0x20u, 0xf0u, 0xf0u, 0x60u,
|
|
0x60u, 0x20u, 0x60u, 0x80u, 0xf0u, 0xf0u, 0x20u, 0x20u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0xf0u, 0x20u, 0x20u, 0xf0u,
|
|
// 3 subset partitions 64..128
|
|
0x3fu, 0x38u, 0xf8u, 0xf3u, 0x8fu, 0x3fu, 0xf3u, 0xf8u, 0x8fu, 0x8fu, 0x6fu, 0x6fu, 0x6fu, 0x5fu, 0x3fu, 0x38u,
|
|
0x3fu, 0x38u, 0x8fu, 0xf3u, 0x3fu, 0x38u, 0x6fu, 0xa8u, 0x53u, 0x8fu, 0x86u, 0x6au, 0x8fu, 0x5fu, 0xfau, 0xf8u,
|
|
0x8fu, 0xf3u, 0x3fu, 0x5au, 0x6au, 0xa8u, 0x89u, 0xfau, 0xf6u, 0x3fu, 0xf8u, 0x5fu, 0xf3u, 0xf6u, 0xf6u, 0xf8u,
|
|
0x3fu, 0xf3u, 0x5fu, 0x5fu, 0x5fu, 0x8fu, 0x5fu, 0xafu, 0x5fu, 0xafu, 0x8fu, 0xdfu, 0xf3u, 0xcfu, 0x3fu, 0x38u
|
|
};
|
|
|
|
|
|
#ifndef ASPM_GPU
|
|
// =============================== USED BY DECODER THIS CODE NEEDS TO BE UPDATED =========================================
|
|
CMP_CONSTANT CGU_UINT32 BC7_FIXUPINDICES_LOCAL[MAX_SUBSETS][MAX_PARTITIONS][3] =
|
|
{
|
|
// One subset
|
|
{
|
|
{0, 0, 0},
|
|
},
|
|
|
|
{
|
|
{0, 15},{0, 15},{0, 15},{0, 15},
|
|
{0, 15},{0, 15},{0, 15},{0, 15},
|
|
{0, 15},{0, 15},{0, 15},{0, 15},
|
|
{0, 15},{0, 15},{0, 15},{0, 15},
|
|
{0, 15},{0, 2},{0, 8},{0, 2},
|
|
{0, 2},{0, 8},{0, 8},{0, 15},
|
|
{0, 2},{0, 8},{0, 2},{0, 2},
|
|
{0, 8},{0, 8},{0, 2},{0, 2},
|
|
{0, 15},{0, 15},{0, 6},{0, 8},
|
|
{0, 2},{0, 8},{0, 15},{0, 15},
|
|
{0, 2},{0, 8},{0, 2},{0, 2},
|
|
{0, 2},{0, 15},{0, 15},{0, 6},
|
|
{0, 6},{0, 2},{0, 6},{0, 8},
|
|
{0, 15},{0, 15},{0, 2},{0, 2},
|
|
{0, 15},{0, 15},{0, 15},{0, 15},
|
|
{0, 15},{0, 2},{0, 2},{0, 15},
|
|
},
|
|
|
|
// Three subsets
|
|
{
|
|
{0, 3,15}, {0, 3, 8}, {0,15, 8}, {0,15, 3},
|
|
{0, 8,15}, {0, 3,15}, {0,15, 3}, {0,15, 8},
|
|
{0, 8,15}, {0, 8,15}, {0, 6,15}, {0, 6,15},
|
|
{0, 6,15}, {0, 5,15}, {0, 3,15}, {0, 3, 8},
|
|
{0, 3,15}, {0, 3, 8}, {0, 8,15}, {0,15, 3},
|
|
{0, 3,15}, {0, 3, 8}, {0, 6,15}, {0,10, 8},
|
|
{0, 5, 3}, {0, 8,15}, {0, 8, 6}, {0, 6,10},
|
|
{0, 8,15}, {0, 5,15}, {0,15,10}, {0,15, 8},
|
|
{0, 8,15}, {0,15, 3}, {0, 3,15}, {0, 5,10},
|
|
{0, 6,10}, {0,10, 8}, {0, 8, 9}, {0,15,10},
|
|
{0,15, 6}, {0, 3,15}, {0,15, 8}, {0, 5,15},
|
|
{0,15, 3}, {0,15, 6}, {0,15, 6}, {0,15, 8},
|
|
{0, 3,15}, {0,15, 3}, {0, 5,15}, {0, 5,15},
|
|
{0, 5,15}, {0, 8,15}, {0, 5,15}, {0,10,15},
|
|
{0, 5,15}, {0,10,15}, {0, 8,15}, {0,13,15},
|
|
{0,15, 3}, {0,12,15}, {0, 3,15}, {0, 3, 8}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
CMP_STATIC void SetDefaultBC7Options(BC7_Encode *BC7Encode)
|
|
{
|
|
if (BC7Encode)
|
|
{
|
|
// Set for max quality
|
|
BC7Encode->quality = 1.0f;
|
|
BC7Encode->minThreshold = 5.0f;
|
|
BC7Encode->maxThreshold = 80.0f;
|
|
BC7Encode->errorThreshold = 5.0f;
|
|
BC7Encode->validModeMask = 0xFF;
|
|
|
|
BC7Encode->imageNeedsAlpha = FALSE;
|
|
BC7Encode->colourRestrict = FALSE;
|
|
BC7Encode->alphaRestrict = FALSE;
|
|
|
|
BC7Encode->channels = 4;
|
|
BC7Encode->part_count = 128;
|
|
}
|
|
}
|
|
|
|
#ifndef ASPM
|
|
//=====================
|
|
// Used by Decoder
|
|
//=====================
|
|
__constant CGU_FLOAT rampLerpWeightsBC7[5][16] =
|
|
{
|
|
{ 0.0 }, // 0 bit index
|
|
{ 0.0, 1.0 }, // 1 bit index
|
|
{ 0.0, 21.0 / 64.0, 43.0 / 64.0, 1.0 }, // 2 bit index
|
|
{ 0.0, 9.0 / 64.0, 18.0 / 64.0, 27.0 / 64.0, 37.0 / 64.0, 46.0 / 64.0, 55.0 / 64.0, 1.0 }, // 3 bit index
|
|
{ 0.0, 4.0 / 64.0, 9.0 / 64.0, 13.0 / 64.0, 17.0 / 64.0, 21.0 / 64.0, 26.0 / 64.0, 30.0 / 64.0,
|
|
34.0 / 64.0, 38.0 / 64.0, 43.0 / 64.0, 47.0 / 64.0, 51.0 / 64.0, 55.0 / 64.0, 60.0 / 64.0, 1.0 } // 4 bit index
|
|
};
|
|
|
|
|
|
__constant CGU_UINT8 BC7_PARTITIONS[MAX_SUBSETS][MAX_PARTITIONS][MAX_SUBSET_SIZE] =
|
|
{
|
|
// Single subset partitions for both BC6H abd BC7
|
|
{
|
|
{
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
},
|
|
},
|
|
|
|
{
|
|
{ // 0
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 1
|
|
0,0,0,1,
|
|
0,0,0,1,
|
|
0,0,0,1,
|
|
0,0,0,1
|
|
},
|
|
|
|
{ // 2
|
|
0,1,1,1,
|
|
0,1,1,1,
|
|
0,1,1,1,
|
|
0,1,1,1
|
|
},
|
|
|
|
{ // 3
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,1,1,1
|
|
},
|
|
|
|
{ // 4
|
|
0,0,0,0,
|
|
0,0,0,1,
|
|
0,0,0,1,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 5
|
|
0,0,1,1,
|
|
0,1,1,1,
|
|
0,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 6
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
0,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 7
|
|
0,0,0,0,
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
0,1,1,1
|
|
},
|
|
|
|
{ // 8
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
0,0,0,1,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 9
|
|
0,0,1,1,
|
|
0,1,1,1,
|
|
1,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 10
|
|
0,0,0,0,
|
|
0,0,0,1,
|
|
0,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 11
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
0,0,0,1,
|
|
0,1,1,1
|
|
},
|
|
|
|
{ // 12
|
|
0,0,0,1,
|
|
0,1,1,1,
|
|
1,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 13
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 14
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
1,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 15
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 16
|
|
0,0,0,0,
|
|
1,0,0,0,
|
|
1,1,1,0,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 17
|
|
0,1,1,1,
|
|
0,0,0,1,
|
|
0,0,0,0,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 18
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,0,0,0,
|
|
1,1,1,0
|
|
},
|
|
|
|
{ // 19
|
|
0,1,1,1,
|
|
0,0,1,1,
|
|
0,0,0,1,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 20
|
|
0,0,1,1,
|
|
0,0,0,1,
|
|
0,0,0,0,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 21
|
|
0,0,0,0,
|
|
1,0,0,0,
|
|
1,1,0,0,
|
|
1,1,1,0
|
|
},
|
|
|
|
{ // 22
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,0,0,0,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 23
|
|
0,1,1,1,
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,0,0,1
|
|
},
|
|
|
|
{ // 24
|
|
0,0,1,1,
|
|
0,0,0,1,
|
|
0,0,0,1,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 25
|
|
0,0,0,0,
|
|
1,0,0,0,
|
|
1,0,0,0,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 26
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
0,1,1,0
|
|
},
|
|
|
|
{ // 27
|
|
0,0,1,1,
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 28
|
|
0,0,0,1,
|
|
0,1,1,1,
|
|
1,1,1,0,
|
|
1,0,0,0
|
|
},
|
|
|
|
{ // 29
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
1,1,1,1,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 30
|
|
0,1,1,1,
|
|
0,0,0,1,
|
|
1,0,0,0,
|
|
1,1,1,0
|
|
},
|
|
|
|
{ // 31
|
|
0,0,1,1,
|
|
1,0,0,1,
|
|
1,0,0,1,
|
|
1,1,0,0
|
|
},
|
|
// ----------- BC7 only shapes from here on -------------
|
|
{ // 32
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
0,1,0,1
|
|
},
|
|
|
|
{ // 33
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
0,0,0,0,
|
|
1,1,1,1
|
|
},
|
|
|
|
{ // 34
|
|
0,1,0,1,
|
|
1,0,1,0,
|
|
0,1,0,1,
|
|
1,0,1,0
|
|
},
|
|
|
|
{ // 35
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
1,1,0,0,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 36
|
|
0,0,1,1,
|
|
1,1,0,0,
|
|
0,0,1,1,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 37
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
1,0,1,0,
|
|
1,0,1,0
|
|
},
|
|
|
|
{ // 38
|
|
0,1,1,0,
|
|
1,0,0,1,
|
|
0,1,1,0,
|
|
1,0,0,1
|
|
},
|
|
|
|
{ // 39
|
|
0,1,0,1,
|
|
1,0,1,0,
|
|
1,0,1,0,
|
|
0,1,0,1
|
|
},
|
|
|
|
{ // 40
|
|
0,1,1,1,
|
|
0,0,1,1,
|
|
1,1,0,0,
|
|
1,1,1,0
|
|
},
|
|
|
|
{ // 41
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
1,1,0,0,
|
|
1,0,0,0
|
|
},
|
|
|
|
{ // 42
|
|
0,0,1,1,
|
|
0,0,1,0,
|
|
0,1,0,0,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 43
|
|
0,0,1,1,
|
|
1,0,1,1,
|
|
1,1,0,1,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 44
|
|
0,1,1,0,
|
|
1,0,0,1,
|
|
1,0,0,1,
|
|
0,1,1,0
|
|
},
|
|
|
|
{ // 45
|
|
0,0,1,1,
|
|
1,1,0,0,
|
|
1,1,0,0,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 46
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
1,0,0,1,
|
|
1,0,0,1
|
|
},
|
|
|
|
{ // 47
|
|
0,0,0,0,
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 48
|
|
0,1,0,0,
|
|
1,1,1,0,
|
|
0,1,0,0,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 49
|
|
0,0,1,0,
|
|
0,1,1,1,
|
|
0,0,1,0,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 50
|
|
0,0,0,0,
|
|
0,0,1,0,
|
|
0,1,1,1,
|
|
0,0,1,0
|
|
},
|
|
|
|
{ // 51
|
|
0,0,0,0,
|
|
0,1,0,0,
|
|
1,1,1,0,
|
|
0,1,0,0
|
|
},
|
|
|
|
{ // 52
|
|
0,1,1,0,
|
|
1,1,0,0,
|
|
1,0,0,1,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 53
|
|
0,0,1,1,
|
|
0,1,1,0,
|
|
1,1,0,0,
|
|
1,0,0,1
|
|
},
|
|
|
|
{ // 54
|
|
0,1,1,0,
|
|
0,0,1,1,
|
|
1,0,0,1,
|
|
1,1,0,0
|
|
},
|
|
|
|
{ // 55
|
|
0,0,1,1,
|
|
1,0,0,1,
|
|
1,1,0,0,
|
|
0,1,1,0
|
|
},
|
|
|
|
{ // 56
|
|
0,1,1,0,
|
|
1,1,0,0,
|
|
1,1,0,0,
|
|
1,0,0,1
|
|
},
|
|
|
|
{ // 57
|
|
0,1,1,0,
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
1,0,0,1
|
|
},
|
|
|
|
{ // 58
|
|
0,1,1,1,
|
|
1,1,1,0,
|
|
1,0,0,0,
|
|
0,0,0,1
|
|
},
|
|
|
|
{ // 59
|
|
0,0,0,1,
|
|
1,0,0,0,
|
|
1,1,1,0,
|
|
0,1,1,1
|
|
},
|
|
|
|
{ // 60
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
0,0,1,1,
|
|
0,0,1,1
|
|
},
|
|
|
|
{ // 61
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
1,1,1,1,
|
|
0,0,0,0
|
|
},
|
|
|
|
{ // 62
|
|
0,0,1,0,
|
|
0,0,1,0,
|
|
1,1,1,0,
|
|
1,1,1,0
|
|
},
|
|
|
|
{ // 63
|
|
0,1,0,0,
|
|
0,1,0,0,
|
|
0,1,1,1,
|
|
0,1,1,1
|
|
},
|
|
},
|
|
|
|
|
|
// Table.P3 - only for BC7
|
|
|
|
{
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,2,2,1,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
2,2,1,1,
|
|
2,2,2,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
2,0,0,1,
|
|
2,2,1,1,
|
|
2,2,1,1
|
|
},
|
|
|
|
{
|
|
0,2,2,2,
|
|
0,0,2,2,
|
|
0,0,1,1,
|
|
0,1,1,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,1,2,2,
|
|
1,1,2,2
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,0,2,2,
|
|
0,0,2,2
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
0,0,2,2,
|
|
1,1,1,1,
|
|
1,1,1,1
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
2,2,1,1,
|
|
2,2,1,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
1,1,1,1,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
2,2,2,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,1,2,
|
|
0,0,1,2,
|
|
0,0,1,2,
|
|
0,0,1,2
|
|
},
|
|
|
|
{
|
|
0,1,1,2,
|
|
0,1,1,2,
|
|
0,1,1,2,
|
|
0,1,1,2
|
|
},
|
|
|
|
{
|
|
0,1,2,2,
|
|
0,1,2,2,
|
|
0,1,2,2,
|
|
0,1,2,2
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,1,1,2,
|
|
1,1,2,2,
|
|
1,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
2,0,0,1,
|
|
2,2,0,0,
|
|
2,2,2,0
|
|
},
|
|
|
|
{
|
|
0,0,0,1,
|
|
0,0,1,1,
|
|
0,1,1,2,
|
|
1,1,2,2
|
|
},
|
|
|
|
{
|
|
0,1,1,1,
|
|
0,0,1,1,
|
|
2,0,0,1,
|
|
2,2,0,0
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
1,1,2,2,
|
|
1,1,2,2,
|
|
1,1,2,2
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
0,0,2,2,
|
|
0,0,2,2,
|
|
1,1,1,1
|
|
},
|
|
|
|
{
|
|
0,1,1,1,
|
|
0,1,1,1,
|
|
0,2,2,2,
|
|
0,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,1,
|
|
0,0,0,1,
|
|
2,2,2,1,
|
|
2,2,2,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,1,1,
|
|
0,1,2,2,
|
|
0,1,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
1,1,0,0,
|
|
2,2,1,0,
|
|
2,2,1,0
|
|
},
|
|
|
|
{
|
|
0,1,2,2,
|
|
0,1,2,2,
|
|
0,0,1,1,
|
|
0,0,0,0
|
|
},
|
|
|
|
{
|
|
0,0,1,2,
|
|
0,0,1,2,
|
|
1,1,2,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,1,1,0,
|
|
1,2,2,1,
|
|
1,2,2,1,
|
|
0,1,1,0
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,1,1,0,
|
|
1,2,2,1,
|
|
1,2,2,1
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
1,1,0,2,
|
|
1,1,0,2,
|
|
0,0,2,2
|
|
},
|
|
|
|
{
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
2,0,0,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,1,2,2,
|
|
0,1,2,2,
|
|
0,0,1,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
2,0,0,0,
|
|
2,2,1,1,
|
|
2,2,2,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,2,
|
|
1,1,2,2,
|
|
1,2,2,2
|
|
},
|
|
|
|
{
|
|
0,2,2,2,
|
|
0,0,2,2,
|
|
0,0,1,2,
|
|
0,0,1,1
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
0,0,1,2,
|
|
0,0,2,2,
|
|
0,2,2,2
|
|
},
|
|
|
|
{
|
|
0,1,2,0,
|
|
0,1,2,0,
|
|
0,1,2,0,
|
|
0,1,2,0
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
1,1,1,1,
|
|
2,2,2,2,
|
|
0,0,0,0
|
|
},
|
|
|
|
{
|
|
0,1,2,0,
|
|
1,2,0,1,
|
|
2,0,1,2,
|
|
0,1,2,0
|
|
},
|
|
|
|
{
|
|
0,1,2,0,
|
|
2,0,1,2,
|
|
1,2,0,1,
|
|
0,1,2,0
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
2,2,0,0,
|
|
1,1,2,2,
|
|
0,0,1,1
|
|
},
|
|
|
|
{
|
|
0,0,1,1,
|
|
1,1,2,2,
|
|
2,2,0,0,
|
|
0,0,1,1
|
|
},
|
|
|
|
{
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
2,2,2,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
2,1,2,1,
|
|
2,1,2,1
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
1,1,2,2,
|
|
0,0,2,2,
|
|
1,1,2,2
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
0,0,1,1,
|
|
0,0,2,2,
|
|
0,0,1,1
|
|
},
|
|
|
|
{
|
|
0,2,2,0,
|
|
1,2,2,1,
|
|
0,2,2,0,
|
|
1,2,2,1
|
|
},
|
|
|
|
{
|
|
0,1,0,1,
|
|
2,2,2,2,
|
|
2,2,2,2,
|
|
0,1,0,1
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
2,1,2,1,
|
|
2,1,2,1,
|
|
2,1,2,1
|
|
},
|
|
|
|
{
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
0,1,0,1,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,2,2,2,
|
|
0,1,1,1,
|
|
0,2,2,2,
|
|
0,1,1,1
|
|
},
|
|
|
|
{
|
|
0,0,0,2,
|
|
1,1,1,2,
|
|
0,0,0,2,
|
|
1,1,1,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
2,1,1,2,
|
|
2,1,1,2,
|
|
2,1,1,2
|
|
},
|
|
|
|
{
|
|
0,2,2,2,
|
|
0,1,1,1,
|
|
0,1,1,1,
|
|
0,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,2,
|
|
1,1,1,2,
|
|
1,1,1,2,
|
|
0,0,0,2
|
|
},
|
|
|
|
{
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
2,1,1,2,
|
|
2,1,1,2
|
|
},
|
|
|
|
{
|
|
0,1,1,0,
|
|
0,1,1,0,
|
|
2,2,2,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
0,0,1,1,
|
|
0,0,1,1,
|
|
0,0,2,2
|
|
},
|
|
|
|
{
|
|
0,0,2,2,
|
|
1,1,2,2,
|
|
1,1,2,2,
|
|
0,0,2,2
|
|
},
|
|
|
|
{
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
0,0,0,0,
|
|
2,1,1,2
|
|
},
|
|
|
|
{
|
|
0,0,0,2,
|
|
0,0,0,1,
|
|
0,0,0,2,
|
|
0,0,0,1
|
|
},
|
|
|
|
{
|
|
0,2,2,2,
|
|
1,2,2,2,
|
|
0,2,2,2,
|
|
1,2,2,2
|
|
},
|
|
|
|
{
|
|
0,1,0,1,
|
|
2,2,2,2,
|
|
2,2,2,2,
|
|
2,2,2,2
|
|
},
|
|
|
|
{
|
|
0,1,1,1,
|
|
2,0,1,1,
|
|
2,2,0,1,
|
|
2,2,2,0
|
|
},
|
|
},
|
|
};
|
|
#endif
|
|
|
|
#endif // !ASPM_GPU
|
|
|
|
|
|
|
|
#endif
|