dri_drawable.c revision ea6a52a1f8e7fd72b5506218c31e58088131f1f5
11d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/************************************************************************** 21d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * 31d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Copyright 2009, VMware, Inc. 41d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * All Rights Reserved. 51d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * 61d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a 71d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * copy of this software and associated documentation files (the 81d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * "Software"), to deal in the Software without restriction, including 91d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * without limitation the rights to use, copy, modify, merge, publish, 101d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * distribute, sub license, and/or sell copies of the Software, and to 111d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * permit persons to whom the Software is furnished to do so, subject to 121d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * the following conditions: 131d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * 141d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * The above copyright notice and this permission notice (including the 151d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * next paragraph) shall be included in all copies or substantial portions 161d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * of the Software. 171d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * 181d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 191d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 201d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 211d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 221d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 231d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 241d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 251d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * 261d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz **************************************************************************/ 271d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/* 281d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Author: Keith Whitwell <keithw@vmware.com> 291d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Author: Jakob Bornecrantz <wallbraker@gmail.com> 301d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz */ 311d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 321d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz#include "dri_screen.h" 331d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz#include "dri_context.h" 341d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz#include "dri_drawable.h" 35bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu#include "dri_st_api.h" 364ce16e13ce5ca89943b86a8e8cdb5354892a13a6George Sapountzis#include "dri1_helper.h" 371d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 38903b90926c7aebb7f48f3c0fdbe90cd22dd5b662Chia-I Wu#include "pipe/p_screen.h" 396df42d80234d13676fc3207cf44f0e371e3372b5Michal Krol#include "util/u_format.h" 401d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz#include "util/u_memory.h" 41d509f84543d0979e9bb53c20c195f378dd61e728Roland Scheidegger 42ace98f09e6e77bba33dd1789506676059bba8e9bMichel Dänzer/** 431d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * This is called when we need to set up GL rendering to a new X window. 441d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz */ 451d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantzboolean 46d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergdri_create_buffer(__DRIscreen * sPriv, 47d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIdrawable * dPriv, 480929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom const __GLcontextModes * visual, boolean isPixmap) 491d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz{ 50b46fcf25be4d1d5a5d072fbce03c2490bf41203fBen Skeggs struct dri_screen *screen = sPriv->private; 511d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz struct dri_drawable *drawable = NULL; 521d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 531d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz if (isPixmap) 540929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom goto fail; /* not implemented */ 551d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 561d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz drawable = CALLOC_STRUCT(dri_drawable); 571d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz if (drawable == NULL) 581d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz goto fail; 591d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 60bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu dri_fill_st_visual(&drawable->stvis, screen, visual); 61bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu drawable->stfb = dri_create_st_framebuffer(drawable); 621d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz if (drawable->stfb == NULL) 631d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz goto fail; 641d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 651d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz drawable->sPriv = sPriv; 661d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz drawable->dPriv = dPriv; 670929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom dPriv->driverPrivate = (void *)drawable; 681d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 69ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom drawable->desired_fences = 2; 70ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom 711d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz return GL_TRUE; 7259b4146a5dbeb108b53fc9c4132095e264ba04beZack Rusinfail: 731d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz FREE(drawable); 741d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz return GL_FALSE; 751d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz} 761d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz 771d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantzvoid 78d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergdri_destroy_buffer(__DRIdrawable * dPriv) 791d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz{ 801d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz struct dri_drawable *drawable = dri_drawable(dPriv); 81ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom 82a437bc50f2f8ff6e91fdf4dc9758b35cff35645aChia-I Wu dri1_swap_fences_clear(drawable); 83ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom 844ce16e13ce5ca89943b86a8e8cdb5354892a13a6George Sapountzis dri1_destroy_pipe_surface(drawable); 85bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 86bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu dri_destroy_st_framebuffer(drawable->stfb); 87bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 88bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu drawable->desired_fences = 0; 89bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 90a437bc50f2f8ff6e91fdf4dc9758b35cff35645aChia-I Wu FREE(drawable); 91ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom} 92ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom 93ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz/** 94ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz * Get the format and binding of an attachment. 95ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz */ 96ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantzvoid 97ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantzdri_drawable_get_format(struct dri_drawable *drawable, 98ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz enum st_attachment_type statt, 99ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz enum pipe_format *format, 100ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz unsigned *bind) 101ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz{ 102ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz switch (statt) { 103ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz case ST_ATTACHMENT_FRONT_LEFT: 104ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz case ST_ATTACHMENT_BACK_LEFT: 105ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz case ST_ATTACHMENT_FRONT_RIGHT: 106ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz case ST_ATTACHMENT_BACK_RIGHT: 107ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *format = drawable->stvis.color_format; 108ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; 109ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz break; 110ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz case ST_ATTACHMENT_DEPTH_STENCIL: 111ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *format = drawable->stvis.depth_stencil_format; 112ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *bind = PIPE_BIND_DEPTH_STENCIL; /* XXX sampler? */ 113ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz break; 114ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz default: 115ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *format = PIPE_FORMAT_NONE; 116ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz *bind = 0; 117ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz break; 118ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz } 119ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz} 120ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz 1211d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/* vim: set sw=3 ts=8 sts=3 expandtab: */ 122