Browse Source

DRI2: add config query extension

Add a new DRI2 configuration query extension.  Allows for DRI2 client
code to query for common DRI2 configuration options.
tags/mesa-7.9-rc1
Jesse Barnes 15 years ago
parent
commit
234286c0f8

+ 14
- 0
include/GL/internal/dri_interface.h View File

@@ -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

+ 5
- 0
src/glx/dri_common.c View File

@@ -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
}
}


+ 4
- 0
src/glx/glxclient.h View File

@@ -549,6 +549,10 @@ struct __GLXscreenConfigsRec
const __DRI2flushExtension *f;
#endif

#ifdef __DRI2_CONFIG_QUERY
const __DRI2configQueryExtension *config;
#endif

#endif

/**

+ 46
- 0
src/mesa/drivers/dri/common/dri_util.c View File

@@ -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)
{

+ 4
- 0
src/mesa/drivers/dri/common/dri_util.h View File

@@ -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

+ 1
- 0
src/mesa/drivers/dri/intel/intel_screen.c View File

@@ -225,6 +225,7 @@ static const __DRIextension *intelScreenExtensions[] = {
&intelTexBufferExtension.base,
&intelFlushExtension.base,
&intelImageExtension.base,
&dri2ConfigQueryExtension.base,
NULL
};


+ 1
- 0
src/mesa/drivers/dri/nouveau/nouveau_screen.c View File

@@ -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
};


+ 2
- 0
src/mesa/drivers/dri/radeon/radeon_screen.c View File

@@ -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;


+ 1
- 1
src/mesa/drivers/dri/radeon/radeon_screen.h View File

@@ -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…
Cancel
Save