st_api.h revision 4531356817ec8383ac35932903773de67af92e37
1d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/********************************************************** 2d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Copyright 2010 VMware, Inc. All rights reserved. 3d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 4d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Permission is hereby granted, free of charge, to any person 5d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * obtaining a copy of this software and associated documentation 6d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * files (the "Software"), to deal in the Software without 7d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * restriction, including without limitation the rights to use, copy, 8d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * modify, merge, publish, distribute, sublicense, and/or sell copies 9d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * of the Software, and to permit persons to whom the Software is 10d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * furnished to do so, subject to the following conditions: 11d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 12d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The above copyright notice and this permission notice shall be 13d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * included in all copies or substantial portions of the Software. 14d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 15d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 19d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 20d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * SOFTWARE. 23d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 24d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu **********************************************************/ 25d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 26d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 27d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#ifndef _ST_API_H_ 28d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define _ST_API_H_ 29d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 30d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#include "pipe/p_compiler.h" 31d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#include "pipe/p_format.h" 32d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 33d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 34d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * \file API for communication between state trackers and state tracker 35d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * managers. 36d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 37d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * While both are state tackers, we use the term state tracker for rendering 38d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * APIs such as OpenGL or OpenVG, and state tracker manager for window system 39d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * APIs such as EGL or GLX in this file. 40d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 41d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This file defines an API to be implemented by both state trackers and state 42d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * tracker managers. 43d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 44d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 45d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 46d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The supported rendering API of a state tracker. 47d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 48d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_api_type { 49d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_API_OPENGL, 50d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_API_OPENGL_ES1, 51d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_API_OPENGL_ES2, 52d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_API_OPENVG, 53d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 54d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_API_COUNT 55d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 56d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 57d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 584531356817ec8383ac35932903773de67af92e37Chia-I Wu * The profile of a context. 594531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 604531356817ec8383ac35932903773de67af92e37Chia-I Wuenum st_profile_type 614531356817ec8383ac35932903773de67af92e37Chia-I Wu{ 624531356817ec8383ac35932903773de67af92e37Chia-I Wu ST_PROFILE_DEFAULT, 634531356817ec8383ac35932903773de67af92e37Chia-I Wu ST_PROFILE_OPENGL_CORE, 644531356817ec8383ac35932903773de67af92e37Chia-I Wu ST_PROFILE_OPENGL_ES1, 654531356817ec8383ac35932903773de67af92e37Chia-I Wu ST_PROFILE_OPENGL_ES2 664531356817ec8383ac35932903773de67af92e37Chia-I Wu}; 674531356817ec8383ac35932903773de67af92e37Chia-I Wu 684531356817ec8383ac35932903773de67af92e37Chia-I Wu/* for profile_mask in st_api */ 694531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_DEFAULT_MASK (1 << ST_PROFILE_DEFAULT) 704531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_CORE_MASK (1 << ST_PROFILE_OPENGL_CORE) 714531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_ES1_MASK (1 << ST_PROFILE_OPENGL_ES1) 724531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_ES2_MASK (1 << ST_PROFILE_OPENGL_ES2) 734531356817ec8383ac35932903773de67af92e37Chia-I Wu 744531356817ec8383ac35932903773de67af92e37Chia-I Wu/** 75d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_context_iface->teximage. 76d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 77d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_texture_type { 78d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_TEXTURE_1D, 79d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_TEXTURE_2D, 80d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_TEXTURE_3D, 81382eb1a728b30fd6a9c09842e233c9bd1f96f19bBrian Paul ST_TEXTURE_RECT 82d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 83d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 84d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 85d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Available attachments of framebuffer. 86d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 87d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_attachment_type { 88d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_FRONT_LEFT, 89d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_BACK_LEFT, 90d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_FRONT_RIGHT, 91d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_BACK_RIGHT, 92d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_DEPTH_STENCIL, 93d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_ACCUM, 94d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_SAMPLE, 95d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 96d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_COUNT, 97d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_ATTACHMENT_INVALID = -1 98d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 99d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 100d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/* for buffer_mask in st_visual */ 101d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_FRONT_LEFT_MASK (1 << ST_ATTACHMENT_FRONT_LEFT) 102d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_BACK_LEFT_MASK (1 << ST_ATTACHMENT_BACK_LEFT) 103d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_FRONT_RIGHT_MASK (1 << ST_ATTACHMENT_FRONT_RIGHT) 104d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_BACK_RIGHT_MASK (1 << ST_ATTACHMENT_BACK_RIGHT) 105d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_DEPTH_STENCIL_MASK (1 << ST_ATTACHMENT_DEPTH_STENCIL) 106d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_ACCUM_MASK (1 << ST_ATTACHMENT_ACCUM) 107d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_SAMPLE_MASK (1 << ST_ATTACHMENT_SAMPLE) 108d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 109d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 110d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Enumerations of state tracker context resources. 111d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 112d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_context_resource_type { 113d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_2D, 114d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_3D, 115d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_X, 116d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_X, 117d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Y, 118d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 119d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Z, 120d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 121d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu ST_CONTEXT_RESOURCE_OPENGL_RENDERBUFFER, 122382eb1a728b30fd6a9c09842e233c9bd1f96f19bBrian Paul ST_CONTEXT_RESOURCE_OPENVG_PARENT_IMAGE 123d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 124d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 125d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 1265f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz * Value to st_manager->get_param function. 1275f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz */ 1285f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantzenum st_manager_param { 129a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz /** 130a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz * The dri state tracker on old libGL's doesn't do the right thing 131a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz * with regards to invalidating the framebuffers. 132a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz * 133a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz * For the mesa state tracker that means that it needs to invalidate 134a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz * the framebuffer in glViewport itself. 135a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz */ 136a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz ST_MANAGER_BROKEN_INVALIDATE 1375f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz}; 1385f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz 1395f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz/** 140d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The return type of st_api->get_proc_address. 141d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 142d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wutypedef void (*st_proc_t)(void); 143d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 144d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct pipe_context; 145287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource; 146d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct pipe_fence_handle; 147d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 148d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 149d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_context_iface->get_resource_for_egl_image. 150d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 151d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_context_resource 152d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 153d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /* these fields are filled by the caller */ 154d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum st_context_resource_type type; 155d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void *resource; 156d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 157d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /* this is owned by the caller */ 158287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *texture; 159d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 160d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 161d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 162d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_manager_iface->get_egl_image. 163d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 164d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_egl_image 165d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 166d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /* this is owned by the caller */ 167287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *texture; 168d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 169d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu unsigned face; 170d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu unsigned level; 171d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu unsigned zslice; 172d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 173d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 174d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 175d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent the visual of a framebuffer. 176d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 177d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_visual 178d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 179d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 180d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Available buffers. Tested with ST_FRAMEBUFFER_*_MASK. 181d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 182d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu unsigned buffer_mask; 183d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 184d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 185d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Buffer formats. The formats are always set even when the buffer is 186d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * not available. 187d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 188d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum pipe_format color_format; 189d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum pipe_format depth_stencil_format; 190d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum pipe_format accum_format; 191d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu int samples; 192d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 193d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 194d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Desired render buffer. 195d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 196d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum st_attachment_type render_buffer; 197d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 198d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 199d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 2004531356817ec8383ac35932903773de67af92e37Chia-I Wu * Represent the attributes of a context. 2014531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 2024531356817ec8383ac35932903773de67af92e37Chia-I Wustruct st_context_attribs 2034531356817ec8383ac35932903773de67af92e37Chia-I Wu{ 2044531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 2054531356817ec8383ac35932903773de67af92e37Chia-I Wu * The profile and minimal version to support. 2064531356817ec8383ac35932903773de67af92e37Chia-I Wu * 2074531356817ec8383ac35932903773de67af92e37Chia-I Wu * The valid profiles and versions are rendering API dependent. The latest 2084531356817ec8383ac35932903773de67af92e37Chia-I Wu * version satisfying the request should be returned, unless 2094531356817ec8383ac35932903773de67af92e37Chia-I Wu * forward_compatiible is true. 2104531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 2114531356817ec8383ac35932903773de67af92e37Chia-I Wu enum st_profile_type profile; 2124531356817ec8383ac35932903773de67af92e37Chia-I Wu int major, minor; 2134531356817ec8383ac35932903773de67af92e37Chia-I Wu 2144531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 2154531356817ec8383ac35932903773de67af92e37Chia-I Wu * Enable debugging. 2164531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 2174531356817ec8383ac35932903773de67af92e37Chia-I Wu boolean debug; 2184531356817ec8383ac35932903773de67af92e37Chia-I Wu 2194531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 2204531356817ec8383ac35932903773de67af92e37Chia-I Wu * Return the exact version and disallow the use of deprecated features. 2214531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 2224531356817ec8383ac35932903773de67af92e37Chia-I Wu boolean forward_compatible; 2234531356817ec8383ac35932903773de67af92e37Chia-I Wu 2244531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 2254531356817ec8383ac35932903773de67af92e37Chia-I Wu * The visual of the framebuffers the context will be bound to. 2264531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 2274531356817ec8383ac35932903773de67af92e37Chia-I Wu struct st_visual visual; 2284531356817ec8383ac35932903773de67af92e37Chia-I Wu}; 2294531356817ec8383ac35932903773de67af92e37Chia-I Wu 2304531356817ec8383ac35932903773de67af92e37Chia-I Wu/** 231d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a windowing system drawable. 232d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 233d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The framebuffer is implemented by the state tracker manager and 234d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * used by the state trackers. 235d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 236d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Instead of the winsys pokeing into the API context to figure 237d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * out what buffers that might be needed in the future by the API 238d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * context, it calls into the framebuffer to get the textures. 239d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 240d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This structure along with the notify_invalid_framebuffer 241d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * allows framebuffers to be shared between different threads 242d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * but at the same make the API context free from thread 243d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * syncronisation primitves, with the exception of a small 244d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * atomic flag used for notification of framebuffer dirty status. 245d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 246d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The thread syncronisation is put inside the framebuffer 247d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * and only called once the framebuffer has become dirty. 248d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 249d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_framebuffer_iface 250d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 251d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 252d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Available for the state tracker manager to use. 253d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 254d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void *st_manager_private; 255d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 256d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 257d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The visual of a framebuffer. 258d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 259d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu const struct st_visual *visual; 260d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 261d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 262d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Flush the front buffer. 263d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 264d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * On some window systems, changes to the front buffers are not immediately 265d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * visible. They need to be flushed. 266d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 267d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * @att is one of the front buffer attachments. 268d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 269d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*flush_front)(struct st_framebuffer_iface *stfbi, 270d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu enum st_attachment_type statt); 271d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 272d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 273d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The state tracker asks for the textures it needs. 274d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 275d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * It should try to only ask for attachments that it currently renders 276d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * to, thus allowing the winsys to delay the allocation of textures not 277d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * needed. For example front buffer attachments are not needed if you 278d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * only do back buffer rendering. 279d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 280d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The implementor of this function needs to also ensure 281d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * thread safty as this call might be done from multiple threads. 282d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 283d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The returned textures are owned by the caller. They should be 284d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * unreferenced when no longer used. If this function is called multiple 285d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * times with different sets of attachments, those buffers not included in 286d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * the last call might be destroyed. This behavior might change in the 287d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * future. 288d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 289d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*validate)(struct st_framebuffer_iface *stfbi, 290d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu const enum st_attachment_type *statts, 291d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu unsigned count, 292287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource **out); 293d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 294d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 295d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 296d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a rendering context. 297d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 298d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This entity is created from st_api and used by the state tracker manager. 299d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 300d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_context_iface 301d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 302d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 303d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Available for the state tracker and the manager to use. 304d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 305d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void *st_context_private; 306d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void *st_manager_private; 307d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 308d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 309d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Destroy the context. 310d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 311d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void (*destroy)(struct st_context_iface *stctxi); 312d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 313d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 314d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Invalidate the current textures that was taken from a framebuffer. 315d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 316d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The state tracker manager calls this function to let the rendering 317d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * context know that it should update the textures it got from 318d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * st_framebuffer_iface::validate. It should do so at the latest time possible. 319d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Possible right before sending triangles to the pipe context. 320d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 321d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * For certain platforms this function might be called from a thread other 322d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * than the thread that the context is currently bound in, and must 323d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * therefore be thread safe. But it is the state tracker manager's 324d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * responsibility to make sure that the framebuffer is bound to the context 325d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * and the API context is current for the duration of this call. 326d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 327d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Thus reducing the sync primitive needed to a single atomic flag. 328d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 329d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void (*notify_invalid_framebuffer)(struct st_context_iface *stctxi, 330d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_framebuffer_iface *stfbi); 331d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 332d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 333d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Flush all drawing from context to the pipe also flushes the pipe. 334d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 335d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void (*flush)(struct st_context_iface *stctxi, unsigned flags, 336d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct pipe_fence_handle **fence); 337d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 338d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 339d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Replace the texture image of a texture object at the specified level. 340d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 341d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This function is optional. 342d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 343d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*teximage)(struct st_context_iface *stctxi, enum st_texture_type target, 344d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu int level, enum pipe_format internal_format, 345287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *tex, boolean mipmap); 346d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 347d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 348d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used to implement glXCopyContext. 349d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 350d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void (*copy)(struct st_context_iface *stctxi, 351d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_iface *stsrci, unsigned mask); 352d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 353d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 354d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Look up and return the info of a resource for EGLImage. 355d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 356d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This function is optional. 357d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 358d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*get_resource_for_egl_image)(struct st_context_iface *stctxi, 359d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_resource *stres); 360d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 361d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 362d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 363d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 364d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a state tracker manager. 365d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 366d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This interface is implemented by the state tracker manager. It corresponds 367d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * to a "display" in the window system. 368d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 369d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_manager 370d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 371d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct pipe_screen *screen; 372d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 373d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 374d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Look up and return the info of an EGLImage. 375d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 3764db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * This is used to implement for example EGLImageTargetTexture2DOES. 3774db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * The GLeglImageOES agrument of that call is passed directly to this 3784db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * function call and the information needed to access this is returned 3794db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * in the given struct out. 3804db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * 3814db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * @smapi: manager owning the caller context 3824db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * @stctx: caller context 3834db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * @egl_image: EGLImage that caller recived 3844db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * @out: return struct filled out with access information. 3854db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz * 386d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This function is optional. 387d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 388d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*get_egl_image)(struct st_manager *smapi, 3894db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz struct st_context_iface *stctx, 3904db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz void *egl_image, 3914db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz struct st_egl_image *out); 3925f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz 3935f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz /** 3945f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz * Query an manager param. 3955f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz */ 3965f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz int (*get_param)(struct st_manager *smapi, 3975f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz enum st_manager_param param); 398d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 399d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 400d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 401d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a rendering API such as OpenGL or OpenVG. 402d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 403d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Implemented by the state tracker and used by the state tracker manager. 404d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 405d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_api 406d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 407d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 4084531356817ec8383ac35932903773de67af92e37Chia-I Wu * The supported rendering API. 4094531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 4104531356817ec8383ac35932903773de67af92e37Chia-I Wu enum st_api_type api; 4114531356817ec8383ac35932903773de67af92e37Chia-I Wu 4124531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 4134531356817ec8383ac35932903773de67af92e37Chia-I Wu * The supported profiles. Tested with ST_PROFILE_*_MASK. 4144531356817ec8383ac35932903773de67af92e37Chia-I Wu */ 4154531356817ec8383ac35932903773de67af92e37Chia-I Wu unsigned profile_mask; 4164531356817ec8383ac35932903773de67af92e37Chia-I Wu 4174531356817ec8383ac35932903773de67af92e37Chia-I Wu /** 418d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Destroy the API. 419d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 420d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu void (*destroy)(struct st_api *stapi); 421d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 422d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 423d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Return an API entry point. 424d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 425d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * For GL this is the same as _glapi_get_proc_address. 426d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 427d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu st_proc_t (*get_proc_address)(struct st_api *stapi, const char *procname); 428d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 429d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 430d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Create a rendering context. 431d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 432d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_iface *(*create_context)(struct st_api *stapi, 433d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_manager *smapi, 4344531356817ec8383ac35932903773de67af92e37Chia-I Wu const struct st_context_attribs *attribs, 435d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_iface *stsharei); 436d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 437d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 438d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Bind the context to the calling thread with draw and read as drawables. 439d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * 4404531356817ec8383ac35932903773de67af92e37Chia-I Wu * The framebuffers might be NULL, or might have different visuals than the 4414531356817ec8383ac35932903773de67af92e37Chia-I Wu * context does. 442d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 443d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu boolean (*make_current)(struct st_api *stapi, 444d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_iface *stctxi, 445d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_framebuffer_iface *stdrawi, 446d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_framebuffer_iface *streadi); 447d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 448d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu /** 449d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Get the currently bound context in the calling thread. 450d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 451d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu struct st_context_iface *(*get_current)(struct st_api *stapi); 452d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}; 453d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 454d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/** 455d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Return true if the visual has the specified buffers. 456d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */ 457d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustatic INLINE boolean 458d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wust_visual_have_buffers(const struct st_visual *visual, unsigned mask) 459d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{ 460d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu return ((visual->buffer_mask & mask) == mask); 461d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu} 462d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 463d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/* these symbols may need to be dynamically lookup up */ 4640c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantzextern PUBLIC struct st_api * st_api_create_OpenGL(void); 4650c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantzextern PUBLIC struct st_api * st_api_create_OpenGL_ES1(void); 4660c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantzextern PUBLIC struct st_api * st_api_create_OpenGL_ES2(void); 4670c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantzextern PUBLIC struct st_api * st_api_create_OpenVG(void); 4680c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz 4690c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz/** 4700c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz * The entry points of the state trackers. 4710c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz */ 4720c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz#define ST_CREATE_OPENGL_SYMBOL "st_api_create_OpenGL" 4730c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz#define ST_CREATE_OPENGL_ES1_SYMBOL "st_api_create_OpenGL_ES1" 4740c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz#define ST_CREATE_OPENGL_ES2_SYMBOL "st_api_create_OpenGL_ES2" 4750c572c6828b6a338b07a6860280b3a314a81662eJakob Bornecrantz#define ST_CREATE_OPENVG_SYMBOL "st_api_create_OpenVG" 476d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu 477d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#endif /* _ST_API_H_ */ 478