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