//=============================================================================== // Copyright (c) 2007-2016 Advanced Micro Devices, Inc. All rights reserved. // Copyright (c) 2004-2006 ATI Technologies Inc. //=============================================================================== // // 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. // #include "bc7_partitions.h" // // Verified to match the final definitions as detailedin the OpenGL BPTC spec // CMP_DWORD BC7_PARTITIONS_CPU[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 }, }, }; CMP_DWORD BC7_FIXUPINDICES[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} }, }; // // Reversible partitioning operation for BC7 // extern FILE *fp; void Partition(CMP_DWORD partition, double in[][MAX_DIMENSION_BIG], double subsets[MAX_SUBSETS][MAX_SUBSET_SIZE][MAX_DIMENSION_BIG], CMP_DWORD count[MAX_SUBSETS], CMP_DWORD blockType, int dimension) { int i,j; CMP_DWORD *table = NULL; for(i=0; i