1a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul/* 2a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * Copyright 2013 VMware, Inc. 3a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * All Rights Reserved. 4a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * 5a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 6a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * copy of this software and associated documentation files (the 7a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * "Software"), to deal in the Software without restriction, including 8a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * without limitation the rights to use, copy, modify, merge, publish, 9a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * distribute, sub license, and/or sell copies of the Software, and to 10a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * permit persons to whom the Software is furnished to do so, subject to 11a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * the following conditions: 12a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * 13a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * The above copyright notice and this permission notice (including the 14a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * next paragraph) shall be included in all copies or substantial portions 15a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * of the Software. 16a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * 17a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR 21a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul */ 25287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 26a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 27a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul#include "pipe/p_defines.h" 28a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul#include "pipe/p_state.h" 29a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul#include "util/u_format.h" 30a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul#include "util/u_math.h" 31a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul#include "util/u_resource.h" 32a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 33a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 34a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul/** 35a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul * Return the size of the resource in bytes. 36a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul */ 37a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paulunsigned 38a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paulutil_resource_size(const struct pipe_resource *res) 39a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul{ 40a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned width = res->width0; 41a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned height = res->height0; 42a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned depth = res->depth0; 43a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned size = 0; 44a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned level; 45a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 46a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul for (level = 0; level <= res->last_level; level++) { 47a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul unsigned slices; 48a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 49a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul if (res->target == PIPE_TEXTURE_CUBE) 50a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul slices = 6; 51a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul else if (res->target == PIPE_TEXTURE_3D) 52a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul slices = depth; 53a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul else 54a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul slices = res->array_size; 55a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 56a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul size += (util_format_get_nblocksy(res->format, height) * 57a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul util_format_get_stride(res->format, width) * slices); 58a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 59a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul width = u_minify(width, 1); 60a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul height = u_minify(height, 1); 61a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul depth = u_minify(depth, 1); 62a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul } 63a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul 64a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul return size; 65a69efa9482d7d4dee476a50b3788544ba9b14a50Brian Paul} 66