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_OPENVG,
51d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
52d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_API_COUNT
53d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
54d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
55d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
564531356817ec8383ac35932903773de67af92e37Chia-I Wu * The profile of a context.
574531356817ec8383ac35932903773de67af92e37Chia-I Wu */
584531356817ec8383ac35932903773de67af92e37Chia-I Wuenum st_profile_type
594531356817ec8383ac35932903773de67af92e37Chia-I Wu{
60358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick   ST_PROFILE_DEFAULT,			/**< OpenGL compatibility profile */
61358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick   ST_PROFILE_OPENGL_CORE,		/**< OpenGL 3.2+ core profile */
62358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick   ST_PROFILE_OPENGL_ES1,		/**< OpenGL ES 1.x */
63358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick   ST_PROFILE_OPENGL_ES2		/**< OpenGL ES 2.0 */
644531356817ec8383ac35932903773de67af92e37Chia-I Wu};
654531356817ec8383ac35932903773de67af92e37Chia-I Wu
664531356817ec8383ac35932903773de67af92e37Chia-I Wu/* for profile_mask in st_api */
674531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_DEFAULT_MASK      (1 << ST_PROFILE_DEFAULT)
684531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_CORE_MASK  (1 << ST_PROFILE_OPENGL_CORE)
694531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_ES1_MASK   (1 << ST_PROFILE_OPENGL_ES1)
704531356817ec8383ac35932903773de67af92e37Chia-I Wu#define ST_PROFILE_OPENGL_ES2_MASK   (1 << ST_PROFILE_OPENGL_ES2)
714531356817ec8383ac35932903773de67af92e37Chia-I Wu
724531356817ec8383ac35932903773de67af92e37Chia-I Wu/**
73f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller * Optional API/state tracker features.
74f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller */
75f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumillerenum st_api_feature
76f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller{
77f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller   ST_API_FEATURE_MS_VISUALS  /**< support for multisample visuals */
78f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller};
79f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller
80f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller/* for feature_mask in st_api */
81f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller#define ST_API_FEATURE_MS_VISUALS_MASK (1 << ST_API_FEATURE_MS_VISUALS)
82f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller
83f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller/**
8438f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul * New context flags for GL 3.0 and beyond.
85358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick *
86358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick * Profile information (core vs. compatibilty for OpenGL 3.2+) is communicated
87358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick * through the \c st_profile_type, not through flags.
8838f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul */
89358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick#define ST_CONTEXT_FLAG_DEBUG               (1 << 0)
90358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick#define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE  (1 << 1)
91358ecff1ea0fa8432fd46bd3deeb8d2d694b5550Ian Romanick#define ST_CONTEXT_FLAG_ROBUST_ACCESS       (1 << 2)
9238f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul
9338f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul/**
94d18152028e1825c05c7de33acacee3336350a096Ian Romanick * Reasons that context creation might fail.
95d18152028e1825c05c7de33acacee3336350a096Ian Romanick */
96d18152028e1825c05c7de33acacee3336350a096Ian Romanickenum st_context_error {
97d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_SUCCESS = 0,
98d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_NO_MEMORY,
99d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_BAD_API,
100d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_BAD_VERSION,
101d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_BAD_FLAG,
102d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_UNKNOWN_ATTRIBUTE,
103d18152028e1825c05c7de33acacee3336350a096Ian Romanick   ST_CONTEXT_ERROR_UNKNOWN_FLAG
104d18152028e1825c05c7de33acacee3336350a096Ian Romanick};
105d18152028e1825c05c7de33acacee3336350a096Ian Romanick
106d18152028e1825c05c7de33acacee3336350a096Ian Romanick/**
107d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_context_iface->teximage.
108d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
109d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_texture_type {
110d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_TEXTURE_1D,
111d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_TEXTURE_2D,
112d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_TEXTURE_3D,
113382eb1a728b30fd6a9c09842e233c9bd1f96f19bBrian Paul   ST_TEXTURE_RECT
114d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
115d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
116d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
117d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Available attachments of framebuffer.
118d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
119d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_attachment_type {
120d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_FRONT_LEFT,
121d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_BACK_LEFT,
122d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_FRONT_RIGHT,
123d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_BACK_RIGHT,
124d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_DEPTH_STENCIL,
125d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_ACCUM,
126d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_SAMPLE,
127d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
128d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_COUNT,
129d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_ATTACHMENT_INVALID = -1
130d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
131d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
132d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/* for buffer_mask in st_visual */
133d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_FRONT_LEFT_MASK     (1 << ST_ATTACHMENT_FRONT_LEFT)
134d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_BACK_LEFT_MASK      (1 << ST_ATTACHMENT_BACK_LEFT)
135d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_FRONT_RIGHT_MASK    (1 << ST_ATTACHMENT_FRONT_RIGHT)
136d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_BACK_RIGHT_MASK     (1 << ST_ATTACHMENT_BACK_RIGHT)
137d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_DEPTH_STENCIL_MASK  (1 << ST_ATTACHMENT_DEPTH_STENCIL)
138d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_ACCUM_MASK          (1 << ST_ATTACHMENT_ACCUM)
139d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#define ST_ATTACHMENT_SAMPLE_MASK         (1 << ST_ATTACHMENT_SAMPLE)
140d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
141d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
142d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Enumerations of state tracker context resources.
143d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
144d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wuenum st_context_resource_type {
145d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_2D,
146d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_3D,
147d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_X,
148d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_X,
149d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Y,
150d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
151d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Z,
152d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
153d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   ST_CONTEXT_RESOURCE_OPENGL_RENDERBUFFER,
154382eb1a728b30fd6a9c09842e233c9bd1f96f19bBrian Paul   ST_CONTEXT_RESOURCE_OPENVG_PARENT_IMAGE
155d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
156d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
157d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
1587e02303497237cde958c28608477d0c355a8038bMarek Olšák * Flush flags.
1597e02303497237cde958c28608477d0c355a8038bMarek Olšák */
1607e02303497237cde958c28608477d0c355a8038bMarek Olšák#define ST_FLUSH_FRONT                    (1 << 0)
1617e02303497237cde958c28608477d0c355a8038bMarek Olšák
1627e02303497237cde958c28608477d0c355a8038bMarek Olšák/**
1635f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz * Value to st_manager->get_param function.
1645f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz */
1655f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantzenum st_manager_param {
166a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz   /**
167a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    * The dri state tracker on old libGL's doesn't do the right thing
168a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    * with regards to invalidating the framebuffers.
169a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    *
170a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    * For the mesa state tracker that means that it needs to invalidate
171a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    * the framebuffer in glViewport itself.
172a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz    */
173a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz   ST_MANAGER_BROKEN_INVALIDATE
1745f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz};
1755f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz
1765f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz/**
177d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The return type of st_api->get_proc_address.
178d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
179d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wutypedef void (*st_proc_t)(void);
180d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
181d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct pipe_context;
182287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource;
183d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct pipe_fence_handle;
184d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
185d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
186d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_context_iface->get_resource_for_egl_image.
187d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
188d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_context_resource
189d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
1903279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul   /* these fields are filled in by the caller */
191d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   enum st_context_resource_type type;
192d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void *resource;
193d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
194d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /* this is owned by the caller */
195287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *texture;
196d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
197d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
198d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
199d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Used in st_manager_iface->get_egl_image.
200d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
201d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_egl_image
202d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
203d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /* this is owned by the caller */
204287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *texture;
205d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
206d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   unsigned level;
2074c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   unsigned layer;
208d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
209d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
210d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
211d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent the visual of a framebuffer.
212d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
213d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_visual
214d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
215d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
216d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Available buffers.  Tested with ST_FRAMEBUFFER_*_MASK.
217d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
218d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   unsigned buffer_mask;
219d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
220d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
221d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Buffer formats.  The formats are always set even when the buffer is
222d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * not available.
223d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
224d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   enum pipe_format color_format;
225d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   enum pipe_format depth_stencil_format;
226d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   enum pipe_format accum_format;
227d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   int samples;
228d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
229d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
230d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Desired render buffer.
231d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
232d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   enum st_attachment_type render_buffer;
233d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
234d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
235a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin
236a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin/**
237a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin * Configuration options from driconf
238a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin */
239a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlinstruct st_config_options
240a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin{
241a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin	boolean force_glsl_extensions_warn;
242a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin};
243a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin
244d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
2454531356817ec8383ac35932903773de67af92e37Chia-I Wu * Represent the attributes of a context.
2464531356817ec8383ac35932903773de67af92e37Chia-I Wu */
2474531356817ec8383ac35932903773de67af92e37Chia-I Wustruct st_context_attribs
2484531356817ec8383ac35932903773de67af92e37Chia-I Wu{
2494531356817ec8383ac35932903773de67af92e37Chia-I Wu   /**
2504531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The profile and minimal version to support.
2514531356817ec8383ac35932903773de67af92e37Chia-I Wu    *
2524531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The valid profiles and versions are rendering API dependent.  The latest
25338f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul    * version satisfying the request should be returned, unless the
25438f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul    * ST_CONTEXT_FLAG_FORWARD_COMPATIBLE bit is set.
2554531356817ec8383ac35932903773de67af92e37Chia-I Wu    */
2564531356817ec8383ac35932903773de67af92e37Chia-I Wu   enum st_profile_type profile;
2574531356817ec8383ac35932903773de67af92e37Chia-I Wu   int major, minor;
2584531356817ec8383ac35932903773de67af92e37Chia-I Wu
25938f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul   /** Mask of ST_CONTEXT_FLAG_x bits */
26038f89c7008b5ed9a70439f4e6590f00a4e220b10Brian Paul   unsigned flags;
2614531356817ec8383ac35932903773de67af92e37Chia-I Wu
2624531356817ec8383ac35932903773de67af92e37Chia-I Wu   /**
2634531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The visual of the framebuffers the context will be bound to.
2644531356817ec8383ac35932903773de67af92e37Chia-I Wu    */
2654531356817ec8383ac35932903773de67af92e37Chia-I Wu   struct st_visual visual;
266a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin
267a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin   /**
268a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin    * Configuration options.
269a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin    */
270a6457c0692f1bc292ae4120ff5cd0bed340271b9Vadim Girlin   struct st_config_options options;
2714531356817ec8383ac35932903773de67af92e37Chia-I Wu};
2724531356817ec8383ac35932903773de67af92e37Chia-I Wu
2734531356817ec8383ac35932903773de67af92e37Chia-I Wu/**
274d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a windowing system drawable.
275d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
276d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * The framebuffer is implemented by the state tracker manager and
277d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * used by the state trackers.
278d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
2793279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul * Instead of the winsys poking into the API context to figure
280d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * out what buffers that might be needed in the future by the API
281d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * context, it calls into the framebuffer to get the textures.
282d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
283d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This structure along with the notify_invalid_framebuffer
284d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * allows framebuffers to be shared between different threads
285d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * but at the same make the API context free from thread
2863279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul * synchronization primitves, with the exception of a small
287d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * atomic flag used for notification of framebuffer dirty status.
288d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
2893279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul * The thread synchronization is put inside the framebuffer
290d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * and only called once the framebuffer has become dirty.
291d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
292d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_framebuffer_iface
293d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
294d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
295ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4Thomas Hellstrom    * Atomic stamp which changes when framebuffers need to be updated.
296ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4Thomas Hellstrom    */
297ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4Thomas Hellstrom   int32_t stamp;
298ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4Thomas Hellstrom
299ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4Thomas Hellstrom   /**
300d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Available for the state tracker manager to use.
301d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
302d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void *st_manager_private;
303d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
304d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
305d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * The visual of a framebuffer.
306d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
307d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   const struct st_visual *visual;
308d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
309d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
310d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Flush the front buffer.
311d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
312d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * On some window systems, changes to the front buffers are not immediately
313d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * visible.  They need to be flushed.
314d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
315d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * @att is one of the front buffer attachments.
316d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
317d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   boolean (*flush_front)(struct st_framebuffer_iface *stfbi,
318d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                          enum st_attachment_type statt);
319d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
320d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
321d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * The state tracker asks for the textures it needs.
322d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
323d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * It should try to only ask for attachments that it currently renders
324d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * to, thus allowing the winsys to delay the allocation of textures not
325d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * needed. For example front buffer attachments are not needed if you
326d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * only do back buffer rendering.
327d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
328d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * The implementor of this function needs to also ensure
329d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * thread safty as this call might be done from multiple threads.
330d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
331d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * The returned textures are owned by the caller.  They should be
332d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * unreferenced when no longer used.  If this function is called multiple
333d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * times with different sets of attachments, those buffers not included in
334d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * the last call might be destroyed.  This behavior might change in the
335d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * future.
336d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
337d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   boolean (*validate)(struct st_framebuffer_iface *stfbi,
338d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                       const enum st_attachment_type *statts,
339d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                       unsigned count,
340287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                       struct pipe_resource **out);
341d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
342d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
343d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
344d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a rendering context.
345d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
346d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This entity is created from st_api and used by the state tracker manager.
347d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
348d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_context_iface
349d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
350d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
351d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Available for the state tracker and the manager to use.
352d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
353d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void *st_context_private;
354d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void *st_manager_private;
355d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
356d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
357d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Destroy the context.
358d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
359d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void (*destroy)(struct st_context_iface *stctxi);
360d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
361d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
362d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Flush all drawing from context to the pipe also flushes the pipe.
363d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
364d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void (*flush)(struct st_context_iface *stctxi, unsigned flags,
365d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                 struct pipe_fence_handle **fence);
366d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
367d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
368d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Replace the texture image of a texture object at the specified level.
369d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
370d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * This function is optional.
371d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
3723279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul   boolean (*teximage)(struct st_context_iface *stctxi,
3733279561e9ab3a6f25215b8e857493d2b9ae6bdd9Brian Paul                       enum st_texture_type target,
374d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                       int level, enum pipe_format internal_format,
375287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                       struct pipe_resource *tex, boolean mipmap);
376d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
377d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
378d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Used to implement glXCopyContext.
379d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
380d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void (*copy)(struct st_context_iface *stctxi,
381d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                struct st_context_iface *stsrci, unsigned mask);
382d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
383d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
3844f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu    * Used to implement wglShareLists.
3854f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu    */
3864f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu   boolean (*share)(struct st_context_iface *stctxi,
3874f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu                    struct st_context_iface *stsrci);
3884f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu
3894f38dcd97410d0a58be19cb5c6dfbee51a3b7561Chia-I Wu   /**
390d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Look up and return the info of a resource for EGLImage.
391d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
392d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * This function is optional.
393d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
394d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   boolean (*get_resource_for_egl_image)(struct st_context_iface *stctxi,
395d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                                         struct st_context_resource *stres);
396d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
397d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
398d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
399d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
400d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a state tracker manager.
401d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
402d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * This interface is implemented by the state tracker manager.  It corresponds
403d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * to a "display" in the window system.
404d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
405d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_manager
406d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
407d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   struct pipe_screen *screen;
408d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
409d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
410d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Look up and return the info of an EGLImage.
411d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
4124db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * This is used to implement for example EGLImageTargetTexture2DOES.
4134db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * The GLeglImageOES agrument of that call is passed directly to this
4144db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * function call and the information needed to access this is returned
4154db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * in the given struct out.
4164db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    *
4174db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * @smapi: manager owning the caller context
4184db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * @stctx: caller context
4194db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * @egl_image: EGLImage that caller recived
4204db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    * @out: return struct filled out with access information.
4214db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz    *
422d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * This function is optional.
423d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
424d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   boolean (*get_egl_image)(struct st_manager *smapi,
4254db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz                            void *egl_image,
4264db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz                            struct st_egl_image *out);
4275f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz
4285f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz   /**
4295f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz    * Query an manager param.
4305f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz    */
4315f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz   int (*get_param)(struct st_manager *smapi,
4325f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz                    enum st_manager_param param);
433d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
434d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
435d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
436d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Represent a rendering API such as OpenGL or OpenVG.
437d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu *
438d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Implemented by the state tracker and used by the state tracker manager.
439d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
440d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustruct st_api
441d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
442d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
44328105471afce634df6c35ef14b198fe6e3684c00Chia-I Wu    * The name of the rendering API.  This is informative.
44428105471afce634df6c35ef14b198fe6e3684c00Chia-I Wu    */
44528105471afce634df6c35ef14b198fe6e3684c00Chia-I Wu   const char *name;
44628105471afce634df6c35ef14b198fe6e3684c00Chia-I Wu
44728105471afce634df6c35ef14b198fe6e3684c00Chia-I Wu   /**
4484531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The supported rendering API.
4494531356817ec8383ac35932903773de67af92e37Chia-I Wu    */
4504531356817ec8383ac35932903773de67af92e37Chia-I Wu   enum st_api_type api;
4514531356817ec8383ac35932903773de67af92e37Chia-I Wu
4524531356817ec8383ac35932903773de67af92e37Chia-I Wu   /**
4534531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The supported profiles.  Tested with ST_PROFILE_*_MASK.
4544531356817ec8383ac35932903773de67af92e37Chia-I Wu    */
4554531356817ec8383ac35932903773de67af92e37Chia-I Wu   unsigned profile_mask;
4564531356817ec8383ac35932903773de67af92e37Chia-I Wu
4574531356817ec8383ac35932903773de67af92e37Chia-I Wu   /**
458f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller    * The supported optional features.  Tested with ST_FEATURE_*_MASK.
459f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller    */
460f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller   unsigned feature_mask;
461f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller
462f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller   /**
463d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Destroy the API.
464d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
465d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   void (*destroy)(struct st_api *stapi);
466d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
467d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
468d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Return an API entry point.
469d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
470d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * For GL this is the same as _glapi_get_proc_address.
471d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
472d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   st_proc_t (*get_proc_address)(struct st_api *stapi, const char *procname);
473d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
474d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
475d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Create a rendering context.
476d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
477d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   struct st_context_iface *(*create_context)(struct st_api *stapi,
478d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                                              struct st_manager *smapi,
4794531356817ec8383ac35932903773de67af92e37Chia-I Wu                                              const struct st_context_attribs *attribs,
480d18152028e1825c05c7de33acacee3336350a096Ian Romanick                                              enum st_context_error *error,
481d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                                              struct st_context_iface *stsharei);
482d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
483d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
484d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Bind the context to the calling thread with draw and read as drawables.
485d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    *
4864531356817ec8383ac35932903773de67af92e37Chia-I Wu    * The framebuffers might be NULL, or might have different visuals than the
4874531356817ec8383ac35932903773de67af92e37Chia-I Wu    * context does.
488d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
489d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   boolean (*make_current)(struct st_api *stapi,
490d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                           struct st_context_iface *stctxi,
491d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                           struct st_framebuffer_iface *stdrawi,
492d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu                           struct st_framebuffer_iface *streadi);
493d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
494d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   /**
495d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    * Get the currently bound context in the calling thread.
496d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu    */
497d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   struct st_context_iface *(*get_current)(struct st_api *stapi);
498d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu};
499d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
500d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu/**
501d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu * Return true if the visual has the specified buffers.
502d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu */
503d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wustatic INLINE boolean
504d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wust_visual_have_buffers(const struct st_visual *visual, unsigned mask)
505d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu{
506d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu   return ((visual->buffer_mask & mask) == mask);
507d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu}
508d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu
509d2083056d56990a9bfba774d5bda272b74d27a6fChia-I Wu#endif /* _ST_API_H_ */
510