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