dri_drawable.c revision ea6a52a1f8e7fd72b5506218c31e58088131f1f5
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************** 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2009, VMware, Inc. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All Rights Reserved. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copy of this software and associated documentation files (the 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "Software"), to deal in the Software without restriction, including 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * without limitation the rights to use, copy, modify, merge, publish, 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distribute, sub license, and/or sell copies of the Software, and to 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * permit persons to whom the Software is furnished to do so, subject to 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the following conditions: 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The above copyright notice and this permission notice (including the 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * next paragraph) shall be included in all copies or substantial portions 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of the Software. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) **************************************************************************/ 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Author: Keith Whitwell <keithw@vmware.com> 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Author: Jakob Bornecrantz <wallbraker@gmail.com> 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dri_screen.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dri_context.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dri_drawable.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dri_st_api.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dri1_helper.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38#include "pipe/p_screen.h" 39#include "util/u_format.h" 40#include "util/u_memory.h" 41 42/** 43 * This is called when we need to set up GL rendering to a new X window. 44 */ 45boolean 46dri_create_buffer(__DRIscreen * sPriv, 47 __DRIdrawable * dPriv, 48 const __GLcontextModes * visual, boolean isPixmap) 49{ 50 struct dri_screen *screen = sPriv->private; 51 struct dri_drawable *drawable = NULL; 52 53 if (isPixmap) 54 goto fail; /* not implemented */ 55 56 drawable = CALLOC_STRUCT(dri_drawable); 57 if (drawable == NULL) 58 goto fail; 59 60 dri_fill_st_visual(&drawable->stvis, screen, visual); 61 drawable->stfb = dri_create_st_framebuffer(drawable); 62 if (drawable->stfb == NULL) 63 goto fail; 64 65 drawable->sPriv = sPriv; 66 drawable->dPriv = dPriv; 67 dPriv->driverPrivate = (void *)drawable; 68 69 drawable->desired_fences = 2; 70 71 return GL_TRUE; 72fail: 73 FREE(drawable); 74 return GL_FALSE; 75} 76 77void 78dri_destroy_buffer(__DRIdrawable * dPriv) 79{ 80 struct dri_drawable *drawable = dri_drawable(dPriv); 81 82 dri1_swap_fences_clear(drawable); 83 84 dri1_destroy_pipe_surface(drawable); 85 86 dri_destroy_st_framebuffer(drawable->stfb); 87 88 drawable->desired_fences = 0; 89 90 FREE(drawable); 91} 92 93/** 94 * Get the format and binding of an attachment. 95 */ 96void 97dri_drawable_get_format(struct dri_drawable *drawable, 98 enum st_attachment_type statt, 99 enum pipe_format *format, 100 unsigned *bind) 101{ 102 switch (statt) { 103 case ST_ATTACHMENT_FRONT_LEFT: 104 case ST_ATTACHMENT_BACK_LEFT: 105 case ST_ATTACHMENT_FRONT_RIGHT: 106 case ST_ATTACHMENT_BACK_RIGHT: 107 *format = drawable->stvis.color_format; 108 *bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; 109 break; 110 case ST_ATTACHMENT_DEPTH_STENCIL: 111 *format = drawable->stvis.depth_stencil_format; 112 *bind = PIPE_BIND_DEPTH_STENCIL; /* XXX sampler? */ 113 break; 114 default: 115 *format = PIPE_FORMAT_NONE; 116 *bind = 0; 117 break; 118 } 119} 120 121/* vim: set sw=3 ts=8 sts=3 expandtab: */ 122