Re: [Mesa-dev] [PATCH 2/6][RFC] drirc: Add string support

2014-01-06 Thread Ian Romanick
On 01/05/2014 01:26 PM, Axel Davy wrote:
> This may require changes to the driconf gui.
> 
> Signed-off-by: Axel Davy 
> ---
>  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


[Mesa-dev] [PATCH 2/6][RFC] drirc: Add string support

2014-01-05 Thread Axel Davy
This may require changes to the driconf gui.

Signed-off-by: Axel Davy 
---
 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;
 }
 
 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) {
+if (cache->info) {
+   GLuint i, size = 1 << cache->tableSize;
+   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);
+  /* 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
-- 
1.8.3.2

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev