Path: blob/21.2-virgl/src/panfrost/bifrost/bi_test_pack.c
4564 views
/*1* Copyright (C) 2020 Collabora, Ltd.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,19* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE20* SOFTWARE.21*/2223#include "compiler.h"2425#ifdef NDEBUG2627int28bi_test_packing_formats(void)29{30/* stub */31return 0;32}3334#else3536static void37bi_test_pack_format_1(void)38{39/* Test case from the blob */40struct bi_packed_tuple tuples[] = {41{ 0x2380cb1c02200000, 0x10e0 },42};4344uint64_t header = 0x021000011800;4546struct util_dynarray result;47util_dynarray_init(&result, NULL);4849bi_pack_format(&result, 1, tuples, 1, header, 0, 0, true);50uint64_t *result_u64 = (uint64_t *) result.data;5152assert(result.size == 16);53assert(result_u64[0] == 0x80cb1c022000004a);54assert(result_u64[1] == 0x10800008c000e023);55}5657static void58bi_test_pack_format_2(void)59{60struct bi_packed_tuple tuples[] = {61{ 0x9380cb6044000044, 0xf65 },62{ 0xaf8721a05c000081, 0x1831 },63};6465struct util_dynarray result;66util_dynarray_init(&result, NULL);6768bi_pack_format(&result, 0, tuples, 2, 0x52800011800, 0, 0, false);69bi_pack_format(&result, 2, tuples, 2, 0x52800011800, 0, 0, false);70uint64_t *result_u64 = (uint64_t *) result.data;7172assert(result.size == 32);73assert(result_u64[0] == 0x80cb604400004429);74assert(result_u64[1] == 0x29400008c0076593);75assert(result_u64[2] == 0x8721a05c00008103);76assert(result_u64[3] == 0x60000000000031af);77}7879static void80bi_test_pack_format_3(void)81{82struct bi_packed_tuple tuples[] = {83{ 0x93805b8040000000, 0xf65 },84{ 0x93886db05c000000, 0xf65 },85{ 0xb380cb180c000080, 0x18b1 },86};8788struct util_dynarray result;89util_dynarray_init(&result, NULL);9091bi_pack_format(&result, 0, tuples, 3, 0x3100000000, 0, 0, true);92bi_pack_format(&result, 3, tuples, 3, 0x3100000000, 0, 0, true);93bi_pack_format(&result, 4, tuples, 3, 0x3100000000, 0, 0, true);94uint64_t *result_u64 = (uint64_t *) result.data;9596assert(result.size == 48);97assert(result_u64[0] == 0x805b804000000029);98assert(result_u64[1] == 0x188000000076593);99assert(result_u64[2] == 0x886db05c00000021);100assert(result_u64[3] == 0x58c0600004076593);101assert(result_u64[4] == 0x44);102assert(result_u64[5] == 0x60002c6ce0300000);103}104105static void106bi_test_pack_format_4(void)107{108struct bi_packed_tuple tuples[] = {109{ 0xad8c87004000005f, 0x2f18 },110{ 0xad8c87385c00004f, 0x2f18 },111{ 0xad8c87385c00006e, 0x2f18 },112{ 0xb380cb182c000080, 0x18b1 },113};114115struct util_dynarray result;116util_dynarray_init(&result, NULL);117118uint64_t EC0 = (0x10000001ff000000) >> 4;119120bi_pack_format(&result, 0, tuples, 4, 0x3100000000, EC0, 0, false);121bi_pack_format(&result, 3, tuples, 4, 0x3100000000, EC0, 0, false);122bi_pack_format(&result, 6, tuples, 4, 0x3100000000, EC0, 0, false);123uint64_t *result_u64 = (uint64_t *) result.data;124125assert(result.size == 48);126assert(result_u64[0] == 0x8c87004000005f2d);127assert(result_u64[1] == 0x1880000000718ad);128assert(result_u64[2] == 0x8c87385c00004f25);129assert(result_u64[3] == 0x39c2e000037718ad);130assert(result_u64[4] == 0x80cb182c00008005);131assert(result_u64[5] == 0xac01c62b6320b1b3);132}133134static void135bi_test_pack_format_5(void)136{137struct bi_packed_tuple tuples[] = {138{ 0x9380688040000000, 0xf65 },139{ 0xd4057300c000040, 0xf26 },140{ 0x1f80cb1858000000, 0x19ab },141{ 0x937401f85c000000, 0xf65 },142{ 0xb380cb180c000080, 0x18a1 },143};144145struct util_dynarray result;146util_dynarray_init(&result, NULL);147148uint64_t EC0 = (0x183f800000) >> 4;149150bi_pack_format(&result, 0, tuples, 5, 0x3100000000, EC0, 0, true);151bi_pack_format(&result, 3, tuples, 5, 0x3100000000, EC0, 0, true);152bi_pack_format(&result, 7, tuples, 5, 0x3100000000, EC0, 0, true);153bi_pack_format(&result, 8, tuples, 5, 0x3100000000, EC0, 0, true);154uint64_t *result_u64 = (uint64_t *) result.data;155156assert(result.size == 64);157assert(result_u64[0] == 0x8068804000000029);158assert(result_u64[1] == 0x188000000076593);159assert(result_u64[2] == 0x4057300c00004021);160assert(result_u64[3] == 0x58c2c0000007260d);161assert(result_u64[4] == 0x7401f85c0000008b);162assert(result_u64[5] == 0x6ac7e0376593);163assert(result_u64[6] == 0x80cb180c00008053);164assert(result_u64[7] == 0x183f80a1b3);165}166167static void168bi_test_pack_format_6(void)169{170struct bi_packed_tuple tuples[] = {171{ 0xad8c870068000048, 0x2f18 },172{ 0xad8c87385c000050, 0x2f18 },173{ 0xad8c87385c00006a, 0x2f18 },174{ 0xad8c87385c000074, 0x2f18 },175{ 0xad8c87385c000020, 0x2f18 },176{ 0xad8c87385c000030, 0x2f18 },177};178179struct util_dynarray result;180util_dynarray_init(&result, NULL);181182uint64_t EC0 = (0x345678912345670) >> 4;183184bi_pack_format(&result, 0, tuples, 6, 0x60000011800, EC0, 0, false);185bi_pack_format(&result, 3, tuples, 6, 0x60000011800, EC0, 0, false);186bi_pack_format(&result, 5, tuples, 6, 0x60000011800, EC0, 0, false);187bi_pack_format(&result, 9, tuples, 6, 0x60000011800, EC0, 0, false);188bi_pack_format(&result, 10, tuples, 6, 0x60000011800, EC0, 0, false);189uint64_t *result_u64 = (uint64_t *) result.data;190191assert(result.size == 80);192assert(result_u64[0] == 0x8c8700680000482d);193assert(result_u64[1] == 0x30000008c00718ad);194assert(result_u64[2] == 0x8c87385c00005025);195assert(result_u64[3] == 0x39c2e000035718ad);196assert(result_u64[4] == 0x8c87385c00007401);197assert(result_u64[5] == 0xb401c62b632718ad);198assert(result_u64[6] == 0x8c87385c00002065);199assert(result_u64[7] == 0x39c2e000018718ad);200assert(result_u64[8] == 0x3456789123456706);201assert(result_u64[9] == 0xa001c62b63200000);202}203204static void205bi_test_pack_format_7(void)206{207struct bi_packed_tuple tuples[] = {208{ 0x9020074040000083, 0xf65 },209{ 0x90000d4058100080, 0xf65 },210{ 0x90000a3058700082, 0xf65 },211{ 0x9020074008114581, 0xf65 },212{ 0x90000d0058000080, 0xf65 },213{ 0x9000083058700082, 0xf65 },214{ 0x2380cb199ac38400, 0x327a },215};216217struct util_dynarray result;218util_dynarray_init(&result, NULL);219220bi_pack_format(&result, 0, tuples, 7, 0x3000100000, 0, 0, true);221bi_pack_format(&result, 3, tuples, 7, 0x3000100000, 0, 0, true);222bi_pack_format(&result, 5, tuples, 7, 0x3000100000, 0, 0, true);223bi_pack_format(&result, 9, tuples, 7, 0x3000100000, 0, 0, true);224bi_pack_format(&result, 11, tuples, 7, 0x3000100000, 0, 0, true);225uint64_t *result_u64 = (uint64_t *) result.data;226227assert(result.size == 80);228assert(result_u64[0] == 0x2007404000008329);229assert(result_u64[1] == 0x180008000076590);230assert(result_u64[2] == 0xd405810008021);231assert(result_u64[3] == 0x5182c38004176590);232assert(result_u64[4] == 0x2007400811458101);233assert(result_u64[5] == 0x2401d96400076590);234assert(result_u64[6] == 0xd005800008061);235assert(result_u64[7] == 0x4182c38004176590);236assert(result_u64[8] == 0x80cb199ac3840047);237assert(result_u64[9] == 0x3801d96400027a23);238}239240static void241bi_test_pack_format_8(void)242{243struct bi_packed_tuple tuples[] = {244{ 0x442087037a2f8643, 0x3021 },245{ 0x84008d0586100043, 0x200 },246{ 0x7c008d0028014543, 0x0 },247{ 0x1c00070058200081, 0x1980 },248{ 0x1600dd878320400, 0x200 },249{ 0x49709c1b08308900, 0x200 },250{ 0x6c2007807881ca00, 0x40 },251{ 0x8d70fc0d94900083, 0x800 },252};253254struct util_dynarray result;255util_dynarray_init(&result, NULL);256257uint64_t EC0 = (0x32e635d0) >> 4;258259bi_pack_format(&result, 0, tuples, 8, 0x61001311800, EC0, 0, true);260bi_pack_format(&result, 3, tuples, 8, 0x61001311800, EC0, 0, true);261bi_pack_format(&result, 5, tuples, 8, 0x61001311800, EC0, 0, true);262bi_pack_format(&result, 9, tuples, 8, 0x61001311800, EC0, 0, true);263bi_pack_format(&result, 12, tuples, 8, 0x61001311800, EC0, 0, true);264bi_pack_format(&result, 13, tuples, 8, 0x61001311800, EC0, 0, true);265uint64_t *result_u64 = (uint64_t *) result.data;266267assert(result.size == 96);268assert(result_u64[0] == 0x2087037a2f86432e);269assert(result_u64[1] == 0x30800988c0002144);270assert(result_u64[2] == 0x8d058610004320);271assert(result_u64[3] == 0x6801400a2a1a0084);272assert(result_u64[4] == 0x7005820008101);273assert(result_u64[5] == 0xc00001f0021801c);274assert(result_u64[6] == 0x600dd87832040060);275assert(result_u64[7] == 0xe0d8418448020001);276assert(result_u64[8] == 0x2007807881ca00c0);277assert(result_u64[9] == 0xc6ba80125c20406c);278assert(result_u64[10] == 0x70fc0d9490008359);279assert(result_u64[11] == 0x32e0008d);280}281282int283bi_test_packing_formats(void)284{285bi_test_pack_format_1();286bi_test_pack_format_2();287bi_test_pack_format_3();288bi_test_pack_format_4();289bi_test_pack_format_5();290bi_test_pack_format_6();291bi_test_pack_format_7();292bi_test_pack_format_8();293294return 0;295}296297#endif298299300