1760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/************************************************************************** 2760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 3760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Copyright 2009 VMware, Inc. 4760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * All Rights Reserved. 5760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 6760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * copy of this software and associated documentation files (the 8760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * "Software"), to deal in the Software without restriction, including 9760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * the following conditions: 13760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 14760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 17760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 18760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE. 21760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 22760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * The above copyright notice and this permission notice (including the 23760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 24760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * of the Software. 25760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 26760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 27760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org **************************************************************************/ 28760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 29760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** 30760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * @file 31760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * GDI software rasterizer support. 32760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 33760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * @author Jose Fonseca <jfonseca@vmware.com> 34760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 35760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 36760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 37760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <windows.h> 38760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 39760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "pipe/p_format.h" 40760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "pipe/p_context.h" 41760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_inlines.h" 42760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_format.h" 43760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_math.h" 44760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_memory.h" 45760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "state_tracker/sw_winsys.h" 46760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "gdi_sw_winsys.h" 47760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 49760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct gdi_sw_displaytarget 50760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 51760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org enum pipe_format format; 52760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned width; 53760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned height; 54760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned stride; 55760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 56760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned size; 57760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 58760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org void *data; 59760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 60760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org BITMAPINFO bmi; 61760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org}; 62760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 64760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** Cast wrapper */ 65760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE struct gdi_sw_displaytarget * 66760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget( struct sw_displaytarget *buf ) 67760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 68760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return (struct gdi_sw_displaytarget *)buf; 69760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 70760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 71760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 72760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic boolean 73760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_is_displaytarget_format_supported( struct sw_winsys *ws, 74760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned tex_usage, 75760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org enum pipe_format format ) 76760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 77760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org switch(format) { 78760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org case PIPE_FORMAT_B8G8R8X8_UNORM: 79760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org case PIPE_FORMAT_B8G8R8A8_UNORM: 80760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return TRUE; 81760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 82760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org /* TODO: Support other formats possible with BMPs, as described in 83760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * http://msdn.microsoft.com/en-us/library/dd183376(VS.85).aspx */ 84760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 85760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org default: 86760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return FALSE; 87760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org } 88760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 89760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 90760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 91760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void * 92760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_map(struct sw_winsys *ws, 93760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt, 94760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned flags ) 95760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 96760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct gdi_sw_displaytarget *gdt = gdi_sw_displaytarget(dt); 97760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 98760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return gdt->data; 99760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 100760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 101760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 102760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void 103760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_unmap(struct sw_winsys *ws, 104760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt ) 105760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 106760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 107760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 108760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 109760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 110760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void 111760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_destroy(struct sw_winsys *winsys, 112760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt) 113760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 114760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct gdi_sw_displaytarget *gdt = gdi_sw_displaytarget(dt); 115760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 116760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org align_free(gdt->data); 117760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org FREE(gdt); 118760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 119760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 120760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 121760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic struct sw_displaytarget * 122760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_create(struct sw_winsys *winsys, 123760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned tex_usage, 124760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org enum pipe_format format, 125760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned width, unsigned height, 126760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned alignment, 127760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned *stride) 128760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 129760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct gdi_sw_displaytarget *gdt; 130760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned cpp; 131760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned bpp; 132760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 133760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt = CALLOC_STRUCT(gdi_sw_displaytarget); 134760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if(!gdt) 135760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org goto no_gdt; 136760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 137760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->format = format; 138760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->width = width; 139760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->height = height; 140760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 141760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org bpp = util_format_get_blocksizebits(format); 142760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org cpp = util_format_get_blocksize(format); 143760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 144760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->stride = align(width * cpp, alignment); 145760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->size = gdt->stride * height; 146760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 147760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->data = align_malloc(gdt->size, alignment); 148760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if(!gdt->data) 149760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org goto no_data; 150760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 151760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 152760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biWidth = gdt->stride / cpp; 153760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biHeight= -(long)height; 154760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biPlanes = 1; 155760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biBitCount = bpp; 156760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biCompression = BI_RGB; 157760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biSizeImage = 0; 158760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biXPelsPerMeter = 0; 159760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biYPelsPerMeter = 0; 160760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biClrUsed = 0; 161760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->bmi.bmiHeader.biClrImportant = 0; 162760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 163760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org *stride = gdt->stride; 164760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return (struct sw_displaytarget *)gdt; 165760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 166760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgno_data: 167760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org FREE(gdt); 168760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgno_gdt: 169760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return NULL; 170760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 171760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 172760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 173760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic struct sw_displaytarget * 174760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_from_handle(struct sw_winsys *winsys, 175760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct pipe_resource *templet, 176760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct winsys_handle *whandle, 177760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned *stride) 178760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 179760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org assert(0); 180760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return NULL; 181760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 182760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 183760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 184760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic boolean 185760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_get_handle(struct sw_winsys *winsys, 186760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt, 187760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct winsys_handle *whandle) 188760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 189760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org assert(0); 190760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return FALSE; 191760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 192760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 193760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 194760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgvoid 195760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_display( struct sw_winsys *winsys, 196760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt, 197760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org HDC hDC ) 198760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 199760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct gdi_sw_displaytarget *gdt = gdi_sw_displaytarget(dt); 200760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 201760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org StretchDIBits(hDC, 202760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 0, 0, gdt->width, gdt->height, 203760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 0, 0, gdt->width, gdt->height, 204760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdt->data, &gdt->bmi, 0, SRCCOPY); 205760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 206760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 207760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void 208760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_displaytarget_display(struct sw_winsys *winsys, 209760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct sw_displaytarget *dt, 210760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org void *context_private) 211760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 212760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org /* nasty: 213760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 214760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org HDC hDC = (HDC)context_private; 215760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 216760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org gdi_sw_display(winsys, dt, hDC); 217760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 218760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 219760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 220760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void 221760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_sw_destroy(struct sw_winsys *winsys) 222760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 223760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org FREE(winsys); 224760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 225760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 226760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct sw_winsys * 227760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orggdi_create_sw_winsys(void) 228760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 229760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org static struct sw_winsys *winsys; 230760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 231760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys = CALLOC_STRUCT(sw_winsys); 232760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if(!winsys) 233760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return NULL; 234760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 235760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->destroy = gdi_sw_destroy; 236760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->is_displaytarget_format_supported = gdi_sw_is_displaytarget_format_supported; 237760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_create = gdi_sw_displaytarget_create; 238760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_from_handle = gdi_sw_displaytarget_from_handle; 239760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_get_handle = gdi_sw_displaytarget_get_handle; 240760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_map = gdi_sw_displaytarget_map; 241760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_unmap = gdi_sw_displaytarget_unmap; 242760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_display = gdi_sw_displaytarget_display; 243760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org winsys->displaytarget_destroy = gdi_sw_displaytarget_destroy; 244760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 245760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return winsys; 246760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 247760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 248