mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
DRI2: add config query extension
Add a new DRI2 configuration query extension. Allows for DRI2 client code to query for common DRI2 configuration options.
This commit is contained in:
parent
c059565054
commit
234286c0f8
9 changed files with 78 additions and 1 deletions
|
|
@ -812,4 +812,18 @@ struct __DRIimageLookupExtensionRec {
|
|||
void *loaderPrivate);
|
||||
};
|
||||
|
||||
/**
|
||||
* This extension allows for common DRI2 options
|
||||
*/
|
||||
#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY"
|
||||
#define __DRI2_CONFIG_QUERY_VERSION 1
|
||||
|
||||
typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension;
|
||||
struct __DRI2configQueryExtensionRec {
|
||||
__DRIextension base;
|
||||
|
||||
int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val);
|
||||
int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val);
|
||||
int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val);
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -403,6 +403,11 @@ dri2BindExtensions(__GLXscreenConfigs *psc)
|
|||
/* internal driver extension, no GL extension exposed */
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __DRI2_CONFIG_QUERY
|
||||
if ((strcmp(extensions[i]->name, __DRI2_CONFIG_QUERY) == 0))
|
||||
psc->config = (__DRI2configQueryExtension *) extensions[i];
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -549,6 +549,10 @@ struct __GLXscreenConfigsRec
|
|||
const __DRI2flushExtension *f;
|
||||
#endif
|
||||
|
||||
#ifdef __DRI2_CONFIG_QUERY
|
||||
const __DRI2configQueryExtension *config;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -467,6 +467,41 @@ dri2CreateNewDrawable(__DRIscreen *screen,
|
|||
return pdraw;
|
||||
}
|
||||
|
||||
static int
|
||||
dri2ConfigQueryb(__DRIscreen *screen, const char *var, GLboolean *val)
|
||||
{
|
||||
if (!driCheckOption(&screen->optionCache, var, DRI_BOOL))
|
||||
return -1;
|
||||
|
||||
*val = driQueryOptionb(&screen->optionCache, var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dri2ConfigQueryi(__DRIscreen *screen, const char *var, GLint *val)
|
||||
{
|
||||
if (!driCheckOption(&screen->optionCache, var, DRI_INT) &&
|
||||
!driCheckOption(&screen->optionCache, var, DRI_ENUM))
|
||||
return -1;
|
||||
|
||||
*val = driQueryOptioni(&screen->optionCache, var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dri2ConfigQueryf(__DRIscreen *screen, const char *var, GLfloat *val)
|
||||
{
|
||||
if (!driCheckOption(&screen->optionCache, var, DRI_FLOAT))
|
||||
return -1;
|
||||
|
||||
*val = driQueryOptionf(&screen->optionCache, var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void dri_get_drawable(__DRIdrawable *pdp)
|
||||
{
|
||||
pdp->refcount++;
|
||||
|
|
@ -739,6 +774,7 @@ dri2CreateNewScreen(int scrn, int fd,
|
|||
static const __DRIextension *emptyExtensionList[] = { NULL };
|
||||
__DRIscreen *psp;
|
||||
drmVersionPtr version;
|
||||
driOptionCache options;
|
||||
|
||||
if (driDriverAPI.InitScreen2 == NULL)
|
||||
return NULL;
|
||||
|
|
@ -771,6 +807,9 @@ dri2CreateNewScreen(int scrn, int fd,
|
|||
|
||||
psp->DriverAPI = driDriverAPI;
|
||||
|
||||
driParseOptionInfo(&options, __dri2ConfigOptions, __dri2NConfigOptions);
|
||||
driParseConfigFiles(&psp->optionCache, &options, psp->myNum, "dri2");
|
||||
|
||||
return psp;
|
||||
}
|
||||
|
||||
|
|
@ -813,6 +852,13 @@ const __DRIdri2Extension driDRI2Extension = {
|
|||
dri2CreateNewContext,
|
||||
};
|
||||
|
||||
const __DRI2configQueryExtension dri2ConfigQueryExtension = {
|
||||
{ __DRI2_CONFIG_QUERY, __DRI2_CONFIG_QUERY_VERSION },
|
||||
dri2ConfigQueryb,
|
||||
dri2ConfigQueryi,
|
||||
dri2ConfigQueryf,
|
||||
};
|
||||
|
||||
static int
|
||||
driFrameTracking(__DRIdrawable *drawable, GLboolean enable)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#include <drm.h>
|
||||
#include <drm_sarea.h>
|
||||
#include <xf86drm.h>
|
||||
#include "xmlconfig.h"
|
||||
#include "main/glheader.h"
|
||||
#include "GL/internal/glcore.h"
|
||||
#include "GL/internal/dri_interface.h"
|
||||
|
|
@ -70,6 +71,7 @@ extern const __DRIcopySubBufferExtension driCopySubBufferExtension;
|
|||
extern const __DRIswapControlExtension driSwapControlExtension;
|
||||
extern const __DRIframeTrackingExtension driFrameTrackingExtension;
|
||||
extern const __DRImediaStreamCounterExtension driMediaStreamCounterExtension;
|
||||
extern const __DRI2configQueryExtension dri2ConfigQueryExtension;
|
||||
|
||||
/**
|
||||
* Used by DRI_VALIDATE_DRAWABLE_INFO
|
||||
|
|
@ -527,6 +529,8 @@ struct __DRIscreenRec {
|
|||
|
||||
/* The lock actually in use, old sarea or DRI2 */
|
||||
drmLock *lock;
|
||||
|
||||
driOptionCache optionCache;
|
||||
};
|
||||
|
||||
extern void
|
||||
|
|
|
|||
|
|
@ -225,6 +225,7 @@ static const __DRIextension *intelScreenExtensions[] = {
|
|||
&intelTexBufferExtension.base,
|
||||
&intelFlushExtension.base,
|
||||
&intelImageExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -236,6 +236,7 @@ static const struct __DRItexBufferExtensionRec nouveau_texbuffer_extension = {
|
|||
static const __DRIextension *nouveau_screen_extensions[] = {
|
||||
&nouveau_flush_extension.base,
|
||||
&nouveau_texbuffer_extension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1235,6 +1235,8 @@ radeonCreateScreen( __DRIscreen *sPriv )
|
|||
screen->extensions[i++] = &r600texOffsetExtension.base;
|
||||
#endif
|
||||
|
||||
screen->extensions[i++] = &dri2ConfigQueryExtension.base;
|
||||
|
||||
screen->extensions[i++] = NULL;
|
||||
sPriv->extensions = screen->extensions;
|
||||
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ typedef struct radeon_screen {
|
|||
/* Configuration cache with default values for all contexts */
|
||||
driOptionCache optionCache;
|
||||
|
||||
const __DRIextension *extensions[16];
|
||||
const __DRIextension *extensions[17];
|
||||
|
||||
int num_gb_pipes;
|
||||
int num_z_pipes;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue