p_screen.h revision 9f6990120ace5725e16ee2dd9a59da76fe1041cc
1aa59a937ccf41609081d3f9a4973df5478979785Brian/************************************************************************** 2aa59a937ccf41609081d3f9a4973df5478979785Brian * 3aa59a937ccf41609081d3f9a4973df5478979785Brian * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4aa59a937ccf41609081d3f9a4973df5478979785Brian * All Rights Reserved. 5aa59a937ccf41609081d3f9a4973df5478979785Brian * 6aa59a937ccf41609081d3f9a4973df5478979785Brian * Permission is hereby granted, free of charge, to any person obtaining a 7aa59a937ccf41609081d3f9a4973df5478979785Brian * copy of this software and associated documentation files (the 8aa59a937ccf41609081d3f9a4973df5478979785Brian * "Software"), to deal in the Software without restriction, including 9aa59a937ccf41609081d3f9a4973df5478979785Brian * without limitation the rights to use, copy, modify, merge, publish, 10aa59a937ccf41609081d3f9a4973df5478979785Brian * distribute, sub license, and/or sell copies of the Software, and to 11aa59a937ccf41609081d3f9a4973df5478979785Brian * permit persons to whom the Software is furnished to do so, subject to 12aa59a937ccf41609081d3f9a4973df5478979785Brian * the following conditions: 13aa59a937ccf41609081d3f9a4973df5478979785Brian * 14aa59a937ccf41609081d3f9a4973df5478979785Brian * The above copyright notice and this permission notice (including the 15aa59a937ccf41609081d3f9a4973df5478979785Brian * next paragraph) shall be included in all copies or substantial portions 16aa59a937ccf41609081d3f9a4973df5478979785Brian * of the Software. 17aa59a937ccf41609081d3f9a4973df5478979785Brian * 18aa59a937ccf41609081d3f9a4973df5478979785Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19aa59a937ccf41609081d3f9a4973df5478979785Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20aa59a937ccf41609081d3f9a4973df5478979785Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21aa59a937ccf41609081d3f9a4973df5478979785Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22aa59a937ccf41609081d3f9a4973df5478979785Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23aa59a937ccf41609081d3f9a4973df5478979785Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24aa59a937ccf41609081d3f9a4973df5478979785Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25aa59a937ccf41609081d3f9a4973df5478979785Brian * 26aa59a937ccf41609081d3f9a4973df5478979785Brian **************************************************************************/ 27aa59a937ccf41609081d3f9a4973df5478979785Brian 28aa59a937ccf41609081d3f9a4973df5478979785Brian/** 29984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * @file 30984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * 31aa59a937ccf41609081d3f9a4973df5478979785Brian * Screen, Adapter or GPU 32aa59a937ccf41609081d3f9a4973df5478979785Brian * 33aa59a937ccf41609081d3f9a4973df5478979785Brian * These are driver functions/facilities that are context independent. 34aa59a937ccf41609081d3f9a4973df5478979785Brian */ 35aa59a937ccf41609081d3f9a4973df5478979785Brian 36aa59a937ccf41609081d3f9a4973df5478979785Brian 37aa59a937ccf41609081d3f9a4973df5478979785Brian#ifndef P_SCREEN_H 38aa59a937ccf41609081d3f9a4973df5478979785Brian#define P_SCREEN_H 39aa59a937ccf41609081d3f9a4973df5478979785Brian 40aa59a937ccf41609081d3f9a4973df5478979785Brian 41aa59a937ccf41609081d3f9a4973df5478979785Brian#include "pipe/p_compiler.h" 42099e9d20f0e8f5ee108e4fbb4bf7cae97b5f9a4aBrian Paul#include "pipe/p_format.h" 43099e9d20f0e8f5ee108e4fbb4bf7cae97b5f9a4aBrian Paul#include "pipe/p_defines.h" 44aa59a937ccf41609081d3f9a4973df5478979785Brian 45aa59a937ccf41609081d3f9a4973df5478979785Brian 46aa59a937ccf41609081d3f9a4973df5478979785Brian 47aa59a937ccf41609081d3f9a4973df5478979785Brian#ifdef __cplusplus 48aa59a937ccf41609081d3f9a4973df5478979785Brianextern "C" { 49aa59a937ccf41609081d3f9a4973df5478979785Brian#endif 50aa59a937ccf41609081d3f9a4973df5478979785Brian 51aa59a937ccf41609081d3f9a4973df5478979785Brian 52adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin/** Opaque type */ 53adfbba476db1fc55006efb748656ebb1a481d143Zack Rusinstruct pipe_fence_handle; 540703b2e9ad9ef9d05f7ba53b93dba780ad34b47dBrian Paulstruct pipe_winsys; 55099e9d20f0e8f5ee108e4fbb4bf7cae97b5f9a4aBrian Paulstruct pipe_buffer; 56f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_texture; 57f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_surface; 58f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_video_surface; 59f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_transfer; 60aa59a937ccf41609081d3f9a4973df5478979785Brian 614617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer 62aa59a937ccf41609081d3f9a4973df5478979785Brian/** 63aa59a937ccf41609081d3f9a4973df5478979785Brian * Gallium screen/adapter context. Basically everything 64aa59a937ccf41609081d3f9a4973df5478979785Brian * hardware-specific that doesn't actually require a rendering 65aa59a937ccf41609081d3f9a4973df5478979785Brian * context. 66aa59a937ccf41609081d3f9a4973df5478979785Brian */ 67aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen { 68aa59a937ccf41609081d3f9a4973df5478979785Brian struct pipe_winsys *winsys; 69aa59a937ccf41609081d3f9a4973df5478979785Brian 70aa59a937ccf41609081d3f9a4973df5478979785Brian void (*destroy)( struct pipe_screen * ); 71aa59a937ccf41609081d3f9a4973df5478979785Brian 72aa59a937ccf41609081d3f9a4973df5478979785Brian 73aa59a937ccf41609081d3f9a4973df5478979785Brian const char *(*get_name)( struct pipe_screen * ); 74aa59a937ccf41609081d3f9a4973df5478979785Brian 75aa59a937ccf41609081d3f9a4973df5478979785Brian const char *(*get_vendor)( struct pipe_screen * ); 76aa59a937ccf41609081d3f9a4973df5478979785Brian 77aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul /** 78aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * Query an integer-valued capability/parameter/limit 79aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * \param param one of PIPE_CAP_x 80aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul */ 81aa59a937ccf41609081d3f9a4973df5478979785Brian int (*get_param)( struct pipe_screen *, int param ); 82aa59a937ccf41609081d3f9a4973df5478979785Brian 83aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul /** 84aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * Query a float-valued capability/parameter/limit 85aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * \param param one of PIPE_CAP_x 86aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul */ 87aa59a937ccf41609081d3f9a4973df5478979785Brian float (*get_paramf)( struct pipe_screen *, int param ); 88aa59a937ccf41609081d3f9a4973df5478979785Brian 897f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell struct pipe_context * (*context_create)( struct pipe_screen *, 907f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell void *priv ); 917f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 92aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul /** 93aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * Check if the given pipe_format is supported as a texture or 94aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * drawing surface. 958aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca * \param tex_usage bitmask of PIPE_TEXTURE_USAGE_* 96985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * \param geom_flags bitmask of PIPE_TEXTURE_GEOM_* 97aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul */ 98aa59a937ccf41609081d3f9a4973df5478979785Brian boolean (*is_format_supported)( struct pipe_screen *, 998aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca enum pipe_format format, 1008aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca enum pipe_texture_target target, 1018aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca unsigned tex_usage, 1028aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca unsigned geom_flags ); 103aa59a937ccf41609081d3f9a4973df5478979785Brian 104aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul /** 105aad9dd14d8ef44e55f70b639765dae89e9976345Brian Paul * Create a new texture object, using the given template info. 106aa59a937ccf41609081d3f9a4973df5478979785Brian */ 107aa59a937ccf41609081d3f9a4973df5478979785Brian struct pipe_texture * (*texture_create)(struct pipe_screen *, 108aa59a937ccf41609081d3f9a4973df5478979785Brian const struct pipe_texture *templat); 109aa59a937ccf41609081d3f9a4973df5478979785Brian 1106361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca /** 111985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * Create a new texture object, using the given template info, but on top of 1126361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca * existing memory. 1136361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca * 1146361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca * It is assumed that the buffer data is layed out according to the expected 1156361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca * by the hardware. NULL will be returned if any inconsistency is found. 1166361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca */ 1176361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca struct pipe_texture * (*texture_blanket)(struct pipe_screen *, 1186361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca const struct pipe_texture *templat, 119872b515e8f0bb1be5bad85fd9d01529c71f07ba2Zack Rusin const unsigned *stride, 1206361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca struct pipe_buffer *buffer); 1216361d6f48d13ce481253faf106fba5c6a41488edJosé Fonseca 1225e27cd46c04a9e7b5904cc014bffd0f4daae31feMichel Dänzer void (*texture_destroy)(struct pipe_texture *pt); 123aa59a937ccf41609081d3f9a4973df5478979785Brian 1249f6990120ace5725e16ee2dd9a59da76fe1041ccBrian Paul /** Get a 2D surface which is a "view" into a texture 1259f6990120ace5725e16ee2dd9a59da76fe1041ccBrian Paul * \param usage bitmaks of PIPE_BUFFER_USAGE_* read/write flags 1269f6990120ace5725e16ee2dd9a59da76fe1041ccBrian Paul */ 127aa59a937ccf41609081d3f9a4973df5478979785Brian struct pipe_surface *(*get_tex_surface)(struct pipe_screen *, 128aa59a937ccf41609081d3f9a4973df5478979785Brian struct pipe_texture *texture, 129aa59a937ccf41609081d3f9a4973df5478979785Brian unsigned face, unsigned level, 130c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell unsigned zslice, 131c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell unsigned usage ); 132c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell 1335e27cd46c04a9e7b5904cc014bffd0f4daae31feMichel Dänzer void (*tex_surface_destroy)(struct pipe_surface *); 134c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell 135c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell 1364617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer /** Get a transfer object for transferring data to/from a texture */ 1374617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer struct pipe_transfer *(*get_tex_transfer)(struct pipe_screen *, 1384617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer struct pipe_texture *texture, 1394617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer unsigned face, unsigned level, 1404617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer unsigned zslice, 1414617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer enum pipe_transfer_usage usage, 1424617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer unsigned x, unsigned y, 1434617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer unsigned w, unsigned h); 1444617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer 1455e27cd46c04a9e7b5904cc014bffd0f4daae31feMichel Dänzer void (*tex_transfer_destroy)(struct pipe_transfer *); 1464617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer 1474617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer void *(*transfer_map)( struct pipe_screen *, 1484617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer struct pipe_transfer *transfer ); 149c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell 1504617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer void (*transfer_unmap)( struct pipe_screen *, 1514617981ec72f7985941bee4b03c534d97ff96bc6Michel Dänzer struct pipe_transfer *transfer ); 152b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 153b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 154b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin /** 155985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * Create a new buffer. 156985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * \param alignment buffer start address alignment in bytes 157985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * \param usage bitmask of PIPE_BUFFER_USAGE_x 158985e71866a9eb4c6f18ff8766eb278e58bf09830Brian Paul * \param size size in bytes 159b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin */ 160b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin struct pipe_buffer *(*buffer_create)( struct pipe_screen *screen, 161b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned alignment, 162b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned usage, 163b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned size ); 164b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 165b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin /** 166b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Create a buffer that wraps user-space data. 167b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 168b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Effectively this schedules a delayed call to buffer_create 169b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * followed by an upload of the data at *some point in the future*, 170b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * or perhaps never. Basically the allocate/upload is delayed 171b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * until the buffer is actually passed to hardware. 172b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 173b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * The intention is to provide a quick way to turn regular data 174b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * into a buffer, and secondly to avoid a copy operation if that 175b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * data subsequently turns out to be only accessed by the CPU. 176b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 177b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Common example is OpenGL vertex buffers that are subsequently 178b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * processed either by software TNL in the driver or by passing to 179b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * hardware. 180b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 181b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * XXX: What happens if the delayed call to buffer_create() fails? 182b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 183b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Note that ptr may be accessed at any time upto the time when the 184b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * buffer is destroyed, so the data must not be freed before then. 185b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin */ 186b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin struct pipe_buffer *(*user_buffer_create)(struct pipe_screen *screen, 187b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin void *ptr, 188b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned bytes); 189b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 190b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin /** 191b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Allocate storage for a display target surface. 192b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 193b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Often surfaces which are meant to be blitted to the front screen (i.e., 194b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * display targets) must be allocated with special characteristics, memory 195b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * pools, or obtained directly from the windowing system. 196b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * 197b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * This callback is invoked by the pipe_screenwhen creating a texture marked 198b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * with the PIPE_TEXTURE_USAGE_DISPLAY_TARGET flag to get the underlying 199b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * buffer storage. 200b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin */ 201b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin struct pipe_buffer *(*surface_buffer_create)(struct pipe_screen *screen, 202b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned width, unsigned height, 203b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin enum pipe_format format, 204b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned usage, 205a41a253ce3b667fc8ad1bfbafce9e3e633667383Jakob Bornecrantz unsigned tex_usage, 206b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned *stride); 207b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 208b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin 209b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin /** 210b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * Map the entire data store of a buffer object into the client's address. 211b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin * flags is bitmask of PIPE_BUFFER_USAGE_CPU_READ/WRITE flags. 212b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin */ 213b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin void *(*buffer_map)( struct pipe_screen *screen, 214b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin struct pipe_buffer *buf, 215b3028acd98e2b7fd09344f9005c5b20bba91262cZack Rusin unsigned usage ); 21660e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca /** 21760e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca * Map a subrange of the buffer data store into the client's address space. 21860e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca * 2192a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * The returned pointer is always relative to buffer start, regardless of 2202a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * the specified range. This is different from the ARB_map_buffer_range 2212a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * semantics because we don't forbid multiple mappings of the same buffer 2222a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * (yet). 22360e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca */ 22460e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca void *(*buffer_map_range)( struct pipe_screen *screen, 22560e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca struct pipe_buffer *buf, 226190db8b4c36bffcaae996538e250eb144242c064José Fonseca unsigned offset, 227190db8b4c36bffcaae996538e250eb144242c064José Fonseca unsigned length, 228190db8b4c36bffcaae996538e250eb144242c064José Fonseca unsigned usage); 22960e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca 23060e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca /** 2312a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * Notify a range that was actually written into. 2322a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * 2334ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * Can only be used if the buffer was mapped with the 2344ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * PIPE_BUFFER_USAGE_CPU_WRITE and PIPE_BUFFER_USAGE_FLUSH_EXPLICIT flags 2354ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * set. 2364ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * 2372a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * The range is relative to the buffer start, regardless of the range 2382a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * specified to buffer_map_range. This is different from the 2392a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * ARB_map_buffer_range semantics because we don't forbid multiple mappings 2402a1f29c22003e819914d386f2117d6e186f59f20José Fonseca * of the same buffer (yet). 24148f6e754898879898165dca013157dffe2babb12José Fonseca * 24260e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca */ 243190db8b4c36bffcaae996538e250eb144242c064José Fonseca void (*buffer_flush_mapped_range)( struct pipe_screen *screen, 244190db8b4c36bffcaae996538e250eb144242c064José Fonseca struct pipe_buffer *buf, 245190db8b4c36bffcaae996538e250eb144242c064José Fonseca unsigned offset, 246190db8b4c36bffcaae996538e250eb144242c064José Fonseca unsigned length); 247190db8b4c36bffcaae996538e250eb144242c064José Fonseca 2484ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca /** 2494ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * Unmap buffer. 2504ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * 2514ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * If the buffer was mapped with PIPE_BUFFER_USAGE_CPU_WRITE flag but not 2524ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * PIPE_BUFFER_USAGE_FLUSH_EXPLICIT then the pipe driver will 2534ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * assume that the whole buffer was written. This is mostly for backward 2544ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * compatibility purposes and may affect performance -- the state tracker 2554ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * should always specify exactly what got written while the buffer was 2564ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca * mapped. 2574ffe2844a46bcd69c0f2c95f04da97e83899e831José Fonseca */ 258190db8b4c36bffcaae996538e250eb144242c064José Fonseca void (*buffer_unmap)( struct pipe_screen *screen, 259190db8b4c36bffcaae996538e250eb144242c064José Fonseca struct pipe_buffer *buf ); 26060e5fe65067da76dea816535bec1e9073adc0ba7José Fonseca 2615e27cd46c04a9e7b5904cc014bffd0f4daae31feMichel Dänzer void (*buffer_destroy)( struct pipe_buffer *buf ); 262adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 263f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton /** 264f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton * Create a video surface suitable for use as a decoding target by the 265f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton * driver's pipe_video_context. 266f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton */ 267f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton struct pipe_video_surface* 268f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton (*video_surface_create)( struct pipe_screen *screen, 269f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton enum pipe_video_chroma_format chroma_format, 270f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton unsigned width, unsigned height ); 271f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 272f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton void (*video_surface_destroy)( struct pipe_video_surface *vsfc ); 273f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 27432da02f7c19f49802fe9589e73c3945502a197c9Ben Skeggs /** 27532da02f7c19f49802fe9589e73c3945502a197c9Ben Skeggs * Do any special operations to ensure buffer size is correct 27632da02f7c19f49802fe9589e73c3945502a197c9Ben Skeggs */ 27732da02f7c19f49802fe9589e73c3945502a197c9Ben Skeggs void (*update_buffer)( struct pipe_screen *ws, 27832da02f7c19f49802fe9589e73c3945502a197c9Ben Skeggs void *context_private ); 279adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 280adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin /** 281adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * Do any special operations to ensure frontbuffer contents are 282adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * displayed, eg copy fake frontbuffer. 283adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin */ 284adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin void (*flush_frontbuffer)( struct pipe_screen *screen, 285adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin struct pipe_surface *surf, 286adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin void *context_private ); 287adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 288adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 289adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 290adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin /** Set ptr = fence, with reference counting */ 291adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin void (*fence_reference)( struct pipe_screen *screen, 292adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin struct pipe_fence_handle **ptr, 293adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin struct pipe_fence_handle *fence ); 294adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 295adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin /** 296adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * Checks whether the fence has been signalled. 297adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * \param flags driver-specific meaning 298adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * \return zero on success. 299adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin */ 300adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin int (*fence_signalled)( struct pipe_screen *screen, 301adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin struct pipe_fence_handle *fence, 3027ea265888f19bcbc1771f6c671ce08855b80bf0aJosé Fonseca unsigned flags ); 303adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 304adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin /** 305adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * Wait for the fence to finish. 306adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * \param flags driver-specific meaning 307adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin * \return zero on success. 308adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin */ 309adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin int (*fence_finish)( struct pipe_screen *screen, 310adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin struct pipe_fence_handle *fence, 3117ea265888f19bcbc1771f6c671ce08855b80bf0aJosé Fonseca unsigned flags ); 312adfbba476db1fc55006efb748656ebb1a481d143Zack Rusin 313aa59a937ccf41609081d3f9a4973df5478979785Brian}; 314aa59a937ccf41609081d3f9a4973df5478979785Brian 315aa59a937ccf41609081d3f9a4973df5478979785Brian 316aa59a937ccf41609081d3f9a4973df5478979785Brian#ifdef __cplusplus 317aa59a937ccf41609081d3f9a4973df5478979785Brian} 318aa59a937ccf41609081d3f9a4973df5478979785Brian#endif 319aa59a937ccf41609081d3f9a4973df5478979785Brian 320aa59a937ccf41609081d3f9a4973df5478979785Brian#endif /* P_SCREEN_H */ 321