2022-11-28 12:50:59 -08:00
|
|
|
/*
|
2024-03-24 08:59:34 -04:00
|
|
|
* Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
|
|
|
|
|
* Copyright 2007-2008 Red Hat, Inc.
|
|
|
|
|
* (C) Copyright IBM Corporation 2004
|
|
|
|
|
* All Rights Reserved.
|
2022-11-28 12:50:59 -08:00
|
|
|
* Copyright © 2022 Google LLC
|
|
|
|
|
*
|
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
|
|
|
* to deal in the Software without restriction, including without limitation
|
|
|
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
|
|
|
*
|
|
|
|
|
* The above copyright notice and this permission notice (including the next
|
|
|
|
|
* paragraph) shall be included in all copies or substantial portions of the
|
|
|
|
|
* Software.
|
|
|
|
|
*
|
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
|
|
|
* IN THE SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef MESA_INTERFACE_H
|
|
|
|
|
#define MESA_INTERFACE_H
|
|
|
|
|
|
2024-03-24 08:59:34 -04:00
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_screen;
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_context;
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_drawable;
|
2024-10-21 02:19:46 -04:00
|
|
|
struct dri_config;
|
2024-10-21 02:24:36 -04:00
|
|
|
struct dri_image;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extension struct. Drivers 'inherit' from this struct by embedding
|
|
|
|
|
* it as the first element in the extension struct.
|
|
|
|
|
*
|
|
|
|
|
* We never break API in for a DRI extension. If we need to change
|
|
|
|
|
* the way things work in a non-backwards compatible manner, we
|
|
|
|
|
* introduce a new extension. During a transition period, we can
|
|
|
|
|
* leave both the old and the new extension in the driver, which
|
|
|
|
|
* allows us to move to the new interface without having to update the
|
|
|
|
|
* loader(s) in lock step.
|
|
|
|
|
*
|
|
|
|
|
* However, we can add entry points to an extension over time as long
|
|
|
|
|
* as we don't break the old ones. As we add entry points to an
|
|
|
|
|
* extension, we increase the version number. The corresponding
|
|
|
|
|
* #define can be used to guard code that accesses the new entry
|
|
|
|
|
* points at compile time and the version field in the extension
|
|
|
|
|
* struct can be used at run-time to determine how to use the
|
|
|
|
|
* extension.
|
|
|
|
|
*/
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
const char *name;
|
|
|
|
|
int version;
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIextension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The first set of extension are the screen extensions, returned by
|
|
|
|
|
* __DRIcore::getExtensions(). This entry point will return a list of
|
|
|
|
|
* extensions and the loader can use the ones it knows about by
|
|
|
|
|
* casting them to more specific extensions and advertising any GLX
|
|
|
|
|
* extensions the DRI extensions enables.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* Valid values for format in the setTexBuffer2 function below. These
|
|
|
|
|
* values match the GLX tokens for compatibility reasons, but we
|
|
|
|
|
* define them here since the DRI interface can't depend on GLX. */
|
|
|
|
|
#define __DRI_TEXTURE_FORMAT_RGB 0x20D9
|
|
|
|
|
#define __DRI_TEXTURE_FORMAT_RGBA 0x20DA
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used by drivers that implement DRI2. Version 3 is used by the X server.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI2_FLUSH_DRAWABLE (1 << 0) /* the drawable should be flushed. */
|
|
|
|
|
#define __DRI2_FLUSH_CONTEXT (1 << 1) /* glFlush should be called */
|
|
|
|
|
#define __DRI2_FLUSH_INVALIDATE_ANCILLARY (1 << 2)
|
|
|
|
|
|
|
|
|
|
enum __DRI2throttleReason {
|
|
|
|
|
__DRI2_THROTTLE_SWAPBUFFER,
|
|
|
|
|
__DRI2_THROTTLE_COPYSUBBUFFER,
|
|
|
|
|
__DRI2_THROTTLE_FLUSHFRONT,
|
|
|
|
|
__DRI2_NOTHROTTLE_SWAPBUFFER,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extension for EGL_ANDROID_blob_cache
|
|
|
|
|
* *
|
|
|
|
|
* Not used by the X server.
|
|
|
|
|
*/
|
|
|
|
|
typedef void
|
|
|
|
|
(*__DRIblobCacheSet) (const void *key, signed long keySize,
|
|
|
|
|
const void *value, signed long valueSize);
|
|
|
|
|
|
|
|
|
|
typedef signed long
|
|
|
|
|
(*__DRIblobCacheGet) (const void *key, signed long keySize,
|
|
|
|
|
void *value, signed long valueSize);
|
|
|
|
|
|
|
|
|
|
#define __DRI2_FENCE_FLAG_FLUSH_COMMANDS (1 << 0)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \name Capabilities that might be returned by __DRI2fenceExtensionRec::get_capabilities
|
|
|
|
|
*/
|
|
|
|
|
/*@{*/
|
|
|
|
|
#define __DRI_FENCE_CAP_NATIVE_FD 1
|
|
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The following extensions describe loader features that the DRI
|
|
|
|
|
* driver can make use of. Some of these are mandatory, such as the
|
|
|
|
|
* getDrawableInfo extension for DRI and the DRI Loader extensions for
|
|
|
|
|
* DRI2, while others are optional, and if present allow the driver to
|
|
|
|
|
* expose certain features. The loader pass in a NULL terminated
|
|
|
|
|
* array of these extensions to the driver in the createNewScreen
|
|
|
|
|
* constructor.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __DRI_SWRAST_IMAGE_OP_DRAW 1
|
|
|
|
|
#define __DRI_SWRAST_IMAGE_OP_SWAP 3
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SWRast Loader extension.
|
|
|
|
|
*
|
|
|
|
|
* Version 1 is advertised by the X server.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Drawable position and size
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*getDrawableInfo)(struct dri_drawable *drawable,
|
2024-03-24 08:59:34 -04:00
|
|
|
int *x, int *y, int *width, int *height,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put image to drawable
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*putImage)(struct dri_drawable *drawable, int op,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height,
|
|
|
|
|
char *data, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get image from readable
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*getImage)(struct dri_drawable *readable,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height,
|
|
|
|
|
char *data, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put image to drawable
|
|
|
|
|
*
|
|
|
|
|
* \since 2
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*putImage2)(struct dri_drawable *drawable, int op,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height, int stride,
|
|
|
|
|
char *data, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put image to drawable
|
|
|
|
|
*
|
|
|
|
|
* \since 3
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*getImage2)(struct dri_drawable *readable,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height, int stride,
|
|
|
|
|
char *data, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put shm image to drawable
|
|
|
|
|
*
|
|
|
|
|
* \since 4
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*putImageShm)(struct dri_drawable *drawable, int op,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height, int stride,
|
|
|
|
|
int shmid, char *shmaddr, unsigned offset,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
/**
|
|
|
|
|
* Get shm image from readable
|
|
|
|
|
*
|
|
|
|
|
* \since 4
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*getImageShm)(struct dri_drawable *readable,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height,
|
|
|
|
|
int shmid, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put shm image to drawable (v2)
|
|
|
|
|
*
|
|
|
|
|
* The original version fixes srcx/y to 0, and expected
|
|
|
|
|
* the offset to be adjusted. This version allows src x,y
|
|
|
|
|
* to not be included in the offset. This is needed to
|
|
|
|
|
* avoid certain overflow checks in the X server, that
|
|
|
|
|
* result in lost rendering.
|
|
|
|
|
*
|
|
|
|
|
* \since 5
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*putImageShm2)(struct dri_drawable *drawable, int op,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y,
|
|
|
|
|
int width, int height, int stride,
|
|
|
|
|
int shmid, char *shmaddr, unsigned offset,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* get shm image to drawable (v2)
|
|
|
|
|
*
|
|
|
|
|
* There are some cases where GLX can't use SHM, but DRI
|
|
|
|
|
* still tries, we need to get a return type for when to
|
|
|
|
|
* fallback to the non-shm path.
|
|
|
|
|
*
|
|
|
|
|
* \since 6
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
unsigned char (*getImageShm2)(struct dri_drawable *readable,
|
2024-03-24 08:59:34 -04:00
|
|
|
int x, int y, int width, int height,
|
|
|
|
|
int shmid, void *loaderPrivate);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIswrastLoaderExtension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
2024-10-21 02:19:46 -04:00
|
|
|
* Tokens for struct dri_config attribs. A number of attributes defined by
|
2024-03-24 08:59:34 -04:00
|
|
|
* GLX or EGL standards are not in the table, as they must be provided
|
|
|
|
|
* by the loader. For example, FBConfig ID or visual ID, drawable type.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __DRI_ATTRIB_BUFFER_SIZE 1
|
|
|
|
|
#define __DRI_ATTRIB_LEVEL 2
|
|
|
|
|
#define __DRI_ATTRIB_RED_SIZE 3
|
|
|
|
|
#define __DRI_ATTRIB_GREEN_SIZE 4
|
|
|
|
|
#define __DRI_ATTRIB_BLUE_SIZE 5
|
|
|
|
|
#define __DRI_ATTRIB_LUMINANCE_SIZE 6
|
|
|
|
|
#define __DRI_ATTRIB_ALPHA_SIZE 7
|
|
|
|
|
#define __DRI_ATTRIB_ALPHA_MASK_SIZE 8
|
|
|
|
|
#define __DRI_ATTRIB_DEPTH_SIZE 9
|
|
|
|
|
#define __DRI_ATTRIB_STENCIL_SIZE 10
|
|
|
|
|
#define __DRI_ATTRIB_ACCUM_RED_SIZE 11
|
|
|
|
|
#define __DRI_ATTRIB_ACCUM_GREEN_SIZE 12
|
|
|
|
|
#define __DRI_ATTRIB_ACCUM_BLUE_SIZE 13
|
|
|
|
|
#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE 14
|
|
|
|
|
#define __DRI_ATTRIB_SAMPLE_BUFFERS 15
|
|
|
|
|
#define __DRI_ATTRIB_SAMPLES 16
|
|
|
|
|
#define __DRI_ATTRIB_RENDER_TYPE 17
|
|
|
|
|
#define __DRI_ATTRIB_CONFIG_CAVEAT 18
|
|
|
|
|
#define __DRI_ATTRIB_CONFORMANT 19
|
|
|
|
|
#define __DRI_ATTRIB_DOUBLE_BUFFER 20
|
|
|
|
|
#define __DRI_ATTRIB_STEREO 21
|
|
|
|
|
#define __DRI_ATTRIB_AUX_BUFFERS 22
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_TYPE 23
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE 24
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE 26
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE 27
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE 28
|
|
|
|
|
#define __DRI_ATTRIB_FLOAT_MODE 29
|
|
|
|
|
#define __DRI_ATTRIB_RED_MASK 30
|
|
|
|
|
#define __DRI_ATTRIB_GREEN_MASK 31
|
|
|
|
|
#define __DRI_ATTRIB_BLUE_MASK 32
|
|
|
|
|
#define __DRI_ATTRIB_ALPHA_MASK 33
|
|
|
|
|
#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH 34
|
|
|
|
|
#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT 35
|
|
|
|
|
#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS 36
|
|
|
|
|
#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37
|
|
|
|
|
#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT 38
|
|
|
|
|
#define __DRI_ATTRIB_VISUAL_SELECT_GROUP 39
|
|
|
|
|
#define __DRI_ATTRIB_SWAP_METHOD 40 // Parsed by the X server when our visuals return it as an attrib.
|
|
|
|
|
#define __DRI_ATTRIB_MAX_SWAP_INTERVAL 41
|
|
|
|
|
#define __DRI_ATTRIB_MIN_SWAP_INTERVAL 42
|
|
|
|
|
#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB 43
|
|
|
|
|
#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA 44
|
|
|
|
|
#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE 45
|
|
|
|
|
#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS 46
|
|
|
|
|
#define __DRI_ATTRIB_YINVERTED 47
|
|
|
|
|
#define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE 48
|
|
|
|
|
#define __DRI_ATTRIB_MUTABLE_RENDER_BUFFER 49 /* EGL_MUTABLE_RENDER_BUFFER_BIT_KHR */
|
|
|
|
|
#define __DRI_ATTRIB_RED_SHIFT 50
|
|
|
|
|
#define __DRI_ATTRIB_GREEN_SHIFT 51
|
|
|
|
|
#define __DRI_ATTRIB_BLUE_SHIFT 52
|
|
|
|
|
#define __DRI_ATTRIB_ALPHA_SHIFT 53
|
|
|
|
|
#define __DRI_ATTRIB_MAX 54
|
|
|
|
|
|
|
|
|
|
/* __DRI_ATTRIB_RENDER_TYPE */
|
|
|
|
|
#define __DRI_ATTRIB_RGBA_BIT 0x01
|
|
|
|
|
#define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02
|
|
|
|
|
#define __DRI_ATTRIB_LUMINANCE_BIT 0x04
|
|
|
|
|
#define __DRI_ATTRIB_FLOAT_BIT 0x08
|
|
|
|
|
#define __DRI_ATTRIB_UNSIGNED_FLOAT_BIT 0x10
|
|
|
|
|
|
|
|
|
|
/* __DRI_ATTRIB_CONFIG_CAVEAT */
|
|
|
|
|
#define __DRI_ATTRIB_SLOW_BIT 0x01
|
|
|
|
|
#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02
|
|
|
|
|
|
|
|
|
|
/* __DRI_ATTRIB_TRANSPARENT_TYPE */
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_RGB 0x00
|
|
|
|
|
#define __DRI_ATTRIB_TRANSPARENT_INDEX 0x01
|
|
|
|
|
|
|
|
|
|
/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */
|
|
|
|
|
#define __DRI_ATTRIB_TEXTURE_1D_BIT 0x01
|
|
|
|
|
#define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02
|
|
|
|
|
#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04
|
|
|
|
|
|
|
|
|
|
/* __DRI_ATTRIB_SWAP_METHOD */
|
|
|
|
|
/* Note that with the exception of __DRI_ATTRIB_SWAP_NONE, we need to define
|
|
|
|
|
* the same tokens as GLX. This is because old and current X servers will
|
|
|
|
|
* transmit the driconf value grabbed from the AIGLX driver untranslated as
|
|
|
|
|
* the GLX fbconfig value. These defines are kept for X Server suorce compatibility,
|
|
|
|
|
* since Mesa no longer exposes GLX_OML_swap_method.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_ATTRIB_SWAP_UNDEFINED 0x8063
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This extension defines the core DRI functionality. It was introduced when
|
|
|
|
|
* DRI2 and AIGLX were added.
|
|
|
|
|
*
|
|
|
|
|
* Version >= 2 indicates that getConfigAttrib with __DRI_ATTRIB_SWAP_METHOD
|
|
|
|
|
* returns a reliable value. The X server requires v1 and uses v2.
|
|
|
|
|
*/
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/* Not used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_screen *(*createNewScreen)(int screen, int fd,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int sarea_handle,
|
|
|
|
|
const __DRIextension **extensions,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config ***driverConfigs,
|
2024-03-24 08:59:34 -04:00
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*destroyScreen)(struct dri_screen *screen);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
const __DRIextension **(*getExtensions)(struct dri_screen *screen);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Not used by the X server. */
|
2024-10-21 02:19:46 -04:00
|
|
|
int (*getConfigAttrib)(const struct dri_config *config,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int attrib,
|
|
|
|
|
unsigned int *value);
|
|
|
|
|
|
|
|
|
|
/* Not used by the X server. */
|
2024-10-21 02:19:46 -04:00
|
|
|
int (*indexConfigAttrib)(const struct dri_config *config, int index,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int *attrib, unsigned int *value);
|
|
|
|
|
|
|
|
|
|
/* Not used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_drawable *(*createNewDrawable)(struct dri_screen *screen,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config *config,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int drawable_id,
|
|
|
|
|
unsigned int head,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/* Used by the X server */
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*destroyDrawable)(struct dri_drawable *drawable);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Used by the X server in swrast mode. */
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*swapBuffers)(struct dri_drawable *drawable);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Used by the X server in swrast mode. */
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_context *(*createNewContext)(struct dri_screen *screen,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config *config,
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_context *shared,
|
2024-03-24 08:59:34 -04:00
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/* Used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
int (*copyContext)(struct dri_context *dest,
|
|
|
|
|
struct dri_context *src,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned long mask);
|
|
|
|
|
|
|
|
|
|
/* Used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*destroyContext)(struct dri_context *context);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
int (*bindContext)(struct dri_context *ctx,
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_drawable *pdraw,
|
|
|
|
|
struct dri_drawable *pread);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Used by the X server. */
|
2024-10-21 01:47:24 -04:00
|
|
|
int (*unbindContext)(struct dri_context *ctx);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*swapBuffersWithDamage)(struct dri_drawable *drawable, int nrects, const int *rects);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIcoreExtension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/** Common DRI function definitions, shared among DRI2 and Image extensions
|
|
|
|
|
*/
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
typedef struct dri_screen *
|
2024-03-24 08:59:34 -04:00
|
|
|
(*__DRIcreateNewScreen2Func)(int screen, int fd,
|
|
|
|
|
const __DRIextension **extensions,
|
|
|
|
|
const __DRIextension **driver_extensions,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config ***driver_configs,
|
2024-03-24 08:59:34 -04:00
|
|
|
void *loaderPrivate);
|
2024-10-21 01:47:24 -04:00
|
|
|
typedef struct dri_screen *
|
2024-03-24 08:59:34 -04:00
|
|
|
(*__DRIcreateNewScreen3Func)(int screen, int fd,
|
|
|
|
|
const __DRIextension **extensions,
|
|
|
|
|
const __DRIextension **driver_extensions,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config ***driver_configs,
|
2024-03-24 08:59:34 -04:00
|
|
|
bool implicit,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
typedef struct dri_drawable *
|
2024-10-21 01:47:24 -04:00
|
|
|
(*__DRIcreateNewDrawableFunc)(struct dri_screen *screen,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config *config,
|
2024-03-24 08:59:34 -04:00
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
typedef struct dri_context *
|
2024-10-21 01:47:24 -04:00
|
|
|
(*__DRIcreateContextAttribsFunc)(struct dri_screen *screen,
|
2024-03-24 08:59:34 -04:00
|
|
|
int api,
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config *config,
|
2024-10-21 01:47:24 -04:00
|
|
|
struct dri_context *shared,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned num_attribs,
|
|
|
|
|
const uint32_t *attribs,
|
|
|
|
|
unsigned *error,
|
|
|
|
|
void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
typedef unsigned int
|
2024-10-21 01:47:24 -04:00
|
|
|
(*__DRIgetAPIMaskFunc)(struct dri_screen *screen);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DRI2 Loader extension.
|
2025-04-16 20:02:09 +02:00
|
|
|
*
|
|
|
|
|
* These definitions are shared with xcb/dri2.h.
|
|
|
|
|
* Changing these definitions would break DRI2.
|
2024-03-24 08:59:34 -04:00
|
|
|
*/
|
|
|
|
|
#define __DRI_BUFFER_FRONT_LEFT 0
|
|
|
|
|
#define __DRI_BUFFER_BACK_LEFT 1
|
|
|
|
|
#define __DRI_BUFFER_FRONT_RIGHT 2
|
|
|
|
|
#define __DRI_BUFFER_BACK_RIGHT 3
|
|
|
|
|
#define __DRI_BUFFER_DEPTH 4
|
|
|
|
|
#define __DRI_BUFFER_STENCIL 5
|
2025-04-16 20:02:09 +02:00
|
|
|
#define __DRI_BUFFER_ACCUM 6
|
|
|
|
|
#define __DRI_BUFFER_FAKE_FRONT_LEFT 7
|
|
|
|
|
#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8
|
|
|
|
|
#define __DRI_BUFFER_DEPTH_STENCIL 9 /**< Only available with DRI2 1.1 */
|
|
|
|
|
#define __DRI_BUFFER_HIZ 10
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Inofficial and for internal use. Increase when adding a new buffer token. */
|
2025-04-16 20:02:09 +02:00
|
|
|
#define __DRI_BUFFER_COUNT 11
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/* Used by the X server. */
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int attachment;
|
|
|
|
|
unsigned int name;
|
|
|
|
|
unsigned int pitch;
|
|
|
|
|
unsigned int cpp;
|
|
|
|
|
unsigned int flags;
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIbuffer;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
enum dri_loader_cap {
|
|
|
|
|
/* Whether the loader handles RGBA channel ordering correctly. If not,
|
|
|
|
|
* only BGRA ordering can be exposed.
|
|
|
|
|
*/
|
|
|
|
|
DRI_LOADER_CAP_RGBA_ORDERING,
|
|
|
|
|
DRI_LOADER_CAP_FP16,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This extension provides alternative screen, drawable and context
|
|
|
|
|
* constructors for DRI2. The X server uses up to version 4.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */
|
|
|
|
|
#define __DRI_API_GLES 1 /**< OpenGL ES 1.x */
|
|
|
|
|
#define __DRI_API_GLES2 2 /**< OpenGL ES 2.x */
|
|
|
|
|
#define __DRI_API_OPENGL_CORE 3 /**< OpenGL 3.2+ core profile */
|
|
|
|
|
#define __DRI_API_GLES3 4 /**< OpenGL ES 3.x */
|
|
|
|
|
|
|
|
|
|
#define __DRI_CTX_ATTRIB_MAJOR_VERSION 0
|
|
|
|
|
#define __DRI_CTX_ATTRIB_MINOR_VERSION 1
|
|
|
|
|
|
|
|
|
|
/* These must alias the GLX/EGL values. */
|
|
|
|
|
#define __DRI_CTX_ATTRIB_FLAGS 2
|
|
|
|
|
#define __DRI_CTX_FLAG_DEBUG 0x00000001
|
|
|
|
|
#define __DRI_CTX_FLAG_FORWARD_COMPATIBLE 0x00000002
|
|
|
|
|
#define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004
|
|
|
|
|
/* Not yet implemented but placed here to reserve the alias with GLX */
|
|
|
|
|
#define __DRI_CTX_FLAG_RESET_ISOLATION 0x00000008
|
|
|
|
|
|
|
|
|
|
#define __DRI_CTX_ATTRIB_RESET_STRATEGY 3
|
|
|
|
|
#define __DRI_CTX_RESET_NO_NOTIFICATION 0
|
|
|
|
|
#define __DRI_CTX_RESET_LOSE_CONTEXT 1
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \name Context priority levels.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_CTX_ATTRIB_PRIORITY 4
|
|
|
|
|
#define __DRI_CTX_PRIORITY_LOW 0
|
|
|
|
|
#define __DRI_CTX_PRIORITY_MEDIUM 1
|
|
|
|
|
#define __DRI_CTX_PRIORITY_HIGH 2
|
2024-09-03 13:23:19 +02:00
|
|
|
#define __DRI_CTX_PRIORITY_REALTIME 3
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
#define __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR 5
|
|
|
|
|
#define __DRI_CTX_RELEASE_BEHAVIOR_NONE 0
|
|
|
|
|
#define __DRI_CTX_RELEASE_BEHAVIOR_FLUSH 1
|
|
|
|
|
|
|
|
|
|
#define __DRI_CTX_ATTRIB_NO_ERROR 6
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \requires __DRI2_RENDER_HAS_PROTECTED_CONTEXT.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_CTX_ATTRIB_PROTECTED 7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define __DRI_CTX_NUM_ATTRIBS 8
|
|
|
|
|
|
|
|
|
|
/**
|
2024-10-21 01:28:30 -04:00
|
|
|
* \name Reasons that createContextAttribs might fail
|
2024-03-24 08:59:34 -04:00
|
|
|
*/
|
|
|
|
|
/*@{*/
|
|
|
|
|
/** Success! */
|
|
|
|
|
#define __DRI_CTX_ERROR_SUCCESS 0
|
|
|
|
|
|
|
|
|
|
/** Memory allocation failure */
|
|
|
|
|
#define __DRI_CTX_ERROR_NO_MEMORY 1
|
|
|
|
|
|
|
|
|
|
/** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */
|
|
|
|
|
#define __DRI_CTX_ERROR_BAD_API 2
|
|
|
|
|
|
|
|
|
|
/** Client requested an API version that the driver can't do. */
|
|
|
|
|
#define __DRI_CTX_ERROR_BAD_VERSION 3
|
|
|
|
|
|
|
|
|
|
/** Client requested a flag or combination of flags the driver can't do. */
|
|
|
|
|
#define __DRI_CTX_ERROR_BAD_FLAG 4
|
|
|
|
|
|
|
|
|
|
/** Client requested an attribute the driver doesn't understand. */
|
|
|
|
|
#define __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE 5
|
|
|
|
|
|
|
|
|
|
/** Client requested a flag the driver doesn't understand. */
|
|
|
|
|
#define __DRI_CTX_ERROR_UNKNOWN_FLAG 6
|
|
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This extension provides functionality to enable various EGLImage
|
|
|
|
|
* extensions.
|
|
|
|
|
*/
|
|
|
|
|
/* __DRI_IMAGE_FORMAT_* tokens are no longer exported */
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_USE_SHARE 0x0001
|
|
|
|
|
#define __DRI_IMAGE_USE_SCANOUT 0x0002
|
|
|
|
|
#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Deprecated */
|
|
|
|
|
#define __DRI_IMAGE_USE_LINEAR 0x0008
|
|
|
|
|
/* The buffer will only be read by an external process after SwapBuffers,
|
|
|
|
|
* in contrary to gbm buffers, front buffers and fake front buffers, which
|
|
|
|
|
* could be read after a flush."
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_IMAGE_USE_BACKBUFFER 0x0010
|
|
|
|
|
#define __DRI_IMAGE_USE_PROTECTED 0x0020
|
|
|
|
|
#define __DRI_IMAGE_USE_PRIME_BUFFER 0x0040
|
|
|
|
|
#define __DRI_IMAGE_USE_FRONT_RENDERING 0x0080
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_TRANSFER_READ 0x1
|
|
|
|
|
#define __DRI_IMAGE_TRANSFER_WRITE 0x2
|
|
|
|
|
#define __DRI_IMAGE_TRANSFER_READ_WRITE \
|
|
|
|
|
(__DRI_IMAGE_TRANSFER_READ | __DRI_IMAGE_TRANSFER_WRITE)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extra fourcc formats used internally to Mesa with createImageFromNames.
|
|
|
|
|
* The externally-available fourccs are defined by drm_fourcc.h (DRM_FORMAT_*)
|
|
|
|
|
* and WL_DRM_FORMAT_* from wayland_drm.h.
|
|
|
|
|
*
|
|
|
|
|
* \since 5
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_FOURCC_SARGB8888 0x83324258
|
|
|
|
|
#define __DRI_IMAGE_FOURCC_SABGR8888 0x84324258
|
|
|
|
|
#define __DRI_IMAGE_FOURCC_SXRGB8888 0x85324258
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* queryImage attributes
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_STRIDE 0x2000
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_HANDLE 0x2001
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_NAME 0x2002
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_FORMAT 0x2003 /* available in versions 3+ */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_WIDTH 0x2004 /* available in versions 4+ */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_HEIGHT 0x2005
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_FD 0x2007 /* available in versions
|
|
|
|
|
* 7+. Each query will return a
|
|
|
|
|
* new fd. */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_MODIFIER_LOWER 0x200B /* available in versions 14 */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_MODIFIER_UPPER 0x200C /* available in versions 14 */
|
|
|
|
|
#define __DRI_IMAGE_ATTRIB_COMPRESSION_RATE 0x200D /* available in versions 22 */
|
|
|
|
|
|
|
|
|
|
enum __DRIYUVColorSpace {
|
|
|
|
|
__DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
|
|
|
|
|
__DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F,
|
|
|
|
|
__DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280,
|
|
|
|
|
__DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum __DRISampleRange {
|
|
|
|
|
__DRI_YUV_RANGE_UNDEFINED = 0,
|
|
|
|
|
__DRI_YUV_FULL_RANGE = 0x3282,
|
|
|
|
|
__DRI_YUV_NARROW_RANGE = 0x3283
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum __DRIChromaSiting {
|
|
|
|
|
__DRI_YUV_CHROMA_SITING_UNDEFINED = 0,
|
|
|
|
|
__DRI_YUV_CHROMA_SITING_0 = 0x3284,
|
|
|
|
|
__DRI_YUV_CHROMA_SITING_0_5 = 0x3285
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum __DRIFixedRateCompression {
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_NONE = 0x34B1,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_DEFAULT = 0x34B2,
|
|
|
|
|
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_1BPC = 0x34B4,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_2BPC = 0x34B5,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_3BPC = 0x34B6,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_4BPC = 0x34B7,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_5BPC = 0x34B8,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_6BPC = 0x34B9,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_7BPC = 0x34BA,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_8BPC = 0x34BB,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_9BPC = 0x34BC,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_10BPC = 0x34BD,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_11BPC = 0x34BE,
|
|
|
|
|
__DRI_FIXED_RATE_COMPRESSION_12BPC = 0x34BF,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \name Reasons that __DRIimageExtensionRec::createImageFromTexture or
|
|
|
|
|
* __DRIimageExtensionRec::createImageFromDmaBufs might fail
|
|
|
|
|
*/
|
|
|
|
|
/*@{*/
|
|
|
|
|
/** Success! */
|
|
|
|
|
#define __DRI_IMAGE_ERROR_SUCCESS 0
|
|
|
|
|
|
|
|
|
|
/** Memory allocation failure */
|
|
|
|
|
#define __DRI_IMAGE_ERROR_BAD_ALLOC 1
|
|
|
|
|
|
|
|
|
|
/** Client requested an invalid attribute */
|
|
|
|
|
#define __DRI_IMAGE_ERROR_BAD_MATCH 2
|
|
|
|
|
|
|
|
|
|
/** Client requested an invalid texture object */
|
|
|
|
|
#define __DRI_IMAGE_ERROR_BAD_PARAMETER 3
|
|
|
|
|
|
|
|
|
|
/** Client requested an invalid pitch and/or offset */
|
|
|
|
|
#define __DRI_IMAGE_ERROR_BAD_ACCESS 4
|
|
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \name Capabilities that might be returned by __DRIimageExtensionRec::getCapabilities
|
|
|
|
|
*/
|
|
|
|
|
/*@{*/
|
|
|
|
|
#define __DRI_IMAGE_CAP_GLOBAL_NAMES 1
|
|
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* blitImage flags
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __BLIT_FLAG_FLUSH 0x0001
|
|
|
|
|
#define __BLIT_FLAG_FINISH 0x0002
|
|
|
|
|
|
|
|
|
|
/**
|
2023-10-24 15:43:42 -07:00
|
|
|
* Flags for createImageFromDmaBufs
|
2024-03-24 08:59:34 -04:00
|
|
|
*/
|
|
|
|
|
#define __DRI_IMAGE_PROTECTED_CONTENT_FLAG 0x00000001
|
|
|
|
|
#define __DRI_IMAGE_PRIME_LINEAR_BUFFER 0x00000002
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* queryDmaBufFormatModifierAttribs attributes
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* Available in version 16 */
|
|
|
|
|
#define __DRI_IMAGE_FORMAT_MODIFIER_ATTRIB_PLANE_COUNT 0x0001
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This extension must be implemented by the loader and passed to the
|
|
|
|
|
* driver at screen creation time. The EGLImage entry points in the
|
|
|
|
|
* various client APIs take opaque EGLImage handles and use this
|
2024-10-21 02:24:36 -04:00
|
|
|
* extension to map them to a struct dri_image. At version 1, this
|
|
|
|
|
* extensions allows mapping EGLImage pointers to struct dri_image pointers,
|
2024-03-24 08:59:34 -04:00
|
|
|
* but future versions could support other EGLImage-like, opaque types
|
|
|
|
|
* with new lookup functions.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP"
|
|
|
|
|
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check if EGLImage is associated with the EGL display before lookup with
|
|
|
|
|
* lookupEGLImageValidated(). It will hold EGLDisplay.Mutex, so is separated
|
2023-10-11 12:21:01 -07:00
|
|
|
* out from lookupEGLImageValidated() to avoid deadlock.
|
2024-03-24 08:59:34 -04:00
|
|
|
*/
|
|
|
|
|
unsigned char (*validateEGLImage)(void *image, void *loaderPrivate);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Lookup EGLImage after validateEGLImage(). No lock in this function.
|
|
|
|
|
*/
|
2024-10-21 02:24:36 -04:00
|
|
|
struct dri_image *(*lookupEGLImageValidated)(void *image, void *loaderPrivate);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIimageLookupExtension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This extension allows for common DRI2 options
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY"
|
|
|
|
|
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
2024-10-21 01:47:24 -04:00
|
|
|
int (*configQueryb)(struct dri_screen *screen, const char *var, unsigned char *val);
|
|
|
|
|
int (*configQueryi)(struct dri_screen *screen, const char *var, int *val);
|
|
|
|
|
int (*configQueryf)(struct dri_screen *screen, const char *var, float *val);
|
|
|
|
|
int (*configQuerys)(struct dri_screen *screen, const char *var, char **val);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRI2configQueryExtension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DRI config options extension.
|
|
|
|
|
*
|
|
|
|
|
* This extension provides the XML string containing driver options for use by
|
|
|
|
|
* the loader in supporting the driconf application.
|
|
|
|
|
*
|
|
|
|
|
* v2:
|
|
|
|
|
* - Add the getXml getter function which allows the driver more flexibility in
|
|
|
|
|
* how the XML is provided.
|
|
|
|
|
* - Deprecate the direct xml pointer. It is only provided as a fallback for
|
|
|
|
|
* older versions of libGL and must not be used by clients that are aware of
|
|
|
|
|
* the newer version. Future driver versions may set it to NULL.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_CONFIG_OPTIONS "DRI_ConfigOptions"
|
|
|
|
|
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
const char *xml; /**< deprecated since v2, use getXml instead */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get an XML string that describes available driver options for use by a
|
|
|
|
|
* config application.
|
|
|
|
|
*
|
|
|
|
|
* The returned string must be heap-allocated. The caller is responsible for
|
|
|
|
|
* freeing it.
|
|
|
|
|
*/
|
|
|
|
|
char *(*getXml)(const char *driver_name);
|
|
|
|
|
} __DRIconfigOptionsExtension;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Query renderer driver extension
|
|
|
|
|
*
|
|
|
|
|
* This allows the window system layer (either EGL or GLX) to query aspects of
|
|
|
|
|
* hardware and driver support without creating a context.
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI2_RENDERER_VENDOR_ID 0x0000
|
|
|
|
|
#define __DRI2_RENDERER_DEVICE_ID 0x0001
|
|
|
|
|
#define __DRI2_RENDERER_VERSION 0x0002
|
|
|
|
|
#define __DRI2_RENDERER_ACCELERATED 0x0003
|
|
|
|
|
#define __DRI2_RENDERER_VIDEO_MEMORY 0x0004
|
|
|
|
|
#define __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE 0x0005
|
|
|
|
|
#define __DRI2_RENDERER_PREFERRED_PROFILE 0x0006
|
|
|
|
|
#define __DRI2_RENDERER_OPENGL_CORE_PROFILE_VERSION 0x0007
|
|
|
|
|
#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION 0x0008
|
|
|
|
|
#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION 0x0009
|
|
|
|
|
#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION 0x000a
|
|
|
|
|
|
|
|
|
|
#define __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE 0x000f
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Image Loader extension. Drivers use this to allocate color buffers
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* See __DRIimageLoaderExtensionRec::getBuffers::buffer_mask.
|
|
|
|
|
*/
|
|
|
|
|
enum __DRIimageBufferMask {
|
|
|
|
|
__DRI_IMAGE_BUFFER_BACK = (1 << 0),
|
|
|
|
|
__DRI_IMAGE_BUFFER_FRONT = (1 << 1),
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A buffer shared between application and compositor. The buffer may be
|
|
|
|
|
* simultaneously accessed by each.
|
|
|
|
|
*
|
|
|
|
|
* A shared buffer is equivalent to an EGLSurface whose EGLConfig contains
|
|
|
|
|
* EGL_MUTABLE_RENDER_BUFFER_BIT_KHR and whose active EGL_RENDER_BUFFER (as
|
|
|
|
|
* opposed to any pending, requested change to EGL_RENDER_BUFFER) is
|
|
|
|
|
* EGL_SINGLE_BUFFER.
|
|
|
|
|
*
|
|
|
|
|
* If buffer_mask contains __DRI_IMAGE_BUFFER_SHARED, then must contains no
|
2024-10-21 01:47:24 -04:00
|
|
|
* other bits. As a corollary, a struct dri_drawable that has a "shared" buffer
|
2024-03-24 08:59:34 -04:00
|
|
|
* has no front nor back buffer.
|
|
|
|
|
*
|
|
|
|
|
* The loader returns __DRI_IMAGE_BUFFER_SHARED in buffer_mask if and only
|
|
|
|
|
* if:
|
|
|
|
|
* - The loader supports __DRI_MUTABLE_RENDER_BUFFER_LOADER.
|
|
|
|
|
* - The driver supports __DRI_MUTABLE_RENDER_BUFFER_DRIVER.
|
|
|
|
|
* - The EGLConfig of the drawable EGLSurface contains
|
|
|
|
|
* EGL_MUTABLE_RENDER_BUFFER_BIT_KHR.
|
|
|
|
|
* - The EGLContext's EGL_RENDER_BUFFER is EGL_SINGLE_BUFFER.
|
|
|
|
|
* Equivalently, the EGLSurface's active EGL_RENDER_BUFFER (as
|
|
|
|
|
* opposed to any pending, requested change to EGL_RENDER_BUFFER) is
|
|
|
|
|
* EGL_SINGLE_BUFFER. (See the EGL 1.5 and
|
|
|
|
|
* EGL_KHR_mutable_render_buffer spec for details about "pending" vs
|
|
|
|
|
* "active" EGL_RENDER_BUFFER state).
|
|
|
|
|
*
|
|
|
|
|
* A shared buffer is similar to a front buffer in that all rendering to the
|
|
|
|
|
* buffer should appear promptly on the screen. It is different from
|
|
|
|
|
* a front buffer in that its behavior is independent from the
|
|
|
|
|
* GL_DRAW_BUFFER state. Specifically, if GL_DRAW_FRAMEBUFFER is 0 and the
|
2024-10-21 01:47:24 -04:00
|
|
|
* struct dri_drawable's buffer_mask is __DRI_IMAGE_BUFFER_SHARED, then all
|
2024-03-24 08:59:34 -04:00
|
|
|
* rendering should appear promptly on the screen if GL_DRAW_BUFFER is not
|
|
|
|
|
* GL_NONE.
|
|
|
|
|
*
|
|
|
|
|
* The difference between a shared buffer and a front buffer is motivated
|
|
|
|
|
* by the constraints of Android and OpenGL ES. OpenGL ES does not support
|
|
|
|
|
* front-buffer rendering. Android's SurfaceFlinger protocol provides the
|
|
|
|
|
* EGL driver only a back buffer and no front buffer. The shared buffer
|
|
|
|
|
* mode introduced by EGL_KHR_mutable_render_buffer is a backdoor though
|
|
|
|
|
* EGL that allows Android OpenGL ES applications to render to what is
|
|
|
|
|
* effectively the front buffer, a backdoor that required no change to the
|
|
|
|
|
* OpenGL ES API and little change to the SurfaceFlinger API.
|
|
|
|
|
*/
|
|
|
|
|
__DRI_IMAGE_BUFFER_SHARED = (1 << 2),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct __DRIimageList {
|
|
|
|
|
uint32_t image_mask;
|
2024-10-21 02:24:36 -04:00
|
|
|
struct dri_image *back;
|
|
|
|
|
struct dri_image *front;
|
2024-03-24 08:59:34 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define __DRI_IMAGE_LOADER "DRI_IMAGE_LOADER"
|
|
|
|
|
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Allocate color buffers.
|
|
|
|
|
*
|
|
|
|
|
* \param driDrawable
|
|
|
|
|
* \param width Width of allocated buffers
|
|
|
|
|
* \param height Height of allocated buffers
|
|
|
|
|
* \param format one of __DRI_IMAGE_FORMAT_*
|
|
|
|
|
* \param stamp Address of variable to be updated when
|
|
|
|
|
* getBuffers must be called again
|
|
|
|
|
* \param loaderPrivate The loaderPrivate for driDrawable
|
|
|
|
|
* \param buffer_mask Set of buffers to allocate. A bitmask of
|
|
|
|
|
* __DRIimageBufferMask.
|
|
|
|
|
* \param buffers Returned buffers
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
int (*getBuffers)(struct dri_drawable *driDrawable,
|
2024-03-24 08:59:34 -04:00
|
|
|
unsigned int format,
|
|
|
|
|
uint32_t *stamp,
|
|
|
|
|
void *loaderPrivate,
|
|
|
|
|
uint32_t buffer_mask,
|
|
|
|
|
struct __DRIimageList *buffers);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Flush pending front-buffer rendering
|
|
|
|
|
*
|
|
|
|
|
* Any rendering that has been performed to the
|
|
|
|
|
* fake front will be flushed to the front
|
|
|
|
|
*
|
|
|
|
|
* \param driDrawable Drawable whose front-buffer is to be flushed
|
2024-10-21 01:28:30 -04:00
|
|
|
* \param loaderPrivate Loader's private data
|
2024-03-24 08:59:34 -04:00
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*flushFrontBuffer)(struct dri_drawable *driDrawable, void *loaderPrivate);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Return a loader capability value. If the loader doesn't know the enum,
|
|
|
|
|
* it will return 0.
|
|
|
|
|
*
|
|
|
|
|
* \since 2
|
|
|
|
|
*/
|
|
|
|
|
unsigned (*getCapability)(void *loaderPrivate, enum dri_loader_cap cap);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Flush swap buffers
|
|
|
|
|
*
|
|
|
|
|
* Make sure any outstanding swap buffers have been submitted to the
|
|
|
|
|
* device.
|
|
|
|
|
*
|
|
|
|
|
* \param driDrawable Drawable whose swaps need to be flushed
|
2024-10-21 01:28:30 -04:00
|
|
|
* \param loaderPrivate Loader's private data
|
2024-03-24 08:59:34 -04:00
|
|
|
*
|
|
|
|
|
* \since 3
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*flushSwapBuffers)(struct dri_drawable *driDrawable, void *loaderPrivate);
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Clean up any loader state associated with an image.
|
|
|
|
|
*
|
|
|
|
|
* \param loaderPrivate Loader's private data that was previously passed
|
|
|
|
|
* into a __DRIimageExtensionRec::createImage function
|
|
|
|
|
* \since 4
|
|
|
|
|
*/
|
|
|
|
|
void (*destroyLoaderImageState)(void *loaderPrivate);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRIimageLoaderExtension;
|
2024-03-24 08:59:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The loader portion of EGL_KHR_mutable_render_buffer.
|
|
|
|
|
*
|
|
|
|
|
* Requires loader extension DRI_IMAGE_LOADER, through which the loader sends
|
|
|
|
|
* __DRI_IMAGE_BUFFER_SHARED to the driver.
|
|
|
|
|
*
|
|
|
|
|
* Not used by the X server.
|
|
|
|
|
*
|
|
|
|
|
* \see __DRI_MUTABLE_RENDER_BUFFER_DRIVER
|
|
|
|
|
*/
|
|
|
|
|
#define __DRI_MUTABLE_RENDER_BUFFER_LOADER "DRI_MutableRenderBufferLoader"
|
|
|
|
|
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2024-03-24 08:59:34 -04:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Inform the display engine (that is, SurfaceFlinger and/or hwcomposer)
|
2024-10-21 01:47:24 -04:00
|
|
|
* that the struct dri_drawable has new content.
|
2024-03-24 08:59:34 -04:00
|
|
|
*
|
|
|
|
|
* The display engine may ignore this call, for example, if it continually
|
|
|
|
|
* refreshes and displays the buffer on every frame, as in
|
|
|
|
|
* EGL_ANDROID_front_buffer_auto_refresh. On the other extreme, the display
|
|
|
|
|
* engine may refresh and display the buffer only in frames in which the
|
|
|
|
|
* driver calls this.
|
|
|
|
|
*
|
|
|
|
|
* If the fence_fd is not -1, then the display engine will display the
|
|
|
|
|
* buffer only after the fence signals.
|
|
|
|
|
*
|
|
|
|
|
* The drawable's current __DRIimageBufferMask, as returned by
|
|
|
|
|
* __DRIimageLoaderExtension::getBuffers(), must be
|
|
|
|
|
* __DRI_IMAGE_BUFFER_SHARED.
|
|
|
|
|
*/
|
2024-10-21 01:47:24 -04:00
|
|
|
void (*displaySharedBuffer)(struct dri_drawable *drawable, int fence_fd,
|
2024-03-24 08:59:34 -04:00
|
|
|
void *loaderPrivate);
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRImutableRenderBufferLoaderExtension;
|
2022-11-28 12:50:59 -08:00
|
|
|
|
|
|
|
|
/* Mesa-internal interface between the GLX, GBM, and EGL DRI driver loaders, and
|
|
|
|
|
* the gallium dri_util.c code.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define __DRI_MESA "DRI_Mesa"
|
|
|
|
|
|
|
|
|
|
/** Core struct that appears alongside __DRI_CORE for Mesa-internal usage.
|
|
|
|
|
* Implemented in the top-level dri/drisw/kopper extension list.
|
|
|
|
|
*/
|
2024-10-21 02:16:29 -04:00
|
|
|
typedef struct {
|
2022-11-28 12:50:59 -08:00
|
|
|
__DRIextension base;
|
|
|
|
|
|
|
|
|
|
/* Version string for verifying that the DRI driver is from the same build as
|
|
|
|
|
* the loader.
|
|
|
|
|
*/
|
|
|
|
|
#define MESA_INTERFACE_VERSION_STRING PACKAGE_VERSION MESA_GIT_SHA1
|
|
|
|
|
const char *version_string;
|
2022-11-29 10:39:52 -08:00
|
|
|
|
2022-11-29 11:34:34 -08:00
|
|
|
|
2022-11-29 12:04:21 -08:00
|
|
|
__DRIcreateContextAttribsFunc createContext;
|
|
|
|
|
|
2022-11-29 11:34:34 -08:00
|
|
|
/* driver function for finishing initialization inside createNewScreen(). */
|
2024-10-21 02:19:46 -04:00
|
|
|
const struct dri_config **(*initScreen)(struct dri_screen *screen, bool driver_name_is_inferred);
|
2023-08-17 17:01:32 -03:00
|
|
|
|
|
|
|
|
int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd);
|
2024-03-12 10:00:54 -04:00
|
|
|
|
2024-07-25 07:23:17 -04:00
|
|
|
/* Screen creation function regardless of DRI2, image, or swrast backend.
|
|
|
|
|
* (Nothing uses the old __DRI_CORE screen create).
|
|
|
|
|
*
|
|
|
|
|
* If not associated with a DRM fd (non-swkms swrast), the fd argument should
|
|
|
|
|
* be -1.
|
|
|
|
|
*/
|
2024-03-12 10:00:54 -04:00
|
|
|
/* version 2 */
|
|
|
|
|
__DRIcreateNewScreen3Func createNewScreen3;
|
2024-10-21 02:16:29 -04:00
|
|
|
} __DRImesaCoreExtension;
|
2022-11-28 12:50:59 -08:00
|
|
|
|
|
|
|
|
#endif /* MESA_INTERFACE_H */
|