dri_drawable.c revision a93f9f343a64ce91587af66761399f9d4c180015
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"
354ce16e13ce5ca89943b86a8e8cdb5354892a13a6George Sapountzis#include "dri1_helper.h"
361d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
37903b90926c7aebb7f48f3c0fdbe90cd22dd5b662Chia-I Wu#include "pipe/p_screen.h"
386df42d80234d13676fc3207cf44f0e371e3372b5Michal Krol#include "util/u_format.h"
391d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz#include "util/u_memory.h"
401372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz#include "util/u_inlines.h"
41d509f84543d0979e9bb53c20c195f378dd61e728Roland Scheidegger
421372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
431372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzstatic boolean
441372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzdri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi,
451372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz                            const enum st_attachment_type *statts,
461372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz                            unsigned count,
471372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz                            struct pipe_resource **out)
481372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz{
491372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   struct dri_drawable *drawable =
501372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      (struct dri_drawable *) stfbi->st_manager_private;
511372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   struct dri_screen *screen = dri_screen(drawable->sPriv);
521372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   unsigned statt_mask, new_mask;
531372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   boolean new_stamp;
541372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   int i;
551372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
561372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   statt_mask = 0x0;
571372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   for (i = 0; i < count; i++)
581372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      statt_mask |= (1 << statts[i]);
591372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
601372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* record newly allocated textures */
611372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   new_mask = (statt_mask & ~drawable->texture_mask);
621372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
631372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /*
641372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz    * dPriv->pStamp is the server stamp.  It should be accessed with a lock, at
651372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz    * least for DRI1.  dPriv->lastStamp is the client stamp.  It has the value
661372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz    * of the server stamp when last checked.
671372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz    */
681372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   new_stamp = (drawable->texture_stamp != drawable->dPriv->lastStamp);
691372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
70a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz   if (new_stamp || new_mask || screen->broken_invalidate) {
711372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      if (new_stamp && screen->update_drawable_info)
721372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz         screen->update_drawable_info(drawable);
731372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
741372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      screen->allocate_textures(drawable, statts, count);
751372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
761372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      /* add existing textures */
771372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      for (i = 0; i < ST_ATTACHMENT_COUNT; i++) {
781372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz         if (drawable->textures[i])
791372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz            statt_mask |= (1 << i);
801372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      }
811372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
821372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      drawable->texture_stamp = drawable->dPriv->lastStamp;
831372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      drawable->texture_mask = statt_mask;
841372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   }
851372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
861372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   if (!out)
871372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      return TRUE;
881372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
891372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   for (i = 0; i < count; i++) {
901372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      out[i] = NULL;
911372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      pipe_resource_reference(&out[i], drawable->textures[statts[i]]);
921372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   }
931372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
941372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   return TRUE;
951372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz}
961372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
971372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzstatic boolean
981372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzdri_st_framebuffer_flush_front(struct st_framebuffer_iface *stfbi,
991372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz                               enum st_attachment_type statt)
1001372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz{
1011372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   struct dri_drawable *drawable =
1021372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      (struct dri_drawable *) stfbi->st_manager_private;
1031372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   struct dri_screen *screen = dri_screen(drawable->sPriv);
1041372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1051372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* XXX remove this and just set the correct one on the framebuffer */
1061372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   screen->flush_frontbuffer(drawable, statt);
1071372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1081372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   return TRUE;
1091372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz}
1101372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
111ace98f09e6e77bba33dd1789506676059bba8e9bMichel Dänzer/**
1121d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * This is called when we need to set up GL rendering to a new X window.
1131d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz */
1141d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantzboolean
115d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergdri_create_buffer(__DRIscreen * sPriv,
116d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg		  __DRIdrawable * dPriv,
1170929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom		  const __GLcontextModes * visual, boolean isPixmap)
1181d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz{
119b46fcf25be4d1d5a5d072fbce03c2490bf41203fBen Skeggs   struct dri_screen *screen = sPriv->private;
1201d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   struct dri_drawable *drawable = NULL;
1211d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
1221d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   if (isPixmap)
1230929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom      goto fail;		       /* not implemented */
1241d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
1251d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   drawable = CALLOC_STRUCT(dri_drawable);
1261d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   if (drawable == NULL)
1271d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz      goto fail;
1281d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
129bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu   dri_fill_st_visual(&drawable->stvis, screen, visual);
1301372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1311372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* setup the st_framebuffer_iface */
1321372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->base.visual = &drawable->stvis;
1331372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->base.flush_front = dri_st_framebuffer_flush_front;
1341372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->base.validate = dri_st_framebuffer_validate;
1351372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->base.st_manager_private = (void *) drawable;
1361d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
1371d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   drawable->sPriv = sPriv;
1381d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   drawable->dPriv = dPriv;
1390929b2bf3cdb54d94da8dee5797878e2ee582b41Thomas Hellstrom   dPriv->driverPrivate = (void *)drawable;
1401d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
141ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom   drawable->desired_fences = 2;
142ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom
1431d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   return GL_TRUE;
14459b4146a5dbeb108b53fc9c4132095e264ba04beZack Rusinfail:
1451d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   FREE(drawable);
1461d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   return GL_FALSE;
1471d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz}
1481d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz
1491d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantzvoid
150d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergdri_destroy_buffer(__DRIdrawable * dPriv)
1511d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz{
1521d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz   struct dri_drawable *drawable = dri_drawable(dPriv);
1531372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   int i;
154ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom
155a437bc50f2f8ff6e91fdf4dc9758b35cff35645aChia-I Wu   dri1_swap_fences_clear(drawable);
156ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom
1574ce16e13ce5ca89943b86a8e8cdb5354892a13a6George Sapountzis   dri1_destroy_pipe_surface(drawable);
158bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu
1591372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   for (i = 0; i < ST_ATTACHMENT_COUNT; i++)
1601372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      pipe_resource_reference(&drawable->textures[i], NULL);
161bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu
162bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu   drawable->desired_fences = 0;
163bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu
164a437bc50f2f8ff6e91fdf4dc9758b35cff35645aChia-I Wu   FREE(drawable);
165ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom}
166ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom
167ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz/**
1681372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz * Validate the texture at an attachment.  Allocate the texture if it does not
1691372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz * exist.
1701372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz */
1711372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzvoid
1721372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzdri_drawable_validate_att(struct dri_drawable *drawable,
1731372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz                          enum st_attachment_type statt)
1741372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz{
1751372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   enum st_attachment_type statts[ST_ATTACHMENT_COUNT];
1761372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   unsigned i, count = 0;
1771372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1781372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* check if buffer already exists */
1791372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   if (drawable->texture_mask & (1 << statt))
1801372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      return;
1811372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1821372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* make sure DRI2 does not destroy existing buffers */
1831372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   for (i = 0; i < ST_ATTACHMENT_COUNT; i++) {
1841372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      if (drawable->texture_mask & (1 << i)) {
1851372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz         statts[count++] = i;
1861372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz      }
1871372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   }
1881372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   statts[count++] = statt;
1891372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1901372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->texture_stamp = drawable->dPriv->lastStamp - 1;
1911372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1921372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   /* this calles into the manager */
1931372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz   drawable->base.validate(&drawable->base, statts, count, NULL);
1941372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz}
1951372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz
1961372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz/**
197ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz * Get the format and binding of an attachment.
198ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz */
199ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantzvoid
200ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantzdri_drawable_get_format(struct dri_drawable *drawable,
201ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz                        enum st_attachment_type statt,
202ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz                        enum pipe_format *format,
203ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz                        unsigned *bind)
204ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz{
205ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   switch (statt) {
206ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   case ST_ATTACHMENT_FRONT_LEFT:
207ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   case ST_ATTACHMENT_BACK_LEFT:
208ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   case ST_ATTACHMENT_FRONT_RIGHT:
209ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   case ST_ATTACHMENT_BACK_RIGHT:
210ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *format = drawable->stvis.color_format;
211ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
212ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      break;
213ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   case ST_ATTACHMENT_DEPTH_STENCIL:
214ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *format = drawable->stvis.depth_stencil_format;
215ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *bind = PIPE_BIND_DEPTH_STENCIL; /* XXX sampler? */
216ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      break;
217ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   default:
218ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *format = PIPE_FORMAT_NONE;
219ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      *bind = 0;
220ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz      break;
221ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz   }
222ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz}
223ea6a52a1f8e7fd72b5506218c31e58088131f1f5Jakob Bornecrantz
2241d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/* vim: set sw=3 ts=8 sts=3 expandtab: */
225