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