13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 29760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#ifndef U_RECT_H 30760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define U_RECT_H 31760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 32760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "pipe/p_compiler.h" 33760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 34760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct u_rect { 35760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org int x0, x1; 36760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org int y0, y1; 37760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org}; 38760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 39760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/* Do two rectangles intersect? 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 41760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE boolean 42760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgu_rect_test_intersection(const struct u_rect *a, 43760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct u_rect *b) 44760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 45760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return (!(a->x1 < b->x0 || 46760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org b->x1 < a->x0 || 47760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org a->y1 < b->y0 || 48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org b->y1 < a->y0)); 49760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 51760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/* Find the intersection of two rectangles known to intersect. 52760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 53760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 54760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgu_rect_find_intersection(const struct u_rect *a, 55760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct u_rect *b) 56760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 57760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org /* Caller should verify intersection exists before calling. 58760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 59760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (b->x0 < a->x0) b->x0 = a->x0; 60760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (b->x1 > a->x1) b->x1 = a->x1; 61760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (b->y0 < a->y0) b->y0 = a->y0; 62760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (b->y1 > a->y1) b->y1 = a->y1; 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 66760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 67760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgu_rect_possible_intersection(const struct u_rect *a, 68760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct u_rect *b) 69760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 70760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (u_rect_test_intersection(a,b)) { 71760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org u_rect_find_intersection(a,b); 72760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org } 73760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org else { 74760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org b->x0 = b->x1 = b->y0 = b->y1 = 0; 75760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org } 76760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "pipe/p_format.h" 79760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_pack_color.h" 80760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 83760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/********************************************************************** 84760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Pipe copy/fill rect helpers. 85760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 86760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 87760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/* These really should move to a different file: 88760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 89760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "pipe/p_format.h" 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern void 92760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgutil_copy_rect(ubyte * dst, enum pipe_format format, 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned dst_stride, unsigned dst_x, unsigned dst_y, 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned width, unsigned height, const ubyte * src, 95760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org int src_stride, unsigned src_x, unsigned src_y); 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern void 98760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgutil_fill_rect(ubyte * dst, enum pipe_format format, 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned dst_stride, unsigned dst_x, unsigned dst_y, 100760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned width, unsigned height, union util_color *uc); 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* U_RECT_H */ 104