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