1fda9279dSmrg/* 2fda9279dSmrg * Copyright 1999 Mark Vojkovich 3fda9279dSmrg * 4fda9279dSmrg * Permission is hereby granted, free of charge, to any person obtaining a 5fda9279dSmrg * copy of this software and associated documentation files (the "Software"), 6fda9279dSmrg * to deal in the Software without restriction, including without limitation 7fda9279dSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8fda9279dSmrg * and/or sell copies of the Software, and to permit persons to whom the 9fda9279dSmrg * Software is furnished to do so, subject to the following conditions: 10fda9279dSmrg * 11fda9279dSmrg * The above copyright notice and this permission notice shall be included in 12fda9279dSmrg * all copies or substantial portions of the Software. 13fda9279dSmrg * 14fda9279dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15fda9279dSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16fda9279dSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17fda9279dSmrg * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18fda9279dSmrg * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19fda9279dSmrg * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20fda9279dSmrg * SOFTWARE. 21fda9279dSmrg */ 22fda9279dSmrg 23fda9279dSmrg#include "nv_include.h" 24fda9279dSmrg#include "nv_type.h" 25fda9279dSmrg#include "shadowfb.h" 26fda9279dSmrg#include "servermd.h" 27fda9279dSmrg 28fda9279dSmrg#define MIN(a, b) (((a) < (b)) ? (a) : (b)) 29fda9279dSmrg#define MAX(a, b) (((a) > (b)) ? (a) : (b)) 30fda9279dSmrg 31fda9279dSmrgvoid 32fda9279dSmrgNVRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) 33fda9279dSmrg{ 34fda9279dSmrg NVPtr pNv = NVPTR(pScrn); 35fda9279dSmrg int x1, y1, x2, y2, width, height, cpp, FBPitch; 36fda9279dSmrg unsigned char *src, *dst; 37fda9279dSmrg 38fda9279dSmrg cpp = pScrn->bitsPerPixel >> 3; 39fda9279dSmrg FBPitch = pScrn->displayWidth * cpp; 40fda9279dSmrg 41fda9279dSmrg nouveau_bo_map(pNv->scanout, NOUVEAU_BO_WR, pNv->client); 42fda9279dSmrg while(num--) { 43fda9279dSmrg x1 = MAX(pbox->x1, 0); 44fda9279dSmrg y1 = MAX(pbox->y1, 0); 45fda9279dSmrg x2 = MIN(pbox->x2, pScrn->virtualX); 46fda9279dSmrg y2 = MIN(pbox->y2, pScrn->virtualY); 47fda9279dSmrg width = (x2 - x1) * cpp; 48fda9279dSmrg height = y2 - y1; 49fda9279dSmrg 50fda9279dSmrg if (width > 0 && height > 0) { 51fda9279dSmrg src = pNv->ShadowPtr + (y1 * pNv->ShadowPitch) + (x1 * cpp); 52fda9279dSmrg dst = pNv->scanout->map + (y1 * FBPitch) + (x1 * cpp); 53fda9279dSmrg 54fda9279dSmrg while(height--) { 55fda9279dSmrg memcpy(dst, src, width); 56fda9279dSmrg dst += FBPitch; 57fda9279dSmrg src += pNv->ShadowPitch; 58fda9279dSmrg } 59fda9279dSmrg } 60fda9279dSmrg 61fda9279dSmrg pbox++; 62fda9279dSmrg } 63fda9279dSmrg} 64