From 5ddf7ad9d2098d21e1346b8ceb2756901ae1b0c1 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 18 Feb 2020 12:07:47 -0500 Subject: panfrost: Move checksum routines to root panfrost These are Gallium-independent and clean code; as is tradition, let's hoist them up out of the Gallium driver as a bit of yak shaving as we prepare to untangle the monster that is pan_resource.c Signed-off-by: Alyssa Rosenzweig Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/encoder/pan_texture.c | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/panfrost/encoder/pan_texture.c (limited to 'src/panfrost/encoder/pan_texture.c') diff --git a/src/panfrost/encoder/pan_texture.c b/src/panfrost/encoder/pan_texture.c new file mode 100644 index 00000000000..8e4b00e9055 --- /dev/null +++ b/src/panfrost/encoder/pan_texture.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008 VMware, Inc. + * Copyright (C) 2014 Broadcom + * Copyright (C) 2018-2019 Alyssa Rosenzweig + * Copyright (C) 2019-2020 Collabora, Ltd. + * + * 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 (including the next + * paragraph) 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 "util/macros.h" +#include "pan_texture.h" + +/* Computes sizes for checksumming, which is 8 bytes per 16x16 tile. + * Checksumming is believed to be a CRC variant (CRC64 based on the size?). + * This feature is also known as "transaction elimination". */ + +#define CHECKSUM_TILE_WIDTH 16 +#define CHECKSUM_TILE_HEIGHT 16 +#define CHECKSUM_BYTES_PER_TILE 8 + +unsigned +panfrost_compute_checksum_size( + struct panfrost_slice *slice, + unsigned width, + unsigned height) +{ + unsigned aligned_width = ALIGN_POT(width, CHECKSUM_TILE_WIDTH); + unsigned aligned_height = ALIGN_POT(height, CHECKSUM_TILE_HEIGHT); + + unsigned tile_count_x = aligned_width / CHECKSUM_TILE_WIDTH; + unsigned tile_count_y = aligned_height / CHECKSUM_TILE_HEIGHT; + + slice->checksum_stride = tile_count_x * CHECKSUM_BYTES_PER_TILE; + + return slice->checksum_stride * tile_count_y; +} -- cgit v1.2.3