1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PIPE_CONTEXT_H 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_CONTEXT_H 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_compiler.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_format.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_video_enums.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_color; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_state; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_box; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_clip_state; 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_constant_buffer; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_depth_stencil_alpha_state; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_draw_info; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_fence_handle; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_framebuffer_state; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_index_buffer; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_query; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_poly_stipple; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_rasterizer_state; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resolve_info; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_state; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_view; 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_scissor_state; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_shader_state; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stencil_ref; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_target; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_buffer; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_element; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_video_buffer; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_video_decoder; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_viewport_state; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_compute_state; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion pipe_color_union; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion pipe_query_result; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Gallium rendering context. Basically: 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - state setting functions 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - VBO drawing functions 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - surface functions 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context { 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_screen *screen; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *priv; /**< context private data (for DRI for example) */ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *draw; /**< private, for draw module (temporary?) */ 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*destroy)( struct pipe_context * ); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VBO drawing 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*draw_vbo)( struct pipe_context *pipe, 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_draw_info *info ); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Predicate subsequent rendering on occlusion query result 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param query the query predicate, or NULL if no predicate 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param mode one of PIPE_RENDER_COND_x 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*render_condition)( struct pipe_context *pipe, 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *query, 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint mode ); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Query objects 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *(*create_query)( struct pipe_context *pipe, 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned query_type ); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*destroy_query)(struct pipe_context *pipe, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *q); 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*begin_query)(struct pipe_context *pipe, struct pipe_query *q); 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*end_query)(struct pipe_context *pipe, struct pipe_query *q); 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get results of a query. 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param wait if true, this query will block until the result is ready 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return TRUE if results are ready, FALSE otherwise 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean (*get_query_result)(struct pipe_context *pipe, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *q, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean wait, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union pipe_query_result *result); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * State functions (create/bind/destroy state objects) 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_blend_state)(struct pipe_context *, 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_blend_state *); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_blend_state)(struct pipe_context *, void *); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_blend_state)(struct pipe_context *, void *); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_sampler_state)(struct pipe_context *, 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_state *); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_fragment_sampler_states)(struct pipe_context *, 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_vertex_sampler_states)(struct pipe_context *, 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_geometry_sampler_states)(struct pipe_context *, 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_compute_sampler_states)(struct pipe_context *, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start_slot, 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_sampler_state)(struct pipe_context *, void *); 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_rasterizer_state)(struct pipe_context *, 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_rasterizer_state *); 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_rasterizer_state)(struct pipe_context *, void *); 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_rasterizer_state)(struct pipe_context *, void *); 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_depth_stencil_alpha_state)(struct pipe_context *, 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_depth_stencil_alpha_state *); 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_depth_stencil_alpha_state)(struct pipe_context *, void *); 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_depth_stencil_alpha_state)(struct pipe_context *, void *); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_fs_state)(struct pipe_context *, 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *); 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_fs_state)(struct pipe_context *, void *); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_fs_state)(struct pipe_context *, void *); 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_vs_state)(struct pipe_context *, 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_vs_state)(struct pipe_context *, void *); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_vs_state)(struct pipe_context *, void *); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_gs_state)(struct pipe_context *, 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_gs_state)(struct pipe_context *, void *); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_gs_state)(struct pipe_context *, void *); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void * (*create_vertex_elements_state)(struct pipe_context *, 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_elements, 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_vertex_element *); 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_vertex_elements_state)(struct pipe_context *, void *); 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_vertex_elements_state)(struct pipe_context *, void *); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Parameter-like state (or properties) 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_blend_color)( struct pipe_context *, 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_blend_color * ); 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_stencil_ref)( struct pipe_context *, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_stencil_ref * ); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_sample_mask)( struct pipe_context *, 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sample_mask ); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_clip_state)( struct pipe_context *, 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_clip_state * ); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_constant_buffer)( struct pipe_context *, 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint shader, uint index, 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_constant_buffer *buf ); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_framebuffer_state)( struct pipe_context *, 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_framebuffer_state * ); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_polygon_stipple)( struct pipe_context *, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_poly_stipple * ); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_scissor_state)( struct pipe_context *, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_scissor_state * ); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_viewport_state)( struct pipe_context *, 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_viewport_state * ); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_fragment_sampler_views)(struct pipe_context *, 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_views, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **); 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_vertex_sampler_views)(struct pipe_context *, 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_views, 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_geometry_sampler_views)(struct pipe_context *, 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_views, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_compute_sampler_views)(struct pipe_context *, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start_slot, unsigned num_views, 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **); 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bind an array of shader resources that will be used by the 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * graphics pipeline. Any resources that were previously bound to 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the specified range will be unbound after this call. 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param first first resource to bind. 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param count number of consecutive resources to bind. 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param resources array of pointers to the resources to bind, it 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * should contain at least \a count elements 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unless it's NULL, in which case no new 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * resources will be bound. 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_shader_resources)(struct pipe_context *, 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start, unsigned count, 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface **resources); 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_vertex_buffers)( struct pipe_context *, 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_buffers, 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_vertex_buffer * ); 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_index_buffer)( struct pipe_context *pipe, 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_index_buffer * ); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stream output functions. 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target *(*create_stream_output_target)( 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *, 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *, 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_offset, 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_size); 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*stream_output_target_destroy)(struct pipe_context *, 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target *); 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_stream_output_targets)(struct pipe_context *, 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_targets, 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target **targets, 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned append_bitmask); 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Resource functions for blit-like functionality 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If a driver supports multisampling, resource_resolve must be available. 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copy a block of pixels from one resource to another. 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The resource must be of the same format. 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Resources with nr_samples > 1 are not allowed. 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*resource_copy_region)(struct pipe_context *pipe, 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *dst, 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dst_level, 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, unsigned dsty, unsigned dstz, 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *src, 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned src_level, 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *src_box); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Resolve a multisampled resource into a non-multisampled one. 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Source and destination must be of the same format. 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*resource_resolve)(struct pipe_context *pipe, 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_resolve_info *info); 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Clear the specified set of currently bound buffers to specified values. 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The entire buffers are cleared (no scissor, no colormask, etc). 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param buffers bitfield of PIPE_CLEAR_* values. 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param color pointer to a union of fiu array for each of r, g, b, a. 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param depth depth clear value in [0,1]. 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param stencil stencil clear value 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*clear)(struct pipe_context *pipe, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffers, 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double depth, 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stencil); 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Clear a color rendertarget surface. 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param color pointer to an union of fiu array for each of r, g, b, a. 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*clear_render_target)(struct pipe_context *pipe, 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *dst, 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, unsigned dsty, 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, unsigned height); 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Clear a depth-stencil surface. 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param clear_flags bitfield of PIPE_CLEAR_DEPTH/STENCIL values. 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param depth depth clear value in [0,1]. 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param stencil stencil clear value 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*clear_depth_stencil)(struct pipe_context *pipe, 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *dst, 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clear_flags, 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double depth, 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stencil, 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, unsigned dsty, 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, unsigned height); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Flush draw commands 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*flush)( struct pipe_context *pipe, 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **fence ); 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a view on a texture to be used by a shader stage. 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx, 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *texture, 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_view *templat); 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*sampler_view_destroy)(struct pipe_context *ctx, 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view *view); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get a surface which is a "view" into a resource, used by 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * render target / depth stencil stages. 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param usage bitmaks of PIPE_BIND_* flags 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *(*create_surface)(struct pipe_context *ctx, 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource, 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *templat); 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*surface_destroy)(struct pipe_context *ctx, 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *); 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get a transfer object for transferring data to/from a texture. 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Transfers are (by default) context-private and allow uploads to be 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * interleaved with 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *(*get_transfer)(struct pipe_context *, 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource, 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage, /* a combination of PIPE_TRANSFER_x */ 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *); 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*transfer_destroy)(struct pipe_context *, 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *); 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *(*transfer_map)( struct pipe_context *, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer ); 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * regions specified with this call are guaranteed to be written to 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the resource. 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*transfer_flush_region)( struct pipe_context *, 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer, 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *); 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*transfer_unmap)( struct pipe_context *, 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer ); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* One-shot transfer operation with data supplied in a user 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * pointer. XXX: strides?? 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*transfer_inline_write)( struct pipe_context *, 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *, 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage, /* a combination of PIPE_TRANSFER_x */ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *, 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *data, 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride, 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned layer_stride); 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flush any pending framebuffer writes and invalidate texture caches. 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*texture_barrier)(struct pipe_context *); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Creates a video decoder for a specific video codec/profile 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_video_decoder *(*create_video_decoder)( struct pipe_context *context, 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_video_profile profile, 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_video_entrypoint entrypoint, 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_video_chroma_format chroma_format, 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, unsigned height, unsigned max_references, 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool expect_chunked_decode); 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Creates a video buffer as decoding target 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_video_buffer *(*create_video_buffer)( struct pipe_context *context, 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_video_buffer *templat ); 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Compute kernel execution 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Define the compute program and parameters to be used by 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * pipe_context::launch_grid. 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *(*create_compute_state)(struct pipe_context *context, 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_compute_state *); 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*bind_compute_state)(struct pipe_context *, void *); 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*delete_compute_state)(struct pipe_context *, void *); 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bind an array of shader resources that will be used by the 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * compute program. Any resources that were previously bound to 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the specified range will be unbound after this call. 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param first first resource to bind. 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param count number of consecutive resources to bind. 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param resources array of pointers to the resources to bind, it 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * should contain at least \a count elements 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unless it's NULL, in which case no new 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * resources will be bound. 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_compute_resources)(struct pipe_context *, 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start, unsigned count, 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface **resources); 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bind an array of buffers to be mapped into the address space of 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the GLOBAL resource. Any buffers that were previously bound 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * between [first, first + count - 1] are unbound after this call. 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param first first buffer to map. 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param count number of consecutive buffers to map. 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param resources array of pointers to the buffers to map, it 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * should contain at least \a count elements 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unless it's NULL, in which case no new 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * resources will be bound. 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param handles array of pointers to the memory locations that 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * will be filled with the respective base 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * addresses each buffer will be mapped to. It 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * should contain at least \a count elements, 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unless \a resources is NULL in which case \a 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * handles should be NULL as well. 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that the driver isn't required to make any guarantees about 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the contents of the \a handles array being valid anytime except 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * during the subsequent calls to pipe_context::launch_grid. This 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * means that the only sensible location handles[i] may point to is 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * somewhere within the INPUT buffer itself. This is so to 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * accommodate implementations that lack virtual memory but 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * nevertheless migrate buffers on the fly, leading to resource 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * base addresses that change on each kernel invocation or are 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unknown to the pipe driver. 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*set_global_binding)(struct pipe_context *context, 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first, unsigned count, 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource **resources, 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t **handles); 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Launch the compute kernel starting from instruction \a pc of the 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * currently bound compute program. 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \a grid_layout and \a block_layout are arrays of size \a 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * PIPE_COMPUTE_CAP_GRID_DIMENSION that determine the layout of the 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * grid (in block units) and working block (in thread units) to be 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * used, respectively. 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \a input will be used to initialize the INPUT resource, and it 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * should point to a buffer of at least 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * pipe_compute_state::req_input_mem bytes. 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*launch_grid)(struct pipe_context *context, 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const uint *block_layout, const uint *grid_layout, 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t pc, const void *input); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* PIPE_CONTEXT_H */ 526