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 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @file 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Abstract graphics pipe state objects. 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Basic notes: 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1. Want compact representations, so we use bitfields. 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2. Put bitfields before other (GLfloat) fields. 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PIPE_STATE_H 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_STATE_H 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_compiler.h" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_defines.h" 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_format.h" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Implementation limits 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_ATTRIBS 32 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_CLIP_PLANES 8 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_COLOR_BUFS 8 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_CONSTANT_BUFFERS 32 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SAMPLERS 16 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SHADER_INPUTS 32 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SHADER_OUTPUTS 48 /* 32 GENERICs + POS, PSIZE, FOG, etc. */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SHADER_SAMPLER_VIEWS 32 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SHADER_RESOURCES 32 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_TEXTURE_LEVELS 16 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_MAX_SO_BUFFERS 4 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_reference 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int32_t count; /* atomic */ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Primitive (point/line/tri) rasterization info 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_rasterizer_state 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned flatshade:1; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned light_twoside:1; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clamp_vertex_color:1; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clamp_fragment_color:1; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned front_ccw:1; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned cull_face:2; /**< PIPE_FACE_x */ 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fill_front:2; /**< PIPE_POLYGON_MODE_x */ 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fill_back:2; /**< PIPE_POLYGON_MODE_x */ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset_point:1; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset_line:1; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset_tri:1; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned scissor:1; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned poly_smooth:1; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned poly_stipple_enable:1; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned point_smooth:1; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sprite_coord_mode:1; /**< PIPE_SPRITE_COORD_ */ 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned point_quad_rasterization:1; /** points rasterized as quads or points */ 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned point_size_per_vertex:1; /**< size computed in vertex shader */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned multisample:1; /* XXX maybe more ms state in future */ 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned line_smooth:1; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned line_stipple_enable:1; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned line_last_pixel:1; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use the first vertex of a primitive as the provoking vertex for 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * flat shading. 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned flatshade_first:1; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When true, triangle rasterization uses (0.5, 0.5) pixel centers 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for determining pixel ownership. 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When false, triangle rasterization uses (0,0) pixel centers for 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * determining pixel ownership. 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Triangle rasterization always uses a 'top,left' rule for pixel 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ownership, this just alters which point we consider the pixel 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * center for that test. 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned gl_rasterization_rules:1; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When true, rasterization is disabled and no pixels are written. 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This only makes sense with the Stream Out functionality. 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned rasterizer_discard:1; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When false, depth clipping is disabled and the depth value will be 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * clamped later at the per-pixel level before depth testing. 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This depends on PIPE_CAP_DEPTH_CLIP_DISABLE. 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned depth_clip:1; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable bits for clipping half-spaces. 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This applies to both user clip planes and shader clip distances. 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that if the bound shader exports any clip distances, these 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * replace all user clip planes, and clip half-spaces enabled here 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * but not written by the shader count as disabled. 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clip_plane_enable:PIPE_MAX_CLIP_PLANES; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned line_stipple_factor:8; /**< [1..256] actually */ 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned line_stipple_pattern:16; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sprite_coord_enable; /* bitfield referring to 32 GENERIC inputs */ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float line_width; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float point_size; /**< used when no per-vertex size */ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float offset_units; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float offset_scale; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float offset_clamp; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_poly_stipple 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stipple[32]; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_viewport_state 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float scale[4]; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float translate[4]; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_scissor_state 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned minx:16; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned miny:16; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxx:16; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxy:16; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_clip_state 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float ucp[PIPE_MAX_CLIP_PLANES][4]; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stream output for vertex transform feedback. 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_info 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_outputs; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** stride for an entire vertex for each buffer in dwords */ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride[PIPE_MAX_SO_BUFFERS]; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Array of stream outputs, in the order they are to be written in. 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Selected components are tightly packed into the output buffer. 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned register_index:8; /**< 0 to PIPE_MAX_SHADER_OUTPUTS */ 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start_component:2; /** 0 to 3 */ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_components:3; /** 1 to 4 */ 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned output_buffer:3; /**< 0 to PIPE_MAX_SO_BUFFERS */ 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dst_offset:16; /**< offset into the buffer in dwords */ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } output[PIPE_MAX_SHADER_OUTPUTS]; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_shader_state 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_token *tokens; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_info stream_output; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_depth_state 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned enabled:1; /**< depth test enabled? */ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writemask:1; /**< allow depth buffer writes? */ 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned func:3; /**< depth test func (PIPE_FUNC_x) */ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stencil_state 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned enabled:1; /**< stencil[0]: stencil enabled, stencil[1]: two-side enabled */ 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned func:3; /**< PIPE_FUNC_x */ 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fail_op:3; /**< PIPE_STENCIL_OP_x */ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned zpass_op:3; /**< PIPE_STENCIL_OP_x */ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned zfail_op:3; /**< PIPE_STENCIL_OP_x */ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned valuemask:8; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writemask:8; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_alpha_state 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned enabled:1; 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned func:3; /**< PIPE_FUNC_x */ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float ref_value; /**< reference value */ 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_depth_stencil_alpha_state 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_depth_state depth; 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stencil_state stencil[2]; /**< [0] = front, [1] = back */ 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_alpha_state alpha; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_rt_blend_state 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned blend_enable:1; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned rgb_func:3; /**< PIPE_BLEND_x */ 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned rgb_src_factor:5; /**< PIPE_BLENDFACTOR_x */ 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned rgb_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned alpha_func:3; /**< PIPE_BLEND_x */ 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned alpha_src_factor:5; /**< PIPE_BLENDFACTOR_x */ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned alpha_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned colormask:4; /**< bitmask of PIPE_MASK_R/G/B/A */ 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_state 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned independent_blend_enable:1; 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned logicop_enable:1; 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned logicop_func:4; /**< PIPE_LOGICOP_x */ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dither:1; 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned alpha_to_coverage:1; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned alpha_to_one:1; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_rt_blend_state rt[PIPE_MAX_COLOR_BUFS]; 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_color 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float color[4]; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stencil_ref 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ubyte ref_value[2]; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_framebuffer_state 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, height; 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** multiple color buffers for multiple render targets */ 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_cbufs; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *cbufs[PIPE_MAX_COLOR_BUFS]; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *zsbuf; /**< Z/stencil buffer */ 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture sampler state. 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_state 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_s:3; /**< PIPE_TEX_WRAP_x */ 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_t:3; /**< PIPE_TEX_WRAP_x */ 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_r:3; /**< PIPE_TEX_WRAP_x */ 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_img_filter:2; /**< PIPE_TEX_FILTER_x */ 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_mip_filter:2; /**< PIPE_TEX_MIPFILTER_x */ 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mag_img_filter:2; /**< PIPE_TEX_FILTER_x */ 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned compare_mode:1; /**< PIPE_TEX_COMPARE_x */ 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned compare_func:3; /**< PIPE_FUNC_x */ 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned normalized_coords:1; /**< Are coords normalized to [0,1]? */ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned max_anisotropy:6; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned seamless_cube_map:1; 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float lod_bias; /**< LOD/lambda bias */ 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float min_lod, max_lod; /**< LOD clamp range, after bias */ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union pipe_color_union border_color; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A view into a texture that can be bound to a color render target / 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * depth stencil attachment point. 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_reference reference; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *texture; /**< resource into which this is a view */ 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context; /**< context this surface belongs to */ 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX width/height should be removed */ 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width; /**< logical width in pixels */ 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned height; /**< logical height in pixels */ 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage; /**< bitmask of PIPE_BIND_x */ 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writable:1; /**< writable shader resource */ 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level; 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first_layer:16; 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_layer:16; 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } tex; 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first_element; 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_element; 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } buf; 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } u; 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A view into a texture that can be bound to a shader stage. 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_view 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_reference reference; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; /**< typed PIPE_FORMAT_x */ 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *texture; /**< texture into which this is a view */ 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context; /**< context this view belongs to */ 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first_layer:16; /**< first layer to use for array textures */ 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_layer:16; /**< last layer to use for array textures */ 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first_level:8; /**< first mipmap level to use */ 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_level:8; /**< last mipmap level to use */ 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } tex; 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first_element; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_element; 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } buf; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } u; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_r:3; /**< PIPE_SWIZZLE_x for red component */ 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_g:3; /**< PIPE_SWIZZLE_x for green component */ 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_b:3; /**< PIPE_SWIZZLE_x for blue component */ 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_a:3; /**< PIPE_SWIZZLE_x for alpha component */ 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Subregion of 1D/2D/3D image resource. 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_box 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x; 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int y; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int z; 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width; 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int height; 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int depth; 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A memory object/resource such as a vertex buffer or texture. 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_reference reference; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_screen *screen; /**< screen that this texture belongs to */ 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_texture_target target; /**< PIPE_TEXTURE_x */ 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; /**< PIPE_FORMAT_x */ 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width0; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned height0; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned depth0; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned array_size; 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last_level:8; /**< Index of last mipmap level present/defined */ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_samples:8; /**< for multisampled surfaces, nr of samples */ 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage:8; /**< PIPE_USAGE_x (not a bitmask) */ 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned bind; /**< bitmask of PIPE_BIND_x */ 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned flags; /**< bitmask of PIPE_RESOURCE_FLAG_x */ 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Transfer object. For data transfer to/from a resource. 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_transfer 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource; /**< resource to transfer to/from */ 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level; /**< texture mipmap level */ 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_transfer_usage usage; 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_box box; /**< region of the resource to access */ 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride; /**< row stride in bytes */ 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned layer_stride; /**< image/layer stride in bytes */ 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *data; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A vertex buffer. Typically, all the vertex data/attributes for 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * drawing something will be in one buffer. But it's also possible, for 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * example, to put colors in one buffer and texcoords in another. 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_buffer 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride; /**< stride to same attrib in next vertex, in bytes */ 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *buffer; /**< the actual buffer */ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */ 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A constant buffer. A subrange of an existing buffer can be set 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * as a constant buffer. 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_constant_buffer { 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *buffer; /**< the actual buffer */ 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_size; /**< how much data can be read in shader */ 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */ 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A stream output target. The structure specifies the range vertices can 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be written to. 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In addition to that, the structure should internally maintain the offset 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * into the buffer, which should be incremented everytime something is written 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (appended) to it. The internal offset is buffer_offset + how many bytes 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * have been written. The internal offset can be stored on the device 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and the CPU actually doesn't have to query it. 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use PIPE_QUERY_SO_STATISTICS to know how many primitives have 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * actually been written. 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_target 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_reference reference; 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *buffer; /**< the output buffer */ 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context; /**< context this SO target belongs to */ 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_offset; /**< offset where data should be written, in bytes */ 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffer_size; /**< how much data is allowed to be written */ 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Information to describe a vertex attribute (position, color, etc) 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_element 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset of this attribute, in bytes, from the start of the vertex */ 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned src_offset; 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Instance data rate divisor. 0 means this is per-vertex data, 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * n means per-instance data used for n consecutive instances (n > 0). 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned instance_divisor; 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Which vertex_buffer (as given to pipe->set_vertex_buffer()) does 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this attribute live in? 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned vertex_buffer_index; 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format src_format; 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An index buffer. When an index buffer is bound, all indices to vertices 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * will be looked up in the buffer. 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_index_buffer 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index_size; /**< size of an index, in bytes */ 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset; /**< offset to start of data in buffer, in bytes */ 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *buffer; /**< the actual buffer */ 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */ 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Information to describe a draw_vbo call. 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_draw_info 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean indexed; /**< use index buffer */ 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mode; /**< the mode of the primitive */ 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start; /**< the index of the first vertex */ 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned count; /**< number of vertices */ 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start_instance; /**< first instance id */ 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned instance_count; /**< number of instances */ 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For indexed drawing, these fields apply after index lookup. 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index_bias; /**< a bias to be added to each index */ 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_index; /**< the min index */ 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned max_index; /**< the max index */ 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Primitive restart enable/index (only applies to indexed drawing) 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean primitive_restart; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned restart_index; 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stream output target. If not NULL, it's used to provide the 'count' 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * parameter based on the number vertices captured by the stream output 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stage. (or generally, based on the number of bytes captured) 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Only 'mode', 'start_instance', and 'instance_count' are taken into 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * account, all the other variables from pipe_draw_info are ignored. 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 'start' is implicitly 0 and 'count' is set as discussed above. 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The draw command is non-indexed. 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that this only provides the count. The vertex buffers must 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be set via set_vertex_buffers manually. 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_stream_output_target *count_from_stream_output; 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Information to describe a resource_resolve call. 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resolve_info 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *res; 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level; 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned layer; 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x0; /**< always left */ 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int y0; /**< always top */ 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x1; /**< determines scale if PIPE_CAP_SCALED_RESOLVE is supported */ 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int y1; /**< determines scale if PIPE_CAP_SCALED_RESOLVE is supported */ 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } dst; 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *res; 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned layer; 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x0; 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int y0; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x1; /**< may be < x0 only if PIPE_CAP_SCALED_RESOLVE is supported */ 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int y1; /**< may be < y1 even if PIPE_CAP_SCALED_RESOLVE not supported */ 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } src; 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mask; /**< PIPE_MASK_RGBA, Z, S or ZS */ 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Structure used as a header for serialized LLVM programs. 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_llvm_program_header 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t num_bytes; /**< Number of bytes in the LLVM bytecode program. */ 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_compute_state 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *prog; /**< Compute program to be executed. */ 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned req_local_mem; /**< Required size of the LOCAL resource. */ 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned req_private_mem; /**< Required size of the PRIVATE resource. */ 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned req_input_mem; /**< Required size of the INPUT resource. */ 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 615