On 01/05/2014 01:26 PM, Axel Davy wrote: > This may require changes to the driconf gui. > > Signed-off-by: Axel Davy <axel.d...@ens.fr> > --- > src/mesa/drivers/dri/common/xmlconfig.c | 24 ++++++++++++++++++++++++ > src/mesa/drivers/dri/common/xmlconfig.h | 7 ++++++- > 2 files changed, 30 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/common/xmlconfig.c > b/src/mesa/drivers/dri/common/xmlconfig.c > index b95e452..c1dae20 100644 > --- a/src/mesa/drivers/dri/common/xmlconfig.c > +++ b/src/mesa/drivers/dri/common/xmlconfig.c > @@ -311,6 +311,9 @@ static GLboolean parseValue (driOptionValue *v, > driOptionType type, > case DRI_FLOAT: > v->_float = strToF (string, &tail); > break; > + case DRI_STRING: > + v->_string = strndup(string, STRING_CONF_MAXLEN); > + return GL_TRUE;
No tabs. > } > > if (tail == string) > @@ -404,6 +407,8 @@ static GLboolean checkValue (const driOptionValue *v, > const driOptionInfo *info) > v->_float <= info->ranges[i].end._float) > return GL_TRUE; > break; > + case DRI_STRING: > + break; > default: > assert (0); /* should never happen */ > } > @@ -567,6 +572,8 @@ static void parseOptInfoAttr (struct OptInfoData *data, > const XML_Char **attr) { > cache->info[opt].type = DRI_INT; > else if (!strcmp (attrVal[OA_TYPE], "float")) > cache->info[opt].type = DRI_FLOAT; > + else if (!strcmp (attrVal[OA_TYPE], "string")) > + cache->info[opt].type = DRI_STRING; > else > XML_FATAL ("illegal type in option: %s.", attrVal[OA_TYPE]); > > @@ -981,6 +988,15 @@ void driDestroyOptionInfo (driOptionCache *info) { > } > > void driDestroyOptionCache (driOptionCache *cache) { This { should be on its own line. > + if (cache->info) { > + GLuint i, size = 1 << cache->tableSize; For things that the application cannot see, just use unsigned. > + for (i = 0; i < size; ++i) { > + if (cache->info[i].type == DRI_STRING) { > + char *str = cache->values[i]._string; > + free (str); > + } > + } > + } > free(cache->values); > } > > @@ -1013,3 +1029,11 @@ GLfloat driQueryOptionf (const driOptionCache *cache, > const char *name) { > assert (cache->info[i].type == DRI_FLOAT); > return cache->values[i]._float; > } > + > +char * driQueryOptionstr (const driOptionCache *cache, const char *name) { { > + GLuint i = findOption (cache, name); unsigned > + /* make sure the option is defined and has the correct type */ > + assert (cache->info[i].name != NULL); > + assert (cache->info[i].type == DRI_STRING); > + return cache->values[i]._string; > +} > diff --git a/src/mesa/drivers/dri/common/xmlconfig.h > b/src/mesa/drivers/dri/common/xmlconfig.h > index d0ad42c..93fd3f3 100644 > --- a/src/mesa/drivers/dri/common/xmlconfig.h > +++ b/src/mesa/drivers/dri/common/xmlconfig.h > @@ -30,9 +30,11 @@ > #ifndef __XMLCONFIG_H > #define __XMLCONFIG_H > > +#define STRING_CONF_MAXLEN 25 > + > /** \brief Option data types */ > typedef enum driOptionType { > - DRI_BOOL, DRI_ENUM, DRI_INT, DRI_FLOAT > + DRI_BOOL, DRI_ENUM, DRI_INT, DRI_FLOAT, DRI_STRING > } driOptionType; > > /** \brief Option value */ > @@ -40,6 +42,7 @@ typedef union driOptionValue { > GLboolean _bool; /**< \brief Boolean */ > GLint _int; /**< \brief Integer or Enum */ > GLfloat _float; /**< \brief Floating-point */ > + char* _string; /**< \brief String */ > } driOptionValue; > > /** \brief Single range of valid values > @@ -118,5 +121,7 @@ GLboolean driQueryOptionb (const driOptionCache *cache, > const char *name); > GLint driQueryOptioni (const driOptionCache *cache, const char *name); > /** \brief Query a floating-point option value */ > GLfloat driQueryOptionf (const driOptionCache *cache, const char *name); > +/** \brief Query a string option value */ > +char* driQueryOptionstr (const driOptionCache *cache, const char *name); > > #endif > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev