18e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell/************************************************************************** 28e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 38e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 48e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * All Rights Reserved. 58e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 68e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 78e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * copy of this software and associated documentation files (the 88e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * "Software"), to deal in the Software without restriction, including 98e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * the following conditions: 138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * The above copyright notice and this permission notice (including the 158e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * of the Software. 178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 218e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 238e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 248e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell **************************************************************************/ 278e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 28943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell#ifndef PIPE_CONTEXT_H 29943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell#define PIPE_CONTEXT_H 308e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 3181ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Lee#include "p_compiler.h" 32a5a942256162eb0ca4df2f8202a916b080396141Brian Paul#include "p_format.h" 33a5a942256162eb0ca4df2f8202a916b080396141Brian Paul#include "p_video_enums.h" 34563479552e2f491fb94e7fac5772f3c72cee962aBrian 35e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca#ifdef __cplusplus 36e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonsecaextern "C" { 37e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca#endif 38e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca 3981ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Lee 4081ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_blend_color; 4181ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_blend_state; 4281ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_box; 4381ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_clip_state; 44507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšákstruct pipe_constant_buffer; 4581ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_depth_stencil_alpha_state; 4681ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_draw_info; 474abe1eb980ed76d2b2d3383eaab520d0aa2ae6f4Michel Dänzerstruct pipe_fence_handle; 4881ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_framebuffer_state; 4981ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_index_buffer; 5013699463a33c1adf44005125c488e886e074a05bKeith Whitwellstruct pipe_query; 5181ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_poly_stipple; 5281ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_rasterizer_state; 5394822c6d83b7811db2a02bb4416df02ae225ba47Christoph Bumillerstruct pipe_resolve_info; 5481ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_resource; 5581ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_sampler_state; 5681ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_sampler_view; 5781ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_scissor_state; 5881ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_shader_state; 5981ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_stencil_ref; 60861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšákstruct pipe_stream_output_target; 6181ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_surface; 6281ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_vertex_buffer; 6381ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_vertex_element; 64a5a942256162eb0ca4df2f8202a916b080396141Brian Paulstruct pipe_video_buffer; 65a5a942256162eb0ca4df2f8202a916b080396141Brian Paulstruct pipe_video_decoder; 6681ac08f89d9f52d14aada43f4d00302cd9b32c68Vinson Leestruct pipe_viewport_state; 67d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerezstruct pipe_compute_state; 686dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlieunion pipe_color_union; 69102ed41ae6287f9f43708d10f3952c3c5b887c45Marek Olšákunion pipe_query_result; 704e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König 71092a9ecbba4d766da9c0becf888818c020ac226dBrian/** 721103e9c3d0c3ba636837250eea3d50956a3b1e02Brian * Gallium rendering context. Basically: 731103e9c3d0c3ba636837250eea3d50956a3b1e02Brian * - state setting functions 741103e9c3d0c3ba636837250eea3d50956a3b1e02Brian * - VBO drawing functions 75b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer * - surface functions 76092a9ecbba4d766da9c0becf888818c020ac226dBrian */ 77943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwellstruct pipe_context { 78aa59a937ccf41609081d3f9a4973df5478979785Brian struct pipe_screen *screen; 795ffdada717466a78b5b148764ba23c7a95098887Zack Rusin 8037da2d685102ab5a706e0634fc55c60229598faaBrian Paul void *priv; /**< context private data (for DRI for example) */ 8137da2d685102ab5a706e0634fc55c60229598faaBrian Paul void *draw; /**< private, for draw module (temporary?) */ 8210c62bf0683437672c83339138a6802d56aeca8fBrian 83943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell void (*destroy)( struct pipe_context * ); 848e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 8537da2d685102ab5a706e0634fc55c60229598faaBrian Paul /** 86361b179720dc5d7bb4e046d3e91ce3b1a64a4cd2Brian Paul * VBO drawing 87092a9ecbba4d766da9c0becf888818c020ac226dBrian */ 8837da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@{*/ 89c5e9d3114a80d6d35a2f4e65783cdc75fcc2deacChia-I Wu void (*draw_vbo)( struct pipe_context *pipe, 90c5e9d3114a80d6d35a2f4e65783cdc75fcc2deacChia-I Wu const struct pipe_draw_info *info ); 9137da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@}*/ 921dd55a77c87bd4e057d689163efd070a2dfe3454Brian 93c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul /** 94c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul * Predicate subsequent rendering on occlusion query result 95c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul * \param query the query predicate, or NULL if no predicate 96d65d5d299357ea77051c86ac81515b37c6ccf97fBrian Paul * \param mode one of PIPE_RENDER_COND_x 97c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul */ 98c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul void (*render_condition)( struct pipe_context *pipe, 99c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul struct pipe_query *query, 100c0b4fb06b8b570b1999a0849797d3cb77f6ee5cdBrian Paul uint mode ); 10173f96c51052bf5233191d852ef463462306bf1d5Brian 10209fbb3837b6aa5dfc6c94f41ab5443820177c569Brian /** 10309fbb3837b6aa5dfc6c94f41ab5443820177c569Brian * Query objects 104563479552e2f491fb94e7fac5772f3c72cee962aBrian */ 10537da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@{*/ 10613699463a33c1adf44005125c488e886e074a05bKeith Whitwell struct pipe_query *(*create_query)( struct pipe_context *pipe, 1071c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul unsigned query_type ); 10813699463a33c1adf44005125c488e886e074a05bKeith Whitwell 10913699463a33c1adf44005125c488e886e074a05bKeith Whitwell void (*destroy_query)(struct pipe_context *pipe, 11013699463a33c1adf44005125c488e886e074a05bKeith Whitwell struct pipe_query *q); 11113699463a33c1adf44005125c488e886e074a05bKeith Whitwell 11213699463a33c1adf44005125c488e886e074a05bKeith Whitwell void (*begin_query)(struct pipe_context *pipe, struct pipe_query *q); 11313699463a33c1adf44005125c488e886e074a05bKeith Whitwell void (*end_query)(struct pipe_context *pipe, struct pipe_query *q); 11413699463a33c1adf44005125c488e886e074a05bKeith Whitwell 11598f3f1c695f232120541670a8b5a355003ce3cc8Brian Paul /** 11698f3f1c695f232120541670a8b5a355003ce3cc8Brian Paul * Get results of a query. 11798f3f1c695f232120541670a8b5a355003ce3cc8Brian Paul * \param wait if true, this query will block until the result is ready 11898f3f1c695f232120541670a8b5a355003ce3cc8Brian Paul * \return TRUE if results are ready, FALSE otherwise 11998f3f1c695f232120541670a8b5a355003ce3cc8Brian Paul */ 12034f7681669987bc804f4603463f2fa3f82bc844fZack Rusin boolean (*get_query_result)(struct pipe_context *pipe, 12113699463a33c1adf44005125c488e886e074a05bKeith Whitwell struct pipe_query *q, 12213699463a33c1adf44005125c488e886e074a05bKeith Whitwell boolean wait, 123102ed41ae6287f9f43708d10f3952c3c5b887c45Marek Olšák union pipe_query_result *result); 12437da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@}*/ 125563479552e2f491fb94e7fac5772f3c72cee962aBrian 12637da2d685102ab5a706e0634fc55c60229598faaBrian Paul /** 12737da2d685102ab5a706e0634fc55c60229598faaBrian Paul * State functions (create/bind/destroy state objects) 128092a9ecbba4d766da9c0becf888818c020ac226dBrian */ 12937da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@{*/ 130c0bf7322088715bb411068c3d631b0c4be8cdff5Zack Rusin void * (*create_blend_state)(struct pipe_context *, 131c0bf7322088715bb411068c3d631b0c4be8cdff5Zack Rusin const struct pipe_blend_state *); 1326cb87cf26f904b891faa42268f373864fa33541dZack Rusin void (*bind_blend_state)(struct pipe_context *, void *); 1336cb87cf26f904b891faa42268f373864fa33541dZack Rusin void (*delete_blend_state)(struct pipe_context *, void *); 1349780327c5d95586a88fce94d7b47342355ead118Zack Rusin 1357a06c026ad24b74048f6d125383faf25deb1dfbbZack Rusin void * (*create_sampler_state)(struct pipe_context *, 1367a06c026ad24b74048f6d125383faf25deb1dfbbZack Rusin const struct pipe_sampler_state *); 13715d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol void (*bind_fragment_sampler_states)(struct pipe_context *, 13815d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol unsigned num_samplers, 13915d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol void **samplers); 14015d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol void (*bind_vertex_sampler_states)(struct pipe_context *, 14115d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol unsigned num_samplers, 14215d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol void **samplers); 14353bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin void (*bind_geometry_sampler_states)(struct pipe_context *, 14453bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin unsigned num_samplers, 14553bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin void **samplers); 146d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*bind_compute_sampler_states)(struct pipe_context *, 147d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez unsigned start_slot, 148d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez unsigned num_samplers, 149d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void **samplers); 1506cb87cf26f904b891faa42268f373864fa33541dZack Rusin void (*delete_sampler_state)(struct pipe_context *, void *); 151f117327a3f246713abfd4dc4320d4a1a7f1b811aZack Rusin 1526cb87cf26f904b891faa42268f373864fa33541dZack Rusin void * (*create_rasterizer_state)(struct pipe_context *, 1536cb87cf26f904b891faa42268f373864fa33541dZack Rusin const struct pipe_rasterizer_state *); 1546cb87cf26f904b891faa42268f373864fa33541dZack Rusin void (*bind_rasterizer_state)(struct pipe_context *, void *); 1556cb87cf26f904b891faa42268f373864fa33541dZack Rusin void (*delete_rasterizer_state)(struct pipe_context *, void *); 156294401814d1d89cc731de1c22c25333aa5d59374Zack Rusin 157bfe79babf99e6b9435195178d1ea64687c60d161Keith Whitwell void * (*create_depth_stencil_alpha_state)(struct pipe_context *, 158bfe79babf99e6b9435195178d1ea64687c60d161Keith Whitwell const struct pipe_depth_stencil_alpha_state *); 159bfe79babf99e6b9435195178d1ea64687c60d161Keith Whitwell void (*bind_depth_stencil_alpha_state)(struct pipe_context *, void *); 160bfe79babf99e6b9435195178d1ea64687c60d161Keith Whitwell void (*delete_depth_stencil_alpha_state)(struct pipe_context *, void *); 161d6ac959833a8e40a27907940969c622692f749b1Zack Rusin 162daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void * (*create_fs_state)(struct pipe_context *, 163daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin const struct pipe_shader_state *); 164daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void (*bind_fs_state)(struct pipe_context *, void *); 165daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void (*delete_fs_state)(struct pipe_context *, void *); 166daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin 167daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void * (*create_vs_state)(struct pipe_context *, 168daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin const struct pipe_shader_state *); 169daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void (*bind_vs_state)(struct pipe_context *, void *); 170daf5b0f41baa50951e7c2f9ea5cd90b119085a7fZack Rusin void (*delete_vs_state)(struct pipe_context *, void *); 17189d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin 17289d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin void * (*create_gs_state)(struct pipe_context *, 17389d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin const struct pipe_shader_state *); 17489d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin void (*bind_gs_state)(struct pipe_context *, void *); 17589d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin void (*delete_gs_state)(struct pipe_context *, void *); 17689d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin 17751d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger void * (*create_vertex_elements_state)(struct pipe_context *, 17851d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger unsigned num_elements, 17951d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger const struct pipe_vertex_element *); 18051d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger void (*bind_vertex_elements_state)(struct pipe_context *, void *); 18151d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger void (*delete_vertex_elements_state)(struct pipe_context *, void *); 18251d139f03898e5e46af6363c6bba131455738cc4Roland Scheidegger 18337da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@}*/ 184ccd63b54cfbb6bb241d55f7ac95afcd14819f469Zack Rusin 18537da2d685102ab5a706e0634fc55c60229598faaBrian Paul /** 18637da2d685102ab5a706e0634fc55c60229598faaBrian Paul * Parameter-like state (or properties) 18737da2d685102ab5a706e0634fc55c60229598faaBrian Paul */ 18837da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@{*/ 189284efcfc27aaeb447e0898ae3342e9fee20c584aBrian void (*set_blend_color)( struct pipe_context *, 190284efcfc27aaeb447e0898ae3342e9fee20c584aBrian const struct pipe_blend_color * ); 191284efcfc27aaeb447e0898ae3342e9fee20c584aBrian 1921a859ecf4a4728cb321b1f68d51491cd285a3c03Roland Scheidegger void (*set_stencil_ref)( struct pipe_context *, 1931a859ecf4a4728cb321b1f68d51491cd285a3c03Roland Scheidegger const struct pipe_stencil_ref * ); 1941a859ecf4a4728cb321b1f68d51491cd285a3c03Roland Scheidegger 195aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger void (*set_sample_mask)( struct pipe_context *, 196aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger unsigned sample_mask ); 197aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger 198943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell void (*set_clip_state)( struct pipe_context *, 1991a859ecf4a4728cb321b1f68d51491cd285a3c03Roland Scheidegger const struct pipe_clip_state * ); 2008e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 201c0bb4ba9e665e40a325d82aa2ee48d7b8abd603bBrian void (*set_constant_buffer)( struct pipe_context *, 202c0bb4ba9e665e40a325d82aa2ee48d7b8abd603bBrian uint shader, uint index, 203507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák struct pipe_constant_buffer *buf ); 2048f2888758129b0a40d71fa4ce10d606b4bcf7631Brian 205493f7b5f3ae2eb64eaa65e24e79a7a071c359b81Brian void (*set_framebuffer_state)( struct pipe_context *, 206493f7b5f3ae2eb64eaa65e24e79a7a071c359b81Brian const struct pipe_framebuffer_state * ); 207493f7b5f3ae2eb64eaa65e24e79a7a071c359b81Brian 208943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell void (*set_polygon_stipple)( struct pipe_context *, 209943964a1e5bad86bdceb0a06d60fb3b302ebce6aKeith Whitwell const struct pipe_poly_stipple * ); 2108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 211ea92566ed9cabf5eb5d0993b39c4372d5bfcf3f1Brian void (*set_scissor_state)( struct pipe_context *, 212ea92566ed9cabf5eb5d0993b39c4372d5bfcf3f1Brian const struct pipe_scissor_state * ); 2138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 21437da2d685102ab5a706e0634fc55c60229598faaBrian Paul void (*set_viewport_state)( struct pipe_context *, 21537da2d685102ab5a706e0634fc55c60229598faaBrian Paul const struct pipe_viewport_state * ); 216c3af68dc5022715cc8f126b7df12f3f5248aefe7Keith Whitwell 217f6106566081978f663cf08e54bb8908cb58a5316Michal Krol void (*set_fragment_sampler_views)(struct pipe_context *, 218f6106566081978f663cf08e54bb8908cb58a5316Michal Krol unsigned num_views, 219f6106566081978f663cf08e54bb8908cb58a5316Michal Krol struct pipe_sampler_view **); 22015d1b406afd733b5f46b16dc933e29c218cdca39Michal Krol 221f6106566081978f663cf08e54bb8908cb58a5316Michal Krol void (*set_vertex_sampler_views)(struct pipe_context *, 222f6106566081978f663cf08e54bb8908cb58a5316Michal Krol unsigned num_views, 223f6106566081978f663cf08e54bb8908cb58a5316Michal Krol struct pipe_sampler_view **); 2245d69aeb0028f44d06093faede5c545908b0df89aBrian 22553bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin void (*set_geometry_sampler_views)(struct pipe_context *, 22653bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin unsigned num_views, 22753bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin struct pipe_sampler_view **); 22853bd9796a1395e4acde884ff55cb7ee18586595aZack Rusin 229d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*set_compute_sampler_views)(struct pipe_context *, 230d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez unsigned start_slot, unsigned num_views, 231d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez struct pipe_sampler_view **); 232d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez 2335f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez /** 2345f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * Bind an array of shader resources that will be used by the 2355f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * graphics pipeline. Any resources that were previously bound to 2365f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * the specified range will be unbound after this call. 2375f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * 2385f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param first first resource to bind. 2395f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param count number of consecutive resources to bind. 2405f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param resources array of pointers to the resources to bind, it 2415f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * should contain at least \a count elements 2425f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * unless it's NULL, in which case no new 2435f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * resources will be bound. 2445f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez */ 2455f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez void (*set_shader_resources)(struct pipe_context *, 2465f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez unsigned start, unsigned count, 2475f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez struct pipe_surface **resources); 2485f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez 249a52c0416d1f2105960b4646e2e268aed26814689Brian Paul void (*set_vertex_buffers)( struct pipe_context *, 250a52c0416d1f2105960b4646e2e268aed26814689Brian Paul unsigned num_buffers, 251a52c0416d1f2105960b4646e2e268aed26814689Brian Paul const struct pipe_vertex_buffer * ); 25263a51aee86f76ae54fb1ce572d584fb0f01aaec5Brian 253c5e9d3114a80d6d35a2f4e65783cdc75fcc2deacChia-I Wu void (*set_index_buffer)( struct pipe_context *pipe, 254c5e9d3114a80d6d35a2f4e65783cdc75fcc2deacChia-I Wu const struct pipe_index_buffer * ); 255c5e9d3114a80d6d35a2f4e65783cdc75fcc2deacChia-I Wu 256861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák /*@}*/ 257861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák 258861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák /** 259861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák * Stream output functions. 260861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák */ 261861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák /*@{*/ 262861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák 263861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák struct pipe_stream_output_target *(*create_stream_output_target)( 264861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák struct pipe_context *, 265861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák struct pipe_resource *, 266861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák unsigned buffer_offset, 267861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák unsigned buffer_size); 268861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák 269861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák void (*stream_output_target_destroy)(struct pipe_context *, 270861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák struct pipe_stream_output_target *); 271861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák 272861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák void (*set_stream_output_targets)(struct pipe_context *, 273861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák unsigned num_targets, 274861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák struct pipe_stream_output_target **targets, 275861a029ddb31e91bb4d8e18ab708d0d172f63aadMarek Olšák unsigned append_bitmask); 276a45b7f47ee0e38b288cc8fc4f6a1c013e8c227bcZack Rusin 27737da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@}*/ 27863a51aee86f76ae54fb1ce572d584fb0f01aaec5Brian 27963a51aee86f76ae54fb1ce572d584fb0f01aaec5Brian 28037da2d685102ab5a706e0634fc55c60229598faaBrian Paul /** 281aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * Resource functions for blit-like functionality 282bb567357bc1366df7115e0daa68c2470e3bf6ba6Corbin Simpson * 283aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * If a driver supports multisampling, resource_resolve must be available. 28411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer */ 28537da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@{*/ 28692d3b2a4da914a64bf0de4be4843a8524b1a8af6Brian Paul 28792d3b2a4da914a64bf0de4be4843a8524b1a8af6Brian Paul /** 288aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * Copy a block of pixels from one resource to another. 289aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * The resource must be of the same format. 290aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * Resources with nr_samples > 1 are not allowed. 29192d3b2a4da914a64bf0de4be4843a8524b1a8af6Brian Paul */ 292aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger void (*resource_copy_region)(struct pipe_context *pipe, 293aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger struct pipe_resource *dst, 2944c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned dst_level, 295aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger unsigned dstx, unsigned dsty, unsigned dstz, 296aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger struct pipe_resource *src, 2974c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned src_level, 2984c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_box *src_box); 29911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 30092d3b2a4da914a64bf0de4be4843a8524b1a8af6Brian Paul /** 301aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger * Resolve a multisampled resource into a non-multisampled one. 30294822c6d83b7811db2a02bb4416df02ae225ba47Christoph Bumiller * Source and destination must be of the same format. 303aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger */ 304aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger void (*resource_resolve)(struct pipe_context *pipe, 30594822c6d83b7811db2a02bb4416df02ae225ba47Christoph Bumiller const struct pipe_resolve_info *info); 306aac2cccccfd701ae8d7ce0813c28c64498d4a076Roland Scheidegger 30737da2d685102ab5a706e0634fc55c60229598faaBrian Paul /*@}*/ 308f3aa4de034b0d791ce2e38e8aeb3b3abdb4e3b50Keith Whitwell 309eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer /** 310eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer * Clear the specified set of currently bound buffers to specified values. 3111c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul * The entire buffers are cleared (no scissor, no colormask, etc). 312eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer * 3131c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul * \param buffers bitfield of PIPE_CLEAR_* values. 3146dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie * \param color pointer to a union of fiu array for each of r, g, b, a. 3151c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul * \param depth depth clear value in [0,1]. 3161c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul * \param stencil stencil clear value 317eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer */ 318eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer void (*clear)(struct pipe_context *pipe, 319eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer unsigned buffers, 3206dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 321eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer double depth, 3220cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger unsigned stencil); 3230cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger 3240cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger /** 3250cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger * Clear a color rendertarget surface. 3266dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie * \param color pointer to an union of fiu array for each of r, g, b, a. 3270cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger */ 328a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger void (*clear_render_target)(struct pipe_context *pipe, 329a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger struct pipe_surface *dst, 3306dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 331a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned dstx, unsigned dsty, 332a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned width, unsigned height); 3330cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger 3340cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger /** 3350cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger * Clear a depth-stencil surface. 3360cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger * \param clear_flags bitfield of PIPE_CLEAR_DEPTH/STENCIL values. 3370cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger * \param depth depth clear value in [0,1]. 3380cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger * \param stencil stencil clear value 3390cd70b554cb0bb9280f83fddf4f1451fddd37230Roland Scheidegger */ 340a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger void (*clear_depth_stencil)(struct pipe_context *pipe, 341a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger struct pipe_surface *dst, 342a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned clear_flags, 343a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger double depth, 344a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned stencil, 345a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned dstx, unsigned dsty, 346a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger unsigned width, unsigned height); 34737da2d685102ab5a706e0634fc55c60229598faaBrian Paul 3487e02303497237cde958c28608477d0c355a8038bMarek Olšák /** Flush draw commands 3491c1ee1176d889ff5ff0a41af9ad385c4532322a3Brian Paul */ 35093d5cfd8b7c641c5656aed38ad2f9559e09502f0Keith Whitwell void (*flush)( struct pipe_context *pipe, 3514abe1eb980ed76d2b2d3383eaab520d0aa2ae6f4Michel Dänzer struct pipe_fence_handle **fence ); 3529b75627fab5bf2ea90f27ddd31b60c54895f6de6Thomas Hellstrom 3539b75627fab5bf2ea90f27ddd31b60c54895f6de6Thomas Hellstrom /** 354f6106566081978f663cf08e54bb8908cb58a5316Michal Krol * Create a view on a texture to be used by a shader stage. 355f6106566081978f663cf08e54bb8908cb58a5316Michal Krol */ 356f6106566081978f663cf08e54bb8908cb58a5316Michal Krol struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx, 357287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *texture, 358f6106566081978f663cf08e54bb8908cb58a5316Michal Krol const struct pipe_sampler_view *templat); 359f6106566081978f663cf08e54bb8908cb58a5316Michal Krol 360f6106566081978f663cf08e54bb8908cb58a5316Michal Krol void (*sampler_view_destroy)(struct pipe_context *ctx, 361f6106566081978f663cf08e54bb8908cb58a5316Michal Krol struct pipe_sampler_view *view); 362b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 363b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 364b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell /** 3654c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger * Get a surface which is a "view" into a resource, used by 3664c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger * render target / depth stencil stages. 3674c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger * \param usage bitmaks of PIPE_BIND_* flags 3684c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger */ 3694c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_surface *(*create_surface)(struct pipe_context *ctx, 3704c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *resource, 3714c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_surface *templat); 3724c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger 3734c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger void (*surface_destroy)(struct pipe_context *ctx, 3744c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_surface *); 3754c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger 3764c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger /** 377b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell * Get a transfer object for transferring data to/from a texture. 378b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell * 379b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell * Transfers are (by default) context-private and allow uploads to be 380b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell * interleaved with 381b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell */ 382287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_transfer *(*get_transfer)(struct pipe_context *, 3834c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *resource, 3844c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 3854c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned usage, /* a combination of PIPE_TRANSFER_x */ 3864c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_box *); 387287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 388287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell void (*transfer_destroy)(struct pipe_context *, 3894c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_transfer *); 3904c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger 391b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell void *(*transfer_map)( struct pipe_context *, 392b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell struct pipe_transfer *transfer ); 393b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 394287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the 395287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * regions specified with this call are guaranteed to be written to 396287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * the resource. 397287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell */ 398287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell void (*transfer_flush_region)( struct pipe_context *, 399287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_transfer *transfer, 400287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell const struct pipe_box *); 401287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 402b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell void (*transfer_unmap)( struct pipe_context *, 403b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell struct pipe_transfer *transfer ); 404b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 405b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 406287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell /* One-shot transfer operation with data supplied in a user 407287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * pointer. XXX: strides?? 408287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell */ 409287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell void (*transfer_inline_write)( struct pipe_context *, 4104c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *, 4114c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 4124c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned usage, /* a combination of PIPE_TRANSFER_x */ 4134c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_box *, 4144c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const void *data, 4154c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned stride, 4164c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned layer_stride); 417287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 418aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák /** 419aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák * Flush any pending framebuffer writes and invalidate texture caches. 420aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák */ 421aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák void (*texture_barrier)(struct pipe_context *); 4224e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König 4234e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König /** 424ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König * Creates a video decoder for a specific video codec/profile 425ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König */ 426ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König struct pipe_video_decoder *(*create_video_decoder)( struct pipe_context *context, 427ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König enum pipe_video_profile profile, 428ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König enum pipe_video_entrypoint entrypoint, 429ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König enum pipe_video_chroma_format chroma_format, 4308c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König unsigned width, unsigned height, unsigned max_references, 4318c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König bool expect_chunked_decode); 432ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König 433ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König /** 4344e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König * Creates a video buffer as decoding target 4354e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König */ 4364e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König struct pipe_video_buffer *(*create_video_buffer)( struct pipe_context *context, 437e027759336bf49e3f568bd73b9e5f26d56ef6f83Christian König const struct pipe_video_buffer *templat ); 438d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez 439d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /** 440d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Compute kernel execution 441d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez */ 442d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /*@{*/ 443d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /** 444d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Define the compute program and parameters to be used by 445d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * pipe_context::launch_grid. 446d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez */ 447d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void *(*create_compute_state)(struct pipe_context *context, 448d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez const struct pipe_compute_state *); 449d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*bind_compute_state)(struct pipe_context *, void *); 450d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*delete_compute_state)(struct pipe_context *, void *); 451d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez 452d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /** 4535f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * Bind an array of shader resources that will be used by the 4545f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * compute program. Any resources that were previously bound to 4555f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * the specified range will be unbound after this call. 4565f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * 4575f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param first first resource to bind. 4585f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param count number of consecutive resources to bind. 4595f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * \param resources array of pointers to the resources to bind, it 4605f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * should contain at least \a count elements 4615f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * unless it's NULL, in which case no new 4625f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez * resources will be bound. 4635f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez */ 4645f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez void (*set_compute_resources)(struct pipe_context *, 4655f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez unsigned start, unsigned count, 4665f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez struct pipe_surface **resources); 4675f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez 4685f55cbc7d93c6568566893f9345e43fff311a32bFrancisco Jerez /** 469d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Bind an array of buffers to be mapped into the address space of 470d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * the GLOBAL resource. Any buffers that were previously bound 471d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * between [first, first + count - 1] are unbound after this call. 472d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * 473d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \param first first buffer to map. 474d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \param count number of consecutive buffers to map. 475d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \param resources array of pointers to the buffers to map, it 476d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * should contain at least \a count elements 477d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * unless it's NULL, in which case no new 478d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * resources will be bound. 479d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \param handles array of pointers to the memory locations that 480d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * will be filled with the respective base 481d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * addresses each buffer will be mapped to. It 482d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * should contain at least \a count elements, 483d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * unless \a resources is NULL in which case \a 484d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * handles should be NULL as well. 485d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * 486d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Note that the driver isn't required to make any guarantees about 487d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * the contents of the \a handles array being valid anytime except 488d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * during the subsequent calls to pipe_context::launch_grid. This 489d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * means that the only sensible location handles[i] may point to is 490d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * somewhere within the INPUT buffer itself. This is so to 491d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * accommodate implementations that lack virtual memory but 492d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * nevertheless migrate buffers on the fly, leading to resource 493d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * base addresses that change on each kernel invocation or are 494d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * unknown to the pipe driver. 495d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez */ 496d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*set_global_binding)(struct pipe_context *context, 497d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez unsigned first, unsigned count, 498d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez struct pipe_resource **resources, 499d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez uint32_t **handles); 500d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez 501d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /** 502d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Launch the compute kernel starting from instruction \a pc of the 503d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * currently bound compute program. 504d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * 505d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \a grid_layout and \a block_layout are arrays of size \a 506d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * PIPE_COMPUTE_CAP_GRID_DIMENSION that determine the layout of the 507d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * grid (in block units) and working block (in thread units) to be 508d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * used, respectively. 509d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * 510d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * \a input will be used to initialize the INPUT resource, and it 511d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * should point to a buffer of at least 512d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * pipe_compute_state::req_input_mem bytes. 513d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez */ 514d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez void (*launch_grid)(struct pipe_context *context, 515d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez const uint *block_layout, const uint *grid_layout, 516d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez uint32_t pc, const void *input); 517d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez /*@}*/ 5188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}; 5198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 520e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca 521e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca#ifdef __cplusplus 522e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca} 523e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca#endif 524e4e30089231831339815cccebf3a3a0ea6dcd2a9José Fonseca 5252f245bce420c7a6c6928c4927d0f9a5701cde17fBrian#endif /* PIPE_CONTEXT_H */ 526