diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/Android.mk | 54 | ||||
-rw-r--r-- | src/util/Makefile.am | 20 | ||||
-rw-r--r-- | src/util/Makefile.sources | 4 | ||||
-rw-r--r-- | src/util/SConscript | 16 | ||||
-rw-r--r-- | src/util/drirc | 220 | ||||
-rw-r--r-- | src/util/xmlconfig.c | 1113 | ||||
-rw-r--r-- | src/util/xmlconfig.h | 179 | ||||
-rw-r--r-- | src/util/xmlpool.h | 105 | ||||
-rw-r--r-- | src/util/xmlpool/.gitignore | 8 | ||||
-rw-r--r-- | src/util/xmlpool/Makefile.am | 101 | ||||
-rw-r--r-- | src/util/xmlpool/SConscript | 14 | ||||
-rw-r--r-- | src/util/xmlpool/ca.po | 348 | ||||
-rw-r--r-- | src/util/xmlpool/de.po | 320 | ||||
-rw-r--r-- | src/util/xmlpool/es.po | 332 | ||||
-rw-r--r-- | src/util/xmlpool/fr.po | 310 | ||||
-rw-r--r-- | src/util/xmlpool/gen_xmlpool.py | 203 | ||||
-rw-r--r-- | src/util/xmlpool/nl.po | 311 | ||||
-rw-r--r-- | src/util/xmlpool/sv.po | 309 | ||||
-rw-r--r-- | src/util/xmlpool/t_options.h | 431 |
19 files changed, 4390 insertions, 8 deletions
diff --git a/src/util/Android.mk b/src/util/Android.mk index facdcf8ed11..9015b59e452 100644 --- a/src/util/Android.mk +++ b/src/util/Android.mk @@ -31,7 +31,8 @@ include $(LOCAL_PATH)/Makefile.sources include $(CLEAR_VARS) LOCAL_SRC_FILES := \ - $(MESA_UTIL_FILES) + $(MESA_UTIL_FILES) \ + $(XMLCONFIG_FILES) LOCAL_C_INCLUDES := \ external/zlib \ @@ -47,11 +48,56 @@ LOCAL_MODULE := libmesa_util LOCAL_MODULE_CLASS := STATIC_LIBRARIES intermediates := $(call local-generated-sources-dir) -LOCAL_GENERATED_SOURCES := $(addprefix $(intermediates)/,$(MESA_UTIL_GENERATED_FILES)) +UTIL_GENERATED_SOURCES := $(addprefix $(intermediates)/,$(MESA_UTIL_GENERATED_FILES)) +LOCAL_GENERATED_SOURCES := $(UTIL_GENERATED_SOURCES) + +MESA_DRI_OPTIONS_H := $(intermediates)/xmlpool/options.h +LOCAL_GENERATED_SOURCES += $(MESA_DRI_OPTIONS_H) + +# +# Generate options.h from gettext translations. +# + +MESA_DRI_OPTIONS_LANGS := de es nl fr sv +POT := $(intermediates)/xmlpool.pot + +$(POT): $(LOCAL_PATH)/xmlpool/t_options.h + @mkdir -p $(dir $@) + xgettext -L C --from-code utf-8 -o $@ $< + +$(intermediates)/xmlpool/%.po: $(LOCAL_PATH)/xmlpool/%.po $(POT) + lang=$(basename $(notdir $@)); \ + mkdir -p $(dir $@); \ + if [ -f $< ]; then \ + msgmerge -o $@ $^; \ + else \ + msginit -i $(POT) \ + -o $@ \ + --locale=$$lang \ + --no-translator; \ + sed -i -e 's/charset=.*\\n/charset=UTF-8\\n/' $@; \ + fi + +PRIVATE_SCRIPT := $(LOCAL_PATH)/xmlpool/gen_xmlpool.py +PRIVATE_LOCALEDIR := $(intermediates)/xmlpool +PRIVATE_TEMPLATE_HEADER := $(LOCAL_PATH)/xmlpool/t_options.h +PRIVATE_MO_FILES := $(MESA_DRI_OPTIONS_LANGS:%=$(intermediates)/xmlpool/%/LC_MESSAGES/options.mo) + +LOCAL_GENERATED_SOURCES += $(PRIVATE_MO_FILES) $(LOCAL_GENERATED_SOURCES): PRIVATE_PYTHON := $(MESA_PYTHON2) -$(LOCAL_GENERATED_SOURCES): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PYTHON) $^ > $@ -$(LOCAL_GENERATED_SOURCES): $(intermediates)/%.c: $(LOCAL_PATH)/%.py + +$(PRIVATE_MO_FILES): $(intermediates)/xmlpool/%/LC_MESSAGES/options.mo: $(intermediates)/xmlpool/%.po + mkdir -p $(dir $@) + msgfmt -o $@ $< + +$(UTIL_GENERATED_SOURCES): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PYTHON) $^ > $@ +$(UTIL_GENERATED_SOURCES): $(intermediates)/%.c: $(LOCAL_PATH)/%.py + $(transform-generated-source) + +$(MESA_DRI_OPTIONS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PYTHON) $^ $(PRIVATE_TEMPLATE_HEADER) \ + $(PRIVATE_LOCALEDIR) $(MESA_DRI_OPTIONS_LANGS) > $@ +$(MESA_DRI_OPTIONS_H): $(PRIVATE_SCRIPT) $(PRIVATE_TEMPLATE_HEADER) $(PRIVATE_MO_FILES) $(transform-generated-source) include $(MESA_COMMON_MK) diff --git a/src/util/Makefile.am b/src/util/Makefile.am index f094eb4a0d0..fa6551eaa56 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -19,11 +19,13 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -SUBDIRS = . tests/hash_table +SUBDIRS = xmlpool . tests/hash_table include Makefile.sources -noinst_LTLIBRARIES = libmesautil.la +noinst_LTLIBRARIES = \ + libmesautil.la \ + libxmlconfig.la AM_CPPFLAGS = \ -I$(top_srcdir)/include @@ -46,6 +48,18 @@ libmesautil_la_SOURCES = \ libmesautil_la_LIBADD = $(ZLIB_LIBS) +libxmlconfig_la_SOURCES = $(XMLCONFIG_FILES) +libxmlconfig_la_CFLAGS = \ + $(DEFINES) \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -DSYSCONFDIR=\"$(sysconfdir)\" \ + $(VISIBILITY_CFLAGS) \ + $(EXPAT_CFLAGS) +libxmlconfig_la_LIBADD = $(EXPAT_LIBS) -lm + +sysconf_DATA = drirc + roundeven_test_LDADD = -lm check_PROGRAMS = u_atomic_test roundeven_test @@ -54,8 +68,10 @@ TESTS = $(check_PROGRAMS) BUILT_SOURCES = $(MESA_UTIL_GENERATED_FILES) CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ + drirc \ format_srgb.py \ SConscript \ + xmlpool.h \ sha1/README PYTHON_GEN = $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources index 8ea5f29533b..3315285f05e 100644 --- a/src/util/Makefile.sources +++ b/src/util/Makefile.sources @@ -56,3 +56,7 @@ MESA_UTIL_FILES := \ MESA_UTIL_GENERATED_FILES = \ format_srgb.c + +XMLCONFIG_FILES := \ + xmlconfig.c \ + xmlconfig.h diff --git a/src/util/SConscript b/src/util/SConscript index 7e447f6e038..582592c203f 100644 --- a/src/util/SConscript +++ b/src/util/SConscript @@ -2,6 +2,10 @@ import common Import('*') +SConscript([ + 'xmlpool', +]) + from sys import executable as python_cmd env = env.Clone() @@ -10,6 +14,7 @@ env.MSVC2013Compat() env.Prepend(CPPPATH = [ '#include', + xmlpool_options.dir.dir, # Dir to generated xmlpool/options.h '#src', '#src/mapi', '#src/mesa', @@ -30,10 +35,17 @@ source_lists = env.ParseSourceList('Makefile.sources') mesautil_sources = ( source_lists['MESA_UTIL_FILES'] + - source_lists['MESA_UTIL_GENERATED_FILES'] + source_lists['MESA_UTIL_GENERATED_FILES'] + + source_lists['XMLCONFIG_FILES'] ) -mesautil = env.ConvenienceLibrary( +mesautilenv = env.Clone() + +mesautilenv.AppendUnique(LIBS = [ + 'expat', +]) + +mesautil = mesautilenv.ConvenienceLibrary( target = 'mesautil', source = mesautil_sources, ) diff --git a/src/util/drirc b/src/util/drirc new file mode 100644 index 00000000000..30ac9c839be --- /dev/null +++ b/src/util/drirc @@ -0,0 +1,220 @@ +<!-- + +============================================ +Application bugs worked around in this file: +============================================ + +* Unigine Heaven 3.0 and older contain too many bugs and can't be supported + by drivers that want to be compliant. + +* Various Unigine products don't use the #version and #extension GLSL + directives, meaning they only get GLSL 1.10 and no extensions for their + shaders. + Enabling all extensions for Unigine fixes most issues, but the GLSL version + is still 1.10. + +* If ARB_sample_shading is supported, Unigine Heaven 4.0 and Valley 1.0 uses + an #extension directive in the middle of its shaders, which is illegal + in GLSL. + +* Dying Light and Dead Island Definitive Edition redeclare vertex shader + built-ins (specifically gl_VertexID), which causes the vertex shaders to fail + to compile. + +TODO: document the other workarounds. + +--> + +<driconf> + <!-- Please always enable app-specific workarounds for all drivers and + screens. --> + <device> + <application name="Unigine Sanctuary" executable="Sanctuary"> + <option name="force_glsl_extensions_warn" value="true" /> + <option name="disable_blend_func_extended" value="true" /> + </application> + + <application name="Unigine Tropics" executable="Tropics"> + <option name="force_glsl_extensions_warn" value="true" /> + <option name="disable_blend_func_extended" value="true" /> + </application> + + <application name="Unigine Heaven (32-bit)" executable="heaven_x86"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + <!-- remove dual_color_blend_by_location if 4.1 ever comes out --> + <option name="dual_color_blend_by_location" value="true" /> + </application> + + <application name="Unigine Heaven (64-bit)" executable="heaven_x64"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + <!-- remove dual_color_blend_by_location if 4.1 ever comes out --> + <option name="dual_color_blend_by_location" value="true" /> + </application> + + <application name="Unigine Valley (32-bit)" executable="valley_x86"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + <!-- remove dual_color_blend_by_location if 1.1 ever comes out --> + <option name="dual_color_blend_by_location" value="true" /> + </application> + + <application name="Unigine Valley (64-bit)" executable="valley_x64"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + <!-- remove dual_color_blend_by_location if 1.1 ever comes out --> + <option name="dual_color_blend_by_location" value="true" /> + </application> + + <application name="Unigine OilRush (32-bit)" executable="OilRush_x86"> + <option name="disable_blend_func_extended" value="true" /> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Unigine OilRush (64-bit)" executable="OilRush_x64"> + <option name="disable_blend_func_extended" value="true" /> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Savage 2" executable="savage2.bin"> + <option name="disable_glsl_line_continuations" value="true" /> + </application> + + <application name="Topogun (32-bit)" executable="topogun32"> + <option name="always_have_depth_buffer" value="true" /> + </application> + + <application name="Topogun (64-bit)" executable="topogun64"> + <option name="always_have_depth_buffer" value="true" /> + </application> + + <application name="Dead Island (incl. Definitive Edition)" executable="DeadIslandGame"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + + <!-- For the Definitive Edition which shares the same executable name --> + <option name="allow_glsl_builtin_variable_redeclaration" value="true" /> + </application> + + <application name="Dead Island Riptide Definitive Edition" executable="DeadIslandRiptideGame"> + <option name="allow_glsl_builtin_variable_redeclaration" value="true" /> + </application> + + <application name="Dying Light" executable="DyingLightGame"> + <option name="allow_glsl_builtin_variable_redeclaration" value="true" /> + </application> + + <application name="Second Life" executable="do-not-directly-run-secondlife-bin"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Warsow (32-bit)" executable="warsow.i386"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Warsow (64-bit)" executable="warsow.x86_64"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Rust" executable="rust"> + <option name="glsl_zero_init" value="true"/> + </application> + + <application name="Divinity: Original Sin Enhanced Edition" executable="EoCApp"> + <option name="allow_glsl_extension_directive_midshader" value="true" /> + </application> + + <application name="Worms W.M.D" executable="Worms W.M.Dx64"> + <option name="allow_higher_compat_version" value="true" /> + </application> + + <application name="Crookz - The Big Heist" executable="Crookz"> + <option name="allow_higher_compat_version" value="true" /> + </application> + + <application name="Tropico 5" executable="Tropico5"> + <option name="allow_higher_compat_version" value="true" /> + </application> + + <application name="The Culling" executable="Victory"> + <option name="force_glsl_version" value="440" /> + </application> + + <application name="Spec Ops: The Line (32-bit)" executable="specops.i386"> + <option name="force_glsl_abs_sqrt" value="true" /> + </application> + + <application name="Spec Ops: The Line (64-bit)" executable="specops"> + <option name="force_glsl_abs_sqrt" value="true" /> + </application> + + <application name="Kerbal Space Program (32-bit)" executable="KSP.x86"> + <option name="glsl_zero_init" value="true"/> + </application> + + <application name="Kerbal Space Program (64-bit)" executable="KSP.x86_64"> + <option name="glsl_zero_init" value="true"/> + </application> + + <application name="Rocket League" executable="RocketLeague"> + <option name="glsl_correct_derivatives_after_discard" value="true"/> + </application> + + <application name="The Witcher 2" executable="witcher2"> + <option name="glsl_correct_derivatives_after_discard" value="true"/> + </application> + + <!-- The GL thread whitelist is below, workarounds are above. + Keep it that way. --> + + <application name="Alien Isolation" executable="AlienIsolation"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Civilization 6" executable="Civ6"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="BioShock Infinite" executable="bioshock.i386"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Borderlands 2" executable="Borderlands2"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Civilization 5" executable="Civ5XP"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="The Witcher 2" executable="witcher2"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="American Truck Simulator" executable="amtrucks"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Euro Truck Simulator 2" executable="eurotrucks2"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Overlord" executable="overlord.i386"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Overlord 2" executable="overlord2.i386"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Oil Rush" executable="OilRush_x86"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="War Thunder" executable="aces"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="Saints Row 2" executable="saintsrow2.i386"> + <option name="mesa_glthread" value="true"/> + </application> + <application name="War Thunder (Wine)" executable="aces.exe"> + <option name="mesa_glthread" value="true"/> + </application> + </device> + <!-- vmwgfx doesn't like full buffer swaps and can't sync to vertical retraces.--> + <device driver="vmwgfx"> + <application name="gnome-shell" executable="gnome-shell"> + <option name="glx_disable_ext_buffer_age" value="true" /> + <option name="glx_disable_oml_sync_control" value="true" /> + </application> + <application name="Compiz" executable="Compiz"> + <option name="glx_disable_ext_buffer_age" value="true" /> + <option name="glx_disable_oml_sync_control" value="true" /> + </application> + </device> +</driconf> diff --git a/src/util/xmlconfig.c b/src/util/xmlconfig.c new file mode 100644 index 00000000000..d3f47ecda0c --- /dev/null +++ b/src/util/xmlconfig.c @@ -0,0 +1,1113 @@ +/* + * XML DRI client-side driver configuration + * Copyright (C) 2003 Felix Kuehling + * + * 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 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 + * FELIX KUEHLING, OR ANY OTHER CONTRIBUTORS 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. + * + */ +/** + * \file xmlconfig.c + * \brief Driver-independent client-side part of the XML configuration + * \author Felix Kuehling + */ + +#include <stdarg.h> +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <expat.h> +#include <fcntl.h> +#include <math.h> +#include <unistd.h> +#include <errno.h> +#include "xmlconfig.h" + +#undef GET_PROGRAM_NAME + +#if (defined(__GNU_LIBRARY__) || defined(__GLIBC__)) && !defined(__UCLIBC__) +# if !defined(__GLIBC__) || (__GLIBC__ < 2) +/* These aren't declared in any libc5 header */ +extern char *program_invocation_name, *program_invocation_short_name; +# endif +# define GET_PROGRAM_NAME() program_invocation_short_name +#elif defined(__CYGWIN__) +# define GET_PROGRAM_NAME() program_invocation_short_name +#elif defined(__FreeBSD__) && (__FreeBSD__ >= 2) +# include <osreldate.h> +# if (__FreeBSD_version >= 440000) +# include <stdlib.h> +# define GET_PROGRAM_NAME() getprogname() +# endif +#elif defined(__NetBSD__) && defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 106000100) +# include <stdlib.h> +# define GET_PROGRAM_NAME() getprogname() +#elif defined(__DragonFly__) +# include <stdlib.h> +# define GET_PROGRAM_NAME() getprogname() +#elif defined(__APPLE__) +# include <stdlib.h> +# define GET_PROGRAM_NAME() getprogname() +#elif defined(__sun) +/* Solaris has getexecname() which returns the full path - return just + the basename to match BSD getprogname() */ +# include <stdlib.h> +# include <libgen.h> + +static const char * +__getProgramName() +{ + static const char *progname; + + if (progname == NULL) { + const char *e = getexecname(); + if (e != NULL) { + /* Have to make a copy since getexecname can return a readonly + string, but basename expects to be able to modify its arg. */ + char *n = strdup(e); + if (n != NULL) { + progname = basename(n); + } + } + } + return progname; +} + +# define GET_PROGRAM_NAME() __getProgramName() +#endif + +#if !defined(GET_PROGRAM_NAME) +# if defined(__OpenBSD__) || defined(NetBSD) || defined(__UCLIBC__) || defined(ANDROID) +/* This is a hack. It's said to work on OpenBSD, NetBSD and GNU. + * Rogelio M.Serrano Jr. reported it's also working with UCLIBC. It's + * used as a last resort, if there is no documented facility available. */ +static const char * +__getProgramName() +{ + extern const char *__progname; + char * arg = strrchr(__progname, '/'); + if (arg) + return arg+1; + else + return __progname; +} +# define GET_PROGRAM_NAME() __getProgramName() +# else +# define GET_PROGRAM_NAME() "" +# warning "Per application configuration won't work with your OS version." +# endif +#endif + +/** \brief Find an option in an option cache with the name as key */ +static uint32_t +findOption(const driOptionCache *cache, const char *name) +{ + uint32_t len = strlen (name); + uint32_t size = 1 << cache->tableSize, mask = size - 1; + uint32_t hash = 0; + uint32_t i, shift; + + /* compute a hash from the variable length name */ + for (i = 0, shift = 0; i < len; ++i, shift = (shift+8) & 31) + hash += (uint32_t)name[i] << shift; + hash *= hash; + hash = (hash >> (16-cache->tableSize/2)) & mask; + + /* this is just the starting point of the linear search for the option */ + for (i = 0; i < size; ++i, hash = (hash+1) & mask) { + /* if we hit an empty entry then the option is not defined (yet) */ + if (cache->info[hash].name == 0) + break; + else if (!strcmp (name, cache->info[hash].name)) + break; + } + /* this assertion fails if the hash table is full */ + assert (i < size); + + return hash; +} + +/** \brief Like strdup but using malloc and with error checking. */ +#define XSTRDUP(dest,source) do { \ + uint32_t len = strlen (source); \ + if (!(dest = malloc(len+1))) { \ + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); \ + abort(); \ + } \ + memcpy (dest, source, len+1); \ +} while (0) + +static int compare (const void *a, const void *b) { + return strcmp (*(char *const*)a, *(char *const*)b); +} +/** \brief Binary search in a string array. */ +static uint32_t +bsearchStr (const XML_Char *name, const XML_Char *elems[], uint32_t count) +{ + const XML_Char **found; + found = bsearch (&name, elems, count, sizeof (XML_Char *), compare); + if (found) + return found - elems; + else + return count; +} + +/** \brief Locale-independent integer parser. + * + * Works similar to strtol. Leading space is NOT skipped. The input + * number may have an optional sign. Radix is specified by base. If + * base is 0 then decimal is assumed unless the input number is + * prefixed by 0x or 0X for hexadecimal or 0 for octal. After + * returning tail points to the first character that is not part of + * the integer number. If no number was found then tail points to the + * start of the input string. */ +static int +strToI(const XML_Char *string, const XML_Char **tail, int base) +{ + int radix = base == 0 ? 10 : base; + int result = 0; + int sign = 1; + bool numberFound = false; + const XML_Char *start = string; + + assert (radix >= 2 && radix <= 36); + + if (*string == '-') { + sign = -1; + string++; + } else if (*string == '+') + string++; + if (base == 0 && *string == '0') { + numberFound = true; + if (*(string+1) == 'x' || *(string+1) == 'X') { + radix = 16; + string += 2; + } else { + radix = 8; + string++; + } + } + do { + int digit = -1; + if (radix <= 10) { + if (*string >= '0' && *string < '0' + radix) + digit = *string - '0'; + } else { + if (*string >= '0' && *string <= '9') + digit = *string - '0'; + else if (*string >= 'a' && *string < 'a' + radix - 10) + digit = *string - 'a' + 10; + else if (*string >= 'A' && *string < 'A' + radix - 10) + digit = *string - 'A' + 10; + } + if (digit != -1) { + numberFound = true; + result = radix*result + digit; + string++; + } else + break; + } while (true); + *tail = numberFound ? string : start; + return sign * result; +} + +/** \brief Locale-independent floating-point parser. + * + * Works similar to strtod. Leading space is NOT skipped. The input + * number may have an optional sign. '.' is interpreted as decimal + * point and may occur at most once. Optionally the number may end in + * [eE]<exponent>, where <exponent> is an integer as recognized by + * strToI. In that case the result is number * 10^exponent. After + * returning tail points to the first character that is not part of + * the floating point number. If no number was found then tail points + * to the start of the input string. + * + * Uses two passes for maximum accuracy. */ +static float +strToF(const XML_Char *string, const XML_Char **tail) +{ + int nDigits = 0, pointPos, exponent; + float sign = 1.0f, result = 0.0f, scale; + const XML_Char *start = string, *numStart; + + /* sign */ + if (*string == '-') { + sign = -1.0f; + string++; + } else if (*string == '+') + string++; + + /* first pass: determine position of decimal point, number of + * digits, exponent and the end of the number. */ + numStart = string; + while (*string >= '0' && *string <= '9') { + string++; + nDigits++; + } + pointPos = nDigits; + if (*string == '.') { + string++; + while (*string >= '0' && *string <= '9') { + string++; + nDigits++; + } + } + if (nDigits == 0) { + /* no digits, no number */ + *tail = start; + return 0.0f; + } + *tail = string; + if (*string == 'e' || *string == 'E') { + const XML_Char *expTail; + exponent = strToI (string+1, &expTail, 10); + if (expTail == string+1) + exponent = 0; + else + *tail = expTail; + } else + exponent = 0; + string = numStart; + + /* scale of the first digit */ + scale = sign * (float)pow (10.0, (double)(pointPos-1 + exponent)); + + /* second pass: parse digits */ + do { + if (*string != '.') { + assert (*string >= '0' && *string <= '9'); + result += scale * (float)(*string - '0'); + scale *= 0.1f; + nDigits--; + } + string++; + } while (nDigits > 0); + + return result; +} + +/** \brief Parse a value of a given type. */ +static unsigned char +parseValue(driOptionValue *v, driOptionType type, const XML_Char *string) +{ + const XML_Char *tail = NULL; + /* skip leading white-space */ + string += strspn (string, " \f\n\r\t\v"); + switch (type) { + case DRI_BOOL: + if (!strcmp (string, "false")) { + v->_bool = false; + tail = string + 5; + } else if (!strcmp (string, "true")) { + v->_bool = true; + tail = string + 4; + } + else + return false; + break; + case DRI_ENUM: /* enum is just a special integer */ + case DRI_INT: + v->_int = strToI (string, &tail, 0); + break; + case DRI_FLOAT: + v->_float = strToF (string, &tail); + break; + case DRI_STRING: + free (v->_string); + v->_string = strndup(string, STRING_CONF_MAXLEN); + return true; + } + + if (tail == string) + return false; /* empty string (or containing only white-space) */ + /* skip trailing white space */ + if (*tail) + tail += strspn (tail, " \f\n\r\t\v"); + if (*tail) + return false; /* something left over that is not part of value */ + + return true; +} + +/** \brief Parse a list of ranges of type info->type. */ +static unsigned char +parseRanges(driOptionInfo *info, const XML_Char *string) +{ + XML_Char *cp, *range; + uint32_t nRanges, i; + driOptionRange *ranges; + + XSTRDUP (cp, string); + /* pass 1: determine the number of ranges (number of commas + 1) */ + range = cp; + for (nRanges = 1; *range; ++range) + if (*range == ',') + ++nRanges; + + if ((ranges = malloc(nRanges*sizeof(driOptionRange))) == NULL) { + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); + abort(); + } + + /* pass 2: parse all ranges into preallocated array */ + range = cp; + for (i = 0; i < nRanges; ++i) { + XML_Char *end, *sep; + assert (range); + end = strchr (range, ','); + if (end) + *end = '\0'; + sep = strchr (range, ':'); + if (sep) { /* non-empty interval */ + *sep = '\0'; + if (!parseValue (&ranges[i].start, info->type, range) || + !parseValue (&ranges[i].end, info->type, sep+1)) + break; + if (info->type == DRI_INT && + ranges[i].start._int > ranges[i].end._int) + break; + if (info->type == DRI_FLOAT && + ranges[i].start._float > ranges[i].end._float) + break; + } else { /* empty interval */ + if (!parseValue (&ranges[i].start, info->type, range)) + break; + ranges[i].end = ranges[i].start; + } + if (end) + range = end+1; + else + range = NULL; + } + free(cp); + if (i < nRanges) { + free(ranges); + return false; + } else + assert (range == NULL); + + info->nRanges = nRanges; + info->ranges = ranges; + return true; +} + +/** \brief Check if a value is in one of info->ranges. */ +static bool +checkValue(const driOptionValue *v, const driOptionInfo *info) +{ + uint32_t i; + assert (info->type != DRI_BOOL); /* should be caught by the parser */ + if (info->nRanges == 0) + return true; + switch (info->type) { + case DRI_ENUM: /* enum is just a special integer */ + case DRI_INT: + for (i = 0; i < info->nRanges; ++i) + if (v->_int >= info->ranges[i].start._int && + v->_int <= info->ranges[i].end._int) + return true; + break; + case DRI_FLOAT: + for (i = 0; i < info->nRanges; ++i) + if (v->_float >= info->ranges[i].start._float && + v->_float <= info->ranges[i].end._float) + return true; + break; + case DRI_STRING: + break; + default: + assert (0); /* should never happen */ + } + return false; +} + +/** + * Print message to \c stderr if the \c LIBGL_DEBUG environment variable + * is set. + * + * Is called from the drivers. + * + * \param f \c printf like format string. + */ +static void +__driUtilMessage(const char *f, ...) +{ + va_list args; + const char *libgl_debug; + + libgl_debug=getenv("LIBGL_DEBUG"); + if (libgl_debug && !strstr(libgl_debug, "quiet")) { + fprintf(stderr, "libGL: "); + va_start(args, f); + vfprintf(stderr, f, args); + va_end(args); + fprintf(stderr, "\n"); + } +} + +/** \brief Output a warning message. */ +#define XML_WARNING1(msg) do {\ + __driUtilMessage ("Warning in %s line %d, column %d: "msg, data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser)); \ +} while (0) +#define XML_WARNING(msg,args...) do { \ + __driUtilMessage ("Warning in %s line %d, column %d: "msg, data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser), \ + args); \ +} while (0) +/** \brief Output an error message. */ +#define XML_ERROR1(msg) do { \ + __driUtilMessage ("Error in %s line %d, column %d: "msg, data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser)); \ +} while (0) +#define XML_ERROR(msg,args...) do { \ + __driUtilMessage ("Error in %s line %d, column %d: "msg, data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser), \ + args); \ +} while (0) +/** \brief Output a fatal error message and abort. */ +#define XML_FATAL1(msg) do { \ + fprintf (stderr, "Fatal error in %s line %d, column %d: "msg"\n", \ + data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser)); \ + abort();\ +} while (0) +#define XML_FATAL(msg,args...) do { \ + fprintf (stderr, "Fatal error in %s line %d, column %d: "msg"\n", \ + data->name, \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser), \ + args); \ + abort();\ +} while (0) + +/** \brief Parser context for __driConfigOptions. */ +struct OptInfoData { + const char *name; + XML_Parser parser; + driOptionCache *cache; + bool inDriInfo; + bool inSection; + bool inDesc; + bool inOption; + bool inEnum; + int curOption; +}; + +/** \brief Elements in __driConfigOptions. */ +enum OptInfoElem { + OI_DESCRIPTION = 0, OI_DRIINFO, OI_ENUM, OI_OPTION, OI_SECTION, OI_COUNT +}; +static const XML_Char *OptInfoElems[] = { + "description", "driinfo", "enum", "option", "section" +}; + +/** \brief Parse attributes of an enum element. + * + * We're not actually interested in the data. Just make sure this is ok + * for external configuration tools. + */ +static void +parseEnumAttr(struct OptInfoData *data, const XML_Char **attr) +{ + uint32_t i; + const XML_Char *value = NULL, *text = NULL; + driOptionValue v; + uint32_t opt = data->curOption; + for (i = 0; attr[i]; i += 2) { + if (!strcmp (attr[i], "value")) value = attr[i+1]; + else if (!strcmp (attr[i], "text")) text = attr[i+1]; + else XML_FATAL("illegal enum attribute: %s.", attr[i]); + } + if (!value) XML_FATAL1 ("value attribute missing in enum."); + if (!text) XML_FATAL1 ("text attribute missing in enum."); + if (!parseValue (&v, data->cache->info[opt].type, value)) + XML_FATAL ("illegal enum value: %s.", value); + if (!checkValue (&v, &data->cache->info[opt])) + XML_FATAL ("enum value out of valid range: %s.", value); +} + +/** \brief Parse attributes of a description element. + * + * We're not actually interested in the data. Just make sure this is ok + * for external configuration tools. + */ +static void +parseDescAttr(struct OptInfoData *data, const XML_Char **attr) +{ + uint32_t i; + const XML_Char *lang = NULL, *text = NULL; + for (i = 0; attr[i]; i += 2) { + if (!strcmp (attr[i], "lang")) lang = attr[i+1]; + else if (!strcmp (attr[i], "text")) text = attr[i+1]; + else XML_FATAL("illegal description attribute: %s.", attr[i]); + } + if (!lang) XML_FATAL1 ("lang attribute missing in description."); + if (!text) XML_FATAL1 ("text attribute missing in description."); +} + +/** \brief Parse attributes of an option element. */ +static void +parseOptInfoAttr(struct OptInfoData *data, const XML_Char **attr) +{ + enum OptAttr {OA_DEFAULT = 0, OA_NAME, OA_TYPE, OA_VALID, OA_COUNT}; + static const XML_Char *optAttr[] = {"default", "name", "type", "valid"}; + const XML_Char *attrVal[OA_COUNT] = {NULL, NULL, NULL, NULL}; + const char *defaultVal; + driOptionCache *cache = data->cache; + uint32_t opt, i; + for (i = 0; attr[i]; i += 2) { + uint32_t attrName = bsearchStr (attr[i], optAttr, OA_COUNT); + if (attrName >= OA_COUNT) + XML_FATAL ("illegal option attribute: %s", attr[i]); + attrVal[attrName] = attr[i+1]; + } + if (!attrVal[OA_NAME]) XML_FATAL1 ("name attribute missing in option."); + if (!attrVal[OA_TYPE]) XML_FATAL1 ("type attribute missing in option."); + if (!attrVal[OA_DEFAULT]) XML_FATAL1 ("default attribute missing in option."); + + opt = findOption (cache, attrVal[OA_NAME]); + if (cache->info[opt].name) + XML_FATAL ("option %s redefined.", attrVal[OA_NAME]); + data->curOption = opt; + + XSTRDUP (cache->info[opt].name, attrVal[OA_NAME]); + + if (!strcmp (attrVal[OA_TYPE], "bool")) + cache->info[opt].type = DRI_BOOL; + else if (!strcmp (attrVal[OA_TYPE], "enum")) + cache->info[opt].type = DRI_ENUM; + else if (!strcmp (attrVal[OA_TYPE], "int")) + 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]); + + defaultVal = getenv (cache->info[opt].name); + if (defaultVal != NULL) { + /* don't use XML_WARNING, we want the user to see this! */ + fprintf (stderr, + "ATTENTION: default value of option %s overridden by environment.\n", + cache->info[opt].name); + } else + defaultVal = attrVal[OA_DEFAULT]; + if (!parseValue (&cache->values[opt], cache->info[opt].type, defaultVal)) + XML_FATAL ("illegal default value for %s: %s.", cache->info[opt].name, defaultVal); + + if (attrVal[OA_VALID]) { + if (cache->info[opt].type == DRI_BOOL) + XML_FATAL1 ("boolean option with valid attribute."); + if (!parseRanges (&cache->info[opt], attrVal[OA_VALID])) + XML_FATAL ("illegal valid attribute: %s.", attrVal[OA_VALID]); + if (!checkValue (&cache->values[opt], &cache->info[opt])) + XML_FATAL ("default value out of valid range '%s': %s.", + attrVal[OA_VALID], defaultVal); + } else if (cache->info[opt].type == DRI_ENUM) { + XML_FATAL1 ("valid attribute missing in option (mandatory for enums)."); + } else { + cache->info[opt].nRanges = 0; + cache->info[opt].ranges = NULL; + } +} + +/** \brief Handler for start element events. */ +static void +optInfoStartElem(void *userData, const XML_Char *name, const XML_Char **attr) +{ + struct OptInfoData *data = (struct OptInfoData *)userData; + enum OptInfoElem elem = bsearchStr (name, OptInfoElems, OI_COUNT); + switch (elem) { + case OI_DRIINFO: + if (data->inDriInfo) + XML_FATAL1 ("nested <driinfo> elements."); + if (attr[0]) + XML_FATAL1 ("attributes specified on <driinfo> element."); + data->inDriInfo = true; + break; + case OI_SECTION: + if (!data->inDriInfo) + XML_FATAL1 ("<section> must be inside <driinfo>."); + if (data->inSection) + XML_FATAL1 ("nested <section> elements."); + if (attr[0]) + XML_FATAL1 ("attributes specified on <section> element."); + data->inSection = true; + break; + case OI_DESCRIPTION: + if (!data->inSection && !data->inOption) + XML_FATAL1 ("<description> must be inside <description> or <option."); + if (data->inDesc) + XML_FATAL1 ("nested <description> elements."); + data->inDesc = true; + parseDescAttr (data, attr); + break; + case OI_OPTION: + if (!data->inSection) + XML_FATAL1 ("<option> must be inside <section>."); + if (data->inDesc) + XML_FATAL1 ("<option> nested in <description> element."); + if (data->inOption) + XML_FATAL1 ("nested <option> elements."); + data->inOption = true; + parseOptInfoAttr (data, attr); + break; + case OI_ENUM: + if (!(data->inOption && data->inDesc)) + XML_FATAL1 ("<enum> must be inside <option> and <description>."); + if (data->inEnum) + XML_FATAL1 ("nested <enum> elements."); + data->inEnum = true; + parseEnumAttr (data, attr); + break; + default: + XML_FATAL ("unknown element: %s.", name); + } +} + +/** \brief Handler for end element events. */ +static void +optInfoEndElem(void *userData, const XML_Char *name) +{ + struct OptInfoData *data = (struct OptInfoData *)userData; + enum OptInfoElem elem = bsearchStr (name, OptInfoElems, OI_COUNT); + switch (elem) { + case OI_DRIINFO: + data->inDriInfo = false; + break; + case OI_SECTION: + data->inSection = false; + break; + case OI_DESCRIPTION: + data->inDesc = false; + break; + case OI_OPTION: + data->inOption = false; + break; + case OI_ENUM: + data->inEnum = false; + break; + default: + assert (0); /* should have been caught by StartElem */ + } +} + +void +driParseOptionInfo(driOptionCache *info, const char *configOptions) +{ + XML_Parser p; + int status; + struct OptInfoData userData; + struct OptInfoData *data = &userData; + + /* Make the hash table big enough to fit more than the maximum number of + * config options we've ever seen in a driver. + */ + info->tableSize = 6; + info->info = calloc(1 << info->tableSize, sizeof (driOptionInfo)); + info->values = calloc(1 << info->tableSize, sizeof (driOptionValue)); + if (info->info == NULL || info->values == NULL) { + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); + abort(); + } + + p = XML_ParserCreate ("UTF-8"); /* always UTF-8 */ + XML_SetElementHandler (p, optInfoStartElem, optInfoEndElem); + XML_SetUserData (p, data); + + userData.name = "__driConfigOptions"; + userData.parser = p; + userData.cache = info; + userData.inDriInfo = false; + userData.inSection = false; + userData.inDesc = false; + userData.inOption = false; + userData.inEnum = false; + userData.curOption = -1; + + status = XML_Parse (p, configOptions, strlen (configOptions), 1); + if (!status) + XML_FATAL ("%s.", XML_ErrorString(XML_GetErrorCode(p))); + + XML_ParserFree (p); +} + +/** \brief Parser context for configuration files. */ +struct OptConfData { + const char *name; + XML_Parser parser; + driOptionCache *cache; + int screenNum; + const char *driverName, *execName; + uint32_t ignoringDevice; + uint32_t ignoringApp; + uint32_t inDriConf; + uint32_t inDevice; + uint32_t inApp; + uint32_t inOption; +}; + +/** \brief Elements in configuration files. */ +enum OptConfElem { + OC_APPLICATION = 0, OC_DEVICE, OC_DRICONF, OC_OPTION, OC_COUNT +}; +static const XML_Char *OptConfElems[] = { + [OC_APPLICATION] = "application", + [OC_DEVICE] = "device", + [OC_DRICONF] = "driconf", + [OC_OPTION] = "option", +}; + +/** \brief Parse attributes of a device element. */ +static void +parseDeviceAttr(struct OptConfData *data, const XML_Char **attr) +{ + uint32_t i; + const XML_Char *driver = NULL, *screen = NULL; + for (i = 0; attr[i]; i += 2) { + if (!strcmp (attr[i], "driver")) driver = attr[i+1]; + else if (!strcmp (attr[i], "screen")) screen = attr[i+1]; + else XML_WARNING("unknown device attribute: %s.", attr[i]); + } + if (driver && strcmp (driver, data->driverName)) + data->ignoringDevice = data->inDevice; + else if (screen) { + driOptionValue screenNum; + if (!parseValue (&screenNum, DRI_INT, screen)) + XML_WARNING("illegal screen number: %s.", screen); + else if (screenNum._int != data->screenNum) + data->ignoringDevice = data->inDevice; + } +} + +/** \brief Parse attributes of an application element. */ +static void +parseAppAttr(struct OptConfData *data, const XML_Char **attr) +{ + uint32_t i; + const XML_Char *exec = NULL; + for (i = 0; attr[i]; i += 2) { + if (!strcmp (attr[i], "name")) /* not needed here */; + else if (!strcmp (attr[i], "executable")) exec = attr[i+1]; + else XML_WARNING("unknown application attribute: %s.", attr[i]); + } + if (exec && strcmp (exec, data->execName)) + data->ignoringApp = data->inApp; +} + +/** \brief Parse attributes of an option element. */ +static void +parseOptConfAttr(struct OptConfData *data, const XML_Char **attr) +{ + uint32_t i; + const XML_Char *name = NULL, *value = NULL; + for (i = 0; attr[i]; i += 2) { + if (!strcmp (attr[i], "name")) name = attr[i+1]; + else if (!strcmp (attr[i], "value")) value = attr[i+1]; + else XML_WARNING("unknown option attribute: %s.", attr[i]); + } + if (!name) XML_WARNING1 ("name attribute missing in option."); + if (!value) XML_WARNING1 ("value attribute missing in option."); + if (name && value) { + driOptionCache *cache = data->cache; + uint32_t opt = findOption (cache, name); + if (cache->info[opt].name == NULL) + /* don't use XML_WARNING, drirc defines options for all drivers, + * but not all drivers support them */ + return; + else if (getenv (cache->info[opt].name)) + /* don't use XML_WARNING, we want the user to see this! */ + fprintf (stderr, "ATTENTION: option value of option %s ignored.\n", + cache->info[opt].name); + else if (!parseValue (&cache->values[opt], cache->info[opt].type, value)) + XML_WARNING ("illegal option value: %s.", value); + } +} + +/** \brief Handler for start element events. */ +static void +optConfStartElem(void *userData, const XML_Char *name, + const XML_Char **attr) +{ + struct OptConfData *data = (struct OptConfData *)userData; + enum OptConfElem elem = bsearchStr (name, OptConfElems, OC_COUNT); + switch (elem) { + case OC_DRICONF: + if (data->inDriConf) + XML_WARNING1 ("nested <driconf> elements."); + if (attr[0]) + XML_WARNING1 ("attributes specified on <driconf> element."); + data->inDriConf++; + break; + case OC_DEVICE: + if (!data->inDriConf) + XML_WARNING1 ("<device> should be inside <driconf>."); + if (data->inDevice) + XML_WARNING1 ("nested <device> elements."); + data->inDevice++; + if (!data->ignoringDevice && !data->ignoringApp) + parseDeviceAttr (data, attr); + break; + case OC_APPLICATION: + if (!data->inDevice) + XML_WARNING1 ("<application> should be inside <device>."); + if (data->inApp) + XML_WARNING1 ("nested <application> elements."); + data->inApp++; + if (!data->ignoringDevice && !data->ignoringApp) + parseAppAttr (data, attr); + break; + case OC_OPTION: + if (!data->inApp) + XML_WARNING1 ("<option> should be inside <application>."); + if (data->inOption) + XML_WARNING1 ("nested <option> elements."); + data->inOption++; + if (!data->ignoringDevice && !data->ignoringApp) + parseOptConfAttr (data, attr); + break; + default: + XML_WARNING ("unknown element: %s.", name); + } +} + +/** \brief Handler for end element events. */ +static void +optConfEndElem(void *userData, const XML_Char *name) +{ + struct OptConfData *data = (struct OptConfData *)userData; + enum OptConfElem elem = bsearchStr (name, OptConfElems, OC_COUNT); + switch (elem) { + case OC_DRICONF: + data->inDriConf--; + break; + case OC_DEVICE: + if (data->inDevice-- == data->ignoringDevice) + data->ignoringDevice = 0; + break; + case OC_APPLICATION: + if (data->inApp-- == data->ignoringApp) + data->ignoringApp = 0; + break; + case OC_OPTION: + data->inOption--; + break; + default: + /* unknown element, warning was produced on start tag */; + } +} + +/** \brief Initialize an option cache based on info */ +static void +initOptionCache(driOptionCache *cache, const driOptionCache *info) +{ + unsigned i, size = 1 << info->tableSize; + cache->info = info->info; + cache->tableSize = info->tableSize; + cache->values = malloc((1<<info->tableSize) * sizeof (driOptionValue)); + if (cache->values == NULL) { + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); + abort(); + } + memcpy (cache->values, info->values, + (1<<info->tableSize) * sizeof (driOptionValue)); + for (i = 0; i < size; ++i) { + if (cache->info[i].type == DRI_STRING) + XSTRDUP(cache->values[i]._string, info->values[i]._string); + } +} + +/** \brief Parse the named configuration file */ +static void +parseOneConfigFile(XML_Parser p) +{ +#define BUF_SIZE 0x1000 + struct OptConfData *data = (struct OptConfData *)XML_GetUserData (p); + int status; + int fd; + + if ((fd = open (data->name, O_RDONLY)) == -1) { + __driUtilMessage ("Can't open configuration file %s: %s.", + data->name, strerror (errno)); + return; + } + + while (1) { + int bytesRead; + void *buffer = XML_GetBuffer (p, BUF_SIZE); + if (!buffer) { + __driUtilMessage ("Can't allocate parser buffer."); + break; + } + bytesRead = read (fd, buffer, BUF_SIZE); + if (bytesRead == -1) { + __driUtilMessage ("Error reading from configuration file %s: %s.", + data->name, strerror (errno)); + break; + } + status = XML_ParseBuffer (p, bytesRead, bytesRead == 0); + if (!status) { + XML_ERROR ("%s.", XML_ErrorString(XML_GetErrorCode(p))); + break; + } + if (bytesRead == 0) + break; + } + + close (fd); +#undef BUF_SIZE +} + +#ifndef SYSCONFDIR +#define SYSCONFDIR "/etc" +#endif + +void +driParseConfigFiles(driOptionCache *cache, const driOptionCache *info, + int screenNum, const char *driverName) +{ + char *filenames[2] = { SYSCONFDIR "/drirc", NULL}; + char *home; + uint32_t i; + struct OptConfData userData; + + initOptionCache (cache, info); + + userData.cache = cache; + userData.screenNum = screenNum; + userData.driverName = driverName; + userData.execName = GET_PROGRAM_NAME(); + + if ((home = getenv ("HOME"))) { + uint32_t len = strlen (home); + filenames[1] = malloc(len + 7+1); + if (filenames[1] == NULL) + __driUtilMessage ("Can't allocate memory for %s/.drirc.", home); + else { + memcpy (filenames[1], home, len); + memcpy (filenames[1] + len, "/.drirc", 7+1); + } + } + + for (i = 0; i < 2; ++i) { + XML_Parser p; + if (filenames[i] == NULL) + continue; + + p = XML_ParserCreate (NULL); /* use encoding specified by file */ + XML_SetElementHandler (p, optConfStartElem, optConfEndElem); + XML_SetUserData (p, &userData); + userData.parser = p; + userData.name = filenames[i]; + userData.ignoringDevice = 0; + userData.ignoringApp = 0; + userData.inDriConf = 0; + userData.inDevice = 0; + userData.inApp = 0; + userData.inOption = 0; + + parseOneConfigFile (p); + XML_ParserFree (p); + } + + free(filenames[1]); +} + +void +driDestroyOptionInfo(driOptionCache *info) +{ + driDestroyOptionCache(info); + if (info->info) { + uint32_t i, size = 1 << info->tableSize; + for (i = 0; i < size; ++i) { + if (info->info[i].name) { + free(info->info[i].name); + free(info->info[i].ranges); + } + } + free(info->info); + } +} + +void +driDestroyOptionCache(driOptionCache *cache) +{ + if (cache->info) { + unsigned i, size = 1 << cache->tableSize; + for (i = 0; i < size; ++i) { + if (cache->info[i].type == DRI_STRING) + free(cache->values[i]._string); + } + } + free(cache->values); +} + +unsigned char +driCheckOption(const driOptionCache *cache, const char *name, + driOptionType type) +{ + uint32_t i = findOption (cache, name); + return cache->info[i].name != NULL && cache->info[i].type == type; +} + +unsigned char +driQueryOptionb(const driOptionCache *cache, const char *name) +{ + uint32_t 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_BOOL); + return cache->values[i]._bool; +} + +int +driQueryOptioni(const driOptionCache *cache, const char *name) +{ + uint32_t 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_INT || cache->info[i].type == DRI_ENUM); + return cache->values[i]._int; +} + +float +driQueryOptionf(const driOptionCache *cache, const char *name) +{ + uint32_t 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_FLOAT); + return cache->values[i]._float; +} + +char * +driQueryOptionstr(const driOptionCache *cache, const char *name) +{ + uint32_t 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/util/xmlconfig.h b/src/util/xmlconfig.h new file mode 100644 index 00000000000..77aa14c20e0 --- /dev/null +++ b/src/util/xmlconfig.h @@ -0,0 +1,179 @@ +/* + * XML DRI client-side driver configuration + * Copyright (C) 2003 Felix Kuehling + * + * 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 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 + * FELIX KUEHLING, OR ANY OTHER CONTRIBUTORS 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. + * + */ +/** + * \file xmlconfig.h + * \brief Driver-independent client-side part of the XML configuration + * \author Felix Kuehling + */ + +#ifndef __XMLCONFIG_H +#define __XMLCONFIG_H + +#include "util/mesa-sha1.h" +#include "util/ralloc.h" + +#define STRING_CONF_MAXLEN 25 + +/** \brief Option data types */ +typedef enum driOptionType { + DRI_BOOL, DRI_ENUM, DRI_INT, DRI_FLOAT, DRI_STRING +} driOptionType; + +/** \brief Option value */ +typedef union driOptionValue { + unsigned char _bool; /**< \brief Boolean */ + int _int; /**< \brief Integer or Enum */ + float _float; /**< \brief Floating-point */ + char *_string; /**< \brief String */ +} driOptionValue; + +/** \brief Single range of valid values + * + * For empty ranges (a single value) start == end */ +typedef struct driOptionRange { + driOptionValue start; /**< \brief Start */ + driOptionValue end; /**< \brief End */ +} driOptionRange; + +/** \brief Information about an option */ +typedef struct driOptionInfo { + char *name; /**< \brief Name */ + driOptionType type; /**< \brief Type */ + driOptionRange *ranges; /**< \brief Array of ranges */ + unsigned int nRanges; /**< \brief Number of ranges */ +} driOptionInfo; + +/** \brief Option cache + * + * \li One in <driver>Screen caching option info and the default values + * \li One in each <driver>Context with the actual values for that context */ +typedef struct driOptionCache { + driOptionInfo *info; + /**< \brief Array of option infos + * + * Points to the same array in the screen and all contexts */ + driOptionValue *values; + /**< \brief Array of option values + * + * \li Default values in screen + * \li Actual values in contexts + */ + unsigned int tableSize; + /**< \brief Size of the arrays + * + * In the current implementation it's not actually a size but log2(size). + * The value is the same in the screen and all contexts. */ +} driOptionCache; + +/** \brief Parse XML option info from configOptions + * + * To be called in <driver>CreateScreen + * + * \param info pointer to a driOptionCache that will store the option info + * \param configOptions XML document describing available configuration opts + * + * For the option information to be available to external configuration tools + * it must be a public symbol __driConfigOptions. It is also passed as a + * parameter to driParseOptionInfo in order to avoid driver-independent code + * depending on symbols in driver-specific code. */ +void driParseOptionInfo (driOptionCache *info, + const char *configOptions); +/** \brief Initialize option cache from info and parse configuration files + * + * To be called in <driver>CreateContext. screenNum and driverName select + * device sections. */ +void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info, + int screenNum, const char *driverName); +/** \brief Destroy option info + * + * To be called in <driver>DestroyScreen */ +void driDestroyOptionInfo (driOptionCache *info); +/** \brief Destroy option cache + * + * To be called in <driver>DestroyContext */ +void driDestroyOptionCache (driOptionCache *cache); + +/** \brief Check if there exists a certain option */ +unsigned char driCheckOption (const driOptionCache *cache, const char *name, + driOptionType type); + +/** \brief Query a boolean option value */ +unsigned char driQueryOptionb (const driOptionCache *cache, const char *name); +/** \brief Query an integer option value */ +int driQueryOptioni (const driOptionCache *cache, const char *name); +/** \brief Query a floating-point option value */ +float driQueryOptionf (const driOptionCache *cache, const char *name); +/** \brief Query a string option value */ +char *driQueryOptionstr (const driOptionCache *cache, const char *name); + +/** + * Returns a hash of the options for this application. + */ +static inline void +driComputeOptionsSha1(const driOptionCache *cache, unsigned char *sha1) +{ + void *ctx = ralloc_context(NULL); + char *dri_options = ralloc_strdup(ctx, ""); + + for (int i = 0; i < 1 << cache->tableSize; i++) { + if (cache->info[i].name == NULL) + continue; + + bool ret = false; + switch (cache->info[i].type) { + case DRI_BOOL: + ret = ralloc_asprintf_append(&dri_options, "%s:%u,", + cache->info[i].name, + cache->values[i]._bool); + break; + case DRI_INT: + case DRI_ENUM: + ret = ralloc_asprintf_append(&dri_options, "%s:%d,", + cache->info[i].name, + cache->values[i]._int); + break; + case DRI_FLOAT: + ret = ralloc_asprintf_append(&dri_options, "%s:%f,", + cache->info[i].name, + cache->values[i]._float); + break; + case DRI_STRING: + ret = ralloc_asprintf_append(&dri_options, "%s:%s,", + cache->info[i].name, + cache->values[i]._string); + break; + default: + unreachable("unsupported dri config type!"); + } + + if (!ret) { + break; + } + } + + _mesa_sha1_compute(dri_options, strlen(dri_options), sha1); + ralloc_free(ctx); +} + +#endif diff --git a/src/util/xmlpool.h b/src/util/xmlpool.h new file mode 100644 index 00000000000..ebd4e7c863a --- /dev/null +++ b/src/util/xmlpool.h @@ -0,0 +1,105 @@ +/* + * XML DRI client-side driver configuration + * Copyright (C) 2003 Felix Kuehling + * + * 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 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 + * FELIX KUEHLING, OR ANY OTHER CONTRIBUTORS 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. + * + */ +/** + * \file xmlpool.h + * \brief Pool of common options + * \author Felix Kuehling + * + * This file defines macros that can be used to construct + * driConfigOptions in the drivers. Common options are defined in + * xmlpool/t_options.h from which xmlpool/options.h is generated with + * translations. This file defines generic helper macros and includes + * xmlpool/options.h. + */ + +#ifndef __XMLPOOL_H +#define __XMLPOOL_H + +/* + * generic macros + */ + +/** \brief Begin __driConfigOptions */ +#define DRI_CONF_BEGIN \ +"<driinfo>\n" + +/** \brief End __driConfigOptions */ +#define DRI_CONF_END \ +"</driinfo>\n" + +/** \brief Begin a section of related options */ +#define DRI_CONF_SECTION_BEGIN \ +"<section>\n" + +/** \brief End a section of related options */ +#define DRI_CONF_SECTION_END \ +"</section>\n" + +/** \brief Begin an option definition */ +#define DRI_CONF_OPT_BEGIN(name,type,def) \ +"<option name=\""#name"\" type=\""#type"\" default=\""#def"\">\n" + +/** + * \brief Begin a boolean option definition, with the default value passed in + * as a string + */ +#define DRI_CONF_OPT_BEGIN_B(name,def) \ +"<option name=\""#name"\" type=\"bool\" default="#def">\n" + +/** \brief Begin an option definition with quoted default value */ +#define DRI_CONF_OPT_BEGIN_Q(name,type,def) \ +"<option name=\""#name"\" type=\""#type"\" default="#def">\n" + +/** \brief Begin an option definition with restrictions on valid values */ +#define DRI_CONF_OPT_BEGIN_V(name,type,def,valid) \ +"<option name=\""#name"\" type=\""#type"\" default=\""#def"\" valid=\""valid"\">\n" + +/** \brief End an option description */ +#define DRI_CONF_OPT_END \ +"</option>\n" + +/** \brief A verbal description in a specified language (empty version) */ +#define DRI_CONF_DESC(lang,text) \ +"<description lang=\""#lang"\" text=\""text"\"/>\n" + +/** \brief A verbal description in a specified language */ +#define DRI_CONF_DESC_BEGIN(lang,text) \ +"<description lang=\""#lang"\" text=\""text"\">\n" + +/** \brief End a description */ +#define DRI_CONF_DESC_END \ +"</description>\n" + +/** \brief A verbal description of an enum value */ +#define DRI_CONF_ENUM(value,text) \ +"<enum value=\""#value"\" text=\""text"\"/>\n" + + +/* + * Predefined option sections and options with multi-lingual descriptions + * are now automatically generated. + */ +#include "xmlpool/options.h" + +#endif diff --git a/src/util/xmlpool/.gitignore b/src/util/xmlpool/.gitignore new file mode 100644 index 00000000000..383df727a17 --- /dev/null +++ b/src/util/xmlpool/.gitignore @@ -0,0 +1,8 @@ +ca +de +es +fr +nl +sv +options.h +xmlpool.pot diff --git a/src/util/xmlpool/Makefile.am b/src/util/xmlpool/Makefile.am new file mode 100644 index 00000000000..dfd8fb8dc6d --- /dev/null +++ b/src/util/xmlpool/Makefile.am @@ -0,0 +1,101 @@ +# Convenient makefile for managing translations. + +# Prerequisites: +# - GNU gettext +# - Python + +# Adding new translations +# ----------------------- + +# To start working on a new translation edit the POS=... line +# below. If you want to add for example a french translation, add +# fr.po. + +# Then run "make po" to generate a fresh .po file from translatable +# strings in t_options.h. Now you can edit the new .po file (fr.po in +# the example above) to translate the strings. Please make sure that +# your editor encodes the file in UTF-8. + +# Updating existing translations +# ------------------------------ + +# Run "make po" to update .po files with new translatable strings from +# t_options.h. Now you can edit the .po files you're interested +# in. Please make sure that your editor encodes the file in UTF-8. + +# Updating options.h +# ------------------ + +# Finally run "make" to generate options.h from t_options.h with all +# translations. Now you can rebuild the drivers. Any common options +# used by the drivers will have option descriptions with the latest +# translations. + +# Publishing translations +# ----------------------- + +# To get your translation(s) into Mesa CVS, please send me your +# <lang>.po file. + +# More information: +# - info gettext + +# The set of supported languages. Add languages as needed. +POS=ca.po de.po es.po nl.po fr.po sv.po + +# +# Don't change anything below, unless you know what you're doing. +# +LANGS=$(POS:%.po=%) +MOS=$(POS:%.po=%/LC_MESSAGES/options.mo) +POT=xmlpool.pot + +.PHONY: all clean pot po mo + +EXTRA_DIST = \ + gen_xmlpool.py \ + options.h \ + t_options.h \ + $(POS) \ + $(MOS) \ + SConscript + +BUILT_SOURCES = options.h +CLEANFILES = \ + options.h + $(POS) \ + $(MOS) + +# Default target options.h +LOCALEDIR := . +options.h: t_options.h $(MOS) + $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/gen_xmlpool.py $(srcdir)/t_options.h $(LOCALEDIR) $(LANGS) > options.h + +# Update .mo files from the corresponding .po files. +%/LC_MESSAGES/options.mo: %.po + @mo="$@"; \ + lang=$${mo%%/*}; \ + echo "Updating ($$lang) $@ from $?."; \ + $(MKDIR_P) $$lang/LC_MESSAGES; \ + msgfmt -o $@ $? + +# Use this target to create or update .po files with new messages in +# driconf.py. +po: $(POT) + @for po in $(POS); do \ + if [ -f $$po ]; then \ + echo "Merging new strings from $(POT) into $@."; \ + mv $$po $$po~; \ + msgmerge -o $$po $$po~ $(POT); \ + else \ + echo "Initializing $$po from $(POT)."; \ + msginit -i $(POT) -o $$po~ --locale=$*; \ + sed -e 's/charset=.*\\n/charset=UTF-8\\n/' $$po~ > $$po; \ + fi \ + done + +pot: $(POT) + +# Extract message catalog from driconf.py. +$(POT): t_options.h + xgettext -L C --from-code utf-8 -o $(POT) t_options.h diff --git a/src/util/xmlpool/SConscript b/src/util/xmlpool/SConscript new file mode 100644 index 00000000000..fa42554d3a5 --- /dev/null +++ b/src/util/xmlpool/SConscript @@ -0,0 +1,14 @@ +Import('*') + +from sys import executable as python_cmd + +LOCALEDIR = env.Dir('.').srcnode().abspath + +xmlpool_options, = env.CodeGenerate( + target = 'options.h', + script = 'gen_xmlpool.py', + source = ['t_options.h'], + command = python_cmd + ' $SCRIPT $SOURCE ' + LOCALEDIR + ' > $TARGET' +) + +Export('xmlpool_options') diff --git a/src/util/xmlpool/ca.po b/src/util/xmlpool/ca.po new file mode 100644 index 00000000000..03bf29613fc --- /dev/null +++ b/src/util/xmlpool/ca.po @@ -0,0 +1,348 @@ +# Language translations for Mesa package +# Traduccions al català del paquet «Mesa». +# +# Copyright © 2014 Alex Henrie <[email protected]> +# +# 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. +msgid "" +msgstr "" +"Project-Id-Version: Mesa 10.1.0-devel\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-07 02:08-0700\n" +"PO-Revision-Date: 2015-02-23 14:28-0700\n" +"Last-Translator: Alex Henrie <[email protected]>\n" +"Language-Team: Catalan <[email protected]>\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.7.4\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Depuració" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "Deshabilita l'acceleració 3D" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Mostra les caixes de rendiment" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "Habilita el buidatge del batchbuffer després de cada trucada de dibuix" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "" +"Habilita el buidatge de les memòries cau de GPU amb cada trucada de dibuix" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "Deshabilita la regulació en el primer lot després de buidar" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" +"Força que el comportament per defecte de les extensions GLSL sigui 'warn'" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "Deshabilita la barreja de font dual" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" +"Deshabilita les continuacions de línia basades en barra invertida en la font " +"GLSL" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "Deshabilita el GL_ARB_shader_bit_encoding" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" +"Força una versió GLSL per defecte en els shaders als quals lis manca una " +"línia #version explícita" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "Permet les directives #extension GLSL en el mitjà dels shaders" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Qualitat d'imatge" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Profunditat de color de textura" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Prefereix profunditat de color del framebuffer" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Prefereix 32 bits per texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Prefereix 16 bits per texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Força 16 bits per texel" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Valor màxim inicial per a la filtració de textura anisòtropa" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "" +"Prohibeix una parcialitat negativa del Nivell de Detalle (LOD) de les " +"textures" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "" +"Habilita la compressió de textures S3TC encara que el suport de programari " +"no estigui disponible" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Mètode inicial de reducció de color" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Colors arrodonits" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Colors tramats" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Mètode d'arrodoniment de color" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Arrodoneix els components de color a baix" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Arrodoneix al color més proper" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Mètode de tramat de color" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Difusió d'error horitzontal" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Difusió d'error horitzontal, reinicia l'error a l'inici de la línia" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Tramat de color 2D ordenat" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Buffer de profunditat de punt flotant" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "Un filtre de postprocessament per a aplicar cel shading a la sortida" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "Un filtre de postprocessament per a eliminar el canal vermell" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "Un filtre de postprocessament per a eliminar el canal verd" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "Un filtre de postprocessament per a eliminar el canal blau" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" +"Antialiàsing morfològic basat en el MLAA de Jimenez. 0 per deshabilitar, 8 " +"per qualitat per defecte" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" +"Antialiàsing morfològic basat en el MLAA de Jimenez. 0 per deshabilitar, 8 " +"per qualitat per defecte. Versió en color, utilitzable amb les aplicacions " +"GL 2D" + +#: t_options.h:230 +msgid "Performance" +msgstr "Rendiment" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "Mode TCL (Transformació, Retall, Il·luminació)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Utilitza la canonada TCL de programari" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Utilitza el TCL de maquinari com a la primera fase de la canonada TCL" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Passa per alt la canonada TCL" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Passa per alt la canonada TCL amb codi de màquina basat en estats, generat " +"sobre la marxa" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Mètode per a limitar la latència de renderització" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Espera activa pel maquinari de gràfics" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "Dorm per intervals breus mentre s'espera al maquinari de gràfics" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "" +"Deixa que el maquinari de gràfics emeti una interrupció de programari i dormi" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Sincronització amb refresc vertical (intervals d'intercanvi)" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "" +"Mai sincronitzis amb el refresc vertical, ignora l'elecció de l'aplicació" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "Interval d'intercanvi inicial 0, obeeix l'elecció de l'aplicació" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "Interval d'intercanvi inicial 1, obeeix l'elecció de l'aplicació" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Sempre sincronitza amb el refresc vertical, l'aplicació tria l'interval " +"mínim d'intercanvi" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "Utilitza el HyperZ per a augmentar el rendiment" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Nombre d'unitats de textura utilitzades" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Qualitat vs. velocitat de filtració de textura, àlies filtració \"brilinear" +"\" de textura" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Tipus utilitzats de memòria de textura" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Tota la memòria disponible" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Només memòria de targeta (si està disponible)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Només memòria GART (AGP/PCIE) (si està disponible)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Característiques no accelerades per maquinari" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Habilita l'extensió GL_ARB_vertex_program" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "Miscel·lània" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "Crea tots els visuals amb buffer de profunditat" + +#: t_options.h:337 +msgid "Initialization" +msgstr "Inicialització" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "Defineix el dispositiu de gràfics que utilitzar si és possible" + +#: t_options.h:350 +msgid "Gallium Nine" +msgstr "Gallium Nine" + +#: t_options.h:354 +msgid "" +"Define the throttling value. -1 for no throttling, -2 for default (usually " +"2), 0 for glfinish behaviour" +msgstr "" +"Defineix el valor de regulació. -1 per a no regular, -2 per al predeterminat " +"(generalment 2), 0 per al comportament de glfinish" + +#: t_options.h:359 +msgid "Use an additional thread to submit buffers." +msgstr "Utilitza un fil addicional per a entregar els buffers." diff --git a/src/util/xmlpool/de.po b/src/util/xmlpool/de.po new file mode 100644 index 00000000000..7b20d00a62c --- /dev/null +++ b/src/util/xmlpool/de.po @@ -0,0 +1,320 @@ +# German translations for DRI driver options. +# Copyright (C) 2005 Felix Kuehling +# This file is distributed under the same license as the Mesa package. +# Felix Kuehling <[email protected]>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: Mesa 6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-25 22:29-0600\n" +"PO-Revision-Date: 2005-04-11 01:34+0200\n" +"Last-Translator: Felix Kuehling <[email protected]>\n" +"Language-Team: German <[email protected]>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Fehlersuche" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "3D-Beschleunigung abschalten" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Zeige Performanceboxen" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "Aktiviere sofortige Leerung des Stapelpuffers nach jedem Zeichenaufruf" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "" +"Aktiviere sofortige Leerung der GPU-Zwischenspeicher mit jedem Zeichenaufruf" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Bildqualität" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Texturfarbtiefe" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Bevorzuge Farbtiefe des Framebuffers" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Bevorzuge 32 bits pro Texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Bevorzuge 16 bits pro Texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Erzwinge 16 bits pro Texel" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Initialer Maximalwert für anisotropische Texturfilterung" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "Verbiete negative Textur-Detailgradverschiebung" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "" +"Aktiviere S3TC Texturkomprimierung auch wenn die nötige " +"Softwareunterstützung fehlt" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Initiale Farbreduktionsmethode" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Farben runden" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Farben rastern" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Farbrundungsmethode" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Farbkomponenten abrunden" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Zur ähnlichsten Farbe runden" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Farbrasterungsmethode" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Horizontale Fehlerstreuung" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Horizontale Fehlerstreuung, Fehler am Zeilenanfang zurücksetzen" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Geordnete 2D Farbrasterung" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Fließkomma z-Puffer" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "Nachbearbeitungsfilter für Cell Shading" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "Nachbearbeitungsfilter zum Entfernen des Rotkanals" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "Nachbearbeitungsfilter zum Entfernen des Grünkanals" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "Nachbearbeitungsfilter zum Entfernen des Blaukanals" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" +"Morphologische Kantenglättung (Anti-Aliasing) basierend auf Jimenez' MLAA. 0 " +"für deaktiviert, 8 für Standardqualität" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" +"Morphologische Kantenglättung (Anti-Aliasing) basierend auf Jimenez' MLAA. 0 " +"für deaktiviert, 8 für Standardqualität. Farbversion, für 2D-Anwendungen" + +#: t_options.h:230 +msgid "Performance" +msgstr "Leistung" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "TCL-Modus (Transformation, Clipping, Licht)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Benutze die Software-TCL-Pipeline" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Benutze Hardware TCL als erste Stufe der TCL-Pipeline" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Umgehe die TCL-Pipeline" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Umgehe die TCL-Pipeline mit zur Laufzeit erzeugtem, zustandsbasiertem " +"Maschinencode" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Methode zur Begrenzung der Bildverzögerung" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Aktives Warten auf die Grafikhardware" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "Kurze Schlafintervalle beim Warten auf die Grafikhardware" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "" +"Die Grafikhardware eine Softwareunterbrechnung erzeugen lassen und schlafen" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Synchronisation mit der vertikalen Bildwiederholung" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "" +"Niemals mit der Bildwiederholung synchronisieren, Anweisungen der Anwendung " +"ignorieren" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "Initiales Bildinterval 0, Anweisungen der Anwendung gehorchen" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "Initiales Bildinterval 1, Anweisungen der Anwendung gehorchen" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Immer mit der Bildwiederholung synchronisieren, Anwendung wählt das minimale " +"Bildintervall" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "HyperZ zur Leistungssteigerung verwenden" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Anzahl der benutzten Textureinheiten" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Texturfilterqualität versus -geschwindigkeit, auch bekannt als „brilineare“ " +"Texturfilterung" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Benutzte Arten von Texturspeicher" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Aller verfügbarer Speicher" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Nur Grafikspeicher (falls verfügbar)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Nur GART-Speicher (AGP/PCIE) (falls verfügbar)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Funktionalität, die nicht hardwarebeschleunigt ist" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Erweiterung GL_ARB_vertex_program aktivieren" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "" + +#: t_options.h:337 +msgid "Initialization" +msgstr "" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "" + +#~ msgid "Support larger textures not guaranteed to fit into graphics memory" +#~ msgstr "" +#~ "Unterstütze grosse Texturen die evtl. nicht in den Grafikspeicher passen" + +#~ msgid "No" +#~ msgstr "Nein" + +#~ msgid "At least 1 texture must fit under worst-case assumptions" +#~ msgstr "Mindestens 1 Textur muss auch im schlechtesten Fall Platz haben" + +#~ msgid "Announce hardware limits" +#~ msgstr "Benutze Hardware-Limits" diff --git a/src/util/xmlpool/es.po b/src/util/xmlpool/es.po new file mode 100644 index 00000000000..f9d950ac14d --- /dev/null +++ b/src/util/xmlpool/es.po @@ -0,0 +1,332 @@ +# translation of es.po to Spanish +# Spanish translations for PACKAGE package. +# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# David <[email protected]>, 2005. +# David Rubio Miguélez <[email protected]>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-07 02:08-0700\n" +"PO-Revision-Date: 2015-02-23 14:54-0700\n" +"Last-Translator: Alex Henrie <[email protected]>\n" +"Language-Team: Spanish <[email protected]>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.7.4\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Depuración" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "Deshabilitar aceleración 3D" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Mostrar cajas de rendimiento" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "Habilitar vaciado del batchbuffer después de cada llamada de dibujo" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "Habilitar vaciado de los cachés GPU con cada llamada de dibujo" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "Deshabilitar regulación del primer lote después de vaciar" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" +"Forzar que el comportamiento por defecto de las extensiones GLSL sea 'warn'" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "Deshabilitar mezcla de fuente dual" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" +"Deshabilitar continuaciones de línea basadas en barra inversa en el código " +"GLSL" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "Deshabilitar GL_ARB_shader_bit_encoding" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" +"Forzar una versión de GLSL por defecto en los shaders a los cuales les falta " +"una línea #version explícita" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "Permite directivas #extension GLSL en medio de los shaders" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Calidad de imagen" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Profundidad de color de textura" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Preferir profundidad de color del framebuffer" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Preferir 32 bits por texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Preferir 16 bits por texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Forzar a 16 bits por texel" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Valor máximo inicial para filtrado anisotrópico de textura" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "Prohibir valores negativos de Nivel De Detalle (LOD) de texturas" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "" +"Habilitar la compresión de texturas S3TC incluso si el soporte por software " +"no está disponible" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Método inicial de reducción de color" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Colores redondeados" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Colores suavizados" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Método de redondeo de colores" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Redondear hacia abajo los componentes de color" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Redondear al color más cercano" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Método de suavizado de color" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Difusión de error horizontal" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Difusión de error horizontal, reiniciar error al comienzo de línea" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Suavizado de color 2D ordenado" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Búfer de profundidad en coma flotante" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "Un filtro de postprocesamiento para aplicar cel shading a la salida" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "Un filtro de postprocesamiento para eliminar el canal rojo" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "Un filtro de postprocesamiento para eliminar el canal verde" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "Un filtro de postprocesamiento para eliminar el canal azul" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" +"Antialiasing morfológico basado en el MLAA de Jimenez. 0 para deshabilitar, " +"8 para calidad por defecto" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" +"Antialiasing morfológico basado en el MLAA de Jimenez. 0 para deshabilitar, " +"8 para calidad por defecto. Versión en color, usable con aplicaciones GL 2D" + +#: t_options.h:230 +msgid "Performance" +msgstr "Rendimiento" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "Modo TCL (Transformación, Recorte, Iluminación)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Usar tubería TCL por software" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Usar TCL por hardware en la primera fase de la tubería TCL" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Pasar por alto la tubería TCL" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Pasar por alto la tubería TCL con código máquina basado en estados, generado " +"al vuelo" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Método para limitar la latencia de renderización" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Esperar activamente al hardware gráfico" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "Dormir en intervalos cortos mientras se espera al hardware gráfico" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "" +"Permitir que el hardware gráfico emita una interrupción de software y duerma" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Sincronización con el refresco vertical (intervalos de intercambio)" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "" +"No sincronizar nunca con el refresco vertical, ignorar la elección de la " +"aplicación" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "" +"Intervalo de intercambio inicial 0, obedecer la elección de la aplicación" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "" +"Intervalo de intercambio inicial 1, obedecer la elección de la aplicación" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Sincronizar siempre con el refresco vertical, la aplicación elige el " +"intervalo de intercambio mínimo" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "Usar HyperZ para potenciar rendimiento" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Número de unidades de textura usadas" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Calidad de filtrado de textura vs. velocidad, alias filtrado \"brilinear\" " +"de textura" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Tipos de memoria de textura usados" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Toda la memoria disponible" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Solo memoria de tarjeta (si está disponible)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Solo memoria GART (AGP/PCIE) (si está disponible)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Características no aceleradas por hardware" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Habilitar la extensión GL_ARB_vertex_program" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "Misceláneos" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "Crear todos los visuales con búfer de profundidad" + +#: t_options.h:337 +msgid "Initialization" +msgstr "Inicialización" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "Define el dispositivo de gráficos que usar si es posible" + +#: t_options.h:350 +msgid "Gallium Nine" +msgstr "Gallium Nine" + +#: t_options.h:354 +msgid "" +"Define the throttling value. -1 for no throttling, -2 for default (usually " +"2), 0 for glfinish behaviour" +msgstr "" +"Define el valor de regulación. -1 para no regular, -2 para el por defecto " +"(generalmente 2), 0 para el comportamiento de glfinish" + +#: t_options.h:359 +msgid "Use an additional thread to submit buffers." +msgstr "Usar un hilo adicional para entregar los búfer." diff --git a/src/util/xmlpool/fr.po b/src/util/xmlpool/fr.po new file mode 100644 index 00000000000..fa069652c2b --- /dev/null +++ b/src/util/xmlpool/fr.po @@ -0,0 +1,310 @@ +# French translations for DRI driver options. +# Copyright (C) 2005 Stephane Marchesin +# This file is distributed under the same license as the Mesa package. +# Stephane Marchesin <[email protected]>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: Mesa 6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-25 22:29-0600\n" +"PO-Revision-Date: 2005-04-11 01:34+0200\n" +"Last-Translator: Stephane Marchesin <[email protected]>\n" +"Language-Team: French <[email protected]>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Debogage" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "Désactiver l'accélération 3D" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Afficher les boîtes de performance" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Qualité d'image" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Profondeur de texture" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Profondeur de couleur" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Préférer 32 bits par texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Prérérer 16 bits par texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Forcer 16 bits par texel" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Valeur maximale initiale pour le filtrage anisotropique de texture" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "Interdire le LOD bias negatif" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "" +"Activer la compression de texture S3TC même si le support logiciel est absent" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Technique de réduction de couleurs" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Arrondir les valeurs de couleur" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Tramer les couleurs" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Méthode d'arrondi des couleurs" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Arrondi à l'inférieur" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Arrondi au plus proche" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Méthode de tramage" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Diffusion d'erreur horizontale" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Diffusion d'erreur horizontale, réinitialisé pour chaque ligne" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Tramage ordonné des couleurs" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Z-buffer en virgule flottante" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" + +#: t_options.h:230 +msgid "Performance" +msgstr "Performance" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "Mode de TCL (Transformation, Clipping, Eclairage)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Utiliser un pipeline TCL logiciel" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Utiliser le TCL matériel pour le premier niveau de pipeline" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Court-circuiter le pipeline TCL" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Court-circuiter le pipeline TCL par une machine à états qui génère le codede " +"TCL à la volée" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Méthode d'attente de la carte graphique" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Attente active de la carte graphique" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "Attente utilisant usleep()" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "Utiliser les interruptions" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Synchronisation de l'affichage avec le balayage vertical" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "" +"Ne jamais synchroniser avec le balayage vertical, ignorer le choix de " +"l'application" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "" +"Ne pas synchroniser avec le balayage vertical par défaut, mais obéir au " +"choix de l'application" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "" +"Synchroniser avec le balayage vertical par défaut, mais obéir au choix de " +"l'application" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Toujours synchroniser avec le balayage vertical, l'application choisit " +"l'intervalle minimal" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "Utiliser le HyperZ pour améliorer les performances" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Nombre d'unités de texture" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Qualité/performance du filtrage trilinéaire de texture (filtrage brilinéaire)" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Types de mémoire de texture" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Utiliser toute la mémoire disponible" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Utiliser uniquement la mémoire graphique (si disponible)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Utiliser uniquement la mémoire GART (AGP/PCIE) (si disponible)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Fonctionnalités ne bénéficiant pas d'une accélération matérielle" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Activer l'extension GL_ARB_vertex_program" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "" + +#: t_options.h:337 +msgid "Initialization" +msgstr "" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "" + +#~ msgid "" +#~ "Enable hack to allow larger textures with texture compression on radeon/" +#~ "r200" +#~ msgstr "" +#~ "Activer le hack permettant l'utilisation de textures de grande taille " +#~ "avec la compression de textures sur radeon/r200" diff --git a/src/util/xmlpool/gen_xmlpool.py b/src/util/xmlpool/gen_xmlpool.py new file mode 100644 index 00000000000..eb68a65174b --- /dev/null +++ b/src/util/xmlpool/gen_xmlpool.py @@ -0,0 +1,203 @@ + +# +# Usage: +# gen_xmlpool.py /path/to/t_option.h localedir lang lang lang ... +# +# For each given language, this script expects to find a .mo file at +# `{localedir}/{language}/LC_MESSAGES/options.mo`. +# + +import sys +import gettext +import re + +# Path to t_options.h +template_header_path = sys.argv[1] + +localedir = sys.argv[2] + +# List of supported languages +languages = sys.argv[3:] + +# Escape special characters in C strings +def escapeCString (s): + escapeSeqs = {'\a' : '\\a', '\b' : '\\b', '\f' : '\\f', '\n' : '\\n', + '\r' : '\\r', '\t' : '\\t', '\v' : '\\v', '\\' : '\\\\'} + # " -> '' is a hack. Quotes (") aren't possible in XML attributes. + # Better use Unicode characters for typographic quotes in option + # descriptions and translations. + i = 0 + r = '' + while i < len(s): + # Special case: escape double quote with \u201c or \u201d, depending + # on whether it's an open or close quote. This is needed because plain + # double quotes are not possible in XML attributes. + if s[i] == '"': + if i == len(s)-1 or s[i+1].isspace(): + # close quote + q = u'\u201c' + else: + # open quote + q = u'\u201d' + r = r + q + elif escapeSeqs.has_key(s[i]): + r = r + escapeSeqs[s[i]] + else: + r = r + s[i] + i = i + 1 + return r + +# Expand escape sequences in C strings (needed for gettext lookup) +def expandCString (s): + escapeSeqs = {'a' : '\a', 'b' : '\b', 'f' : '\f', 'n' : '\n', + 'r' : '\r', 't' : '\t', 'v' : '\v', + '"' : '"', '\\' : '\\'} + i = 0 + escape = False + hexa = False + octa = False + num = 0 + digits = 0 + r = '' + while i < len(s): + if not escape: + if s[i] == '\\': + escape = True + else: + r = r + s[i] + elif hexa: + if (s[i] >= '0' and s[i] <= '9') or \ + (s[i] >= 'a' and s[i] <= 'f') or \ + (s[i] >= 'A' and s[i] <= 'F'): + num = num * 16 + int(s[i],16) + digits = digits + 1 + else: + digits = 2 + if digits >= 2: + hexa = False + escape = False + r = r + chr(num) + elif octa: + if s[i] >= '0' and s[i] <= '7': + num = num * 8 + int(s[i],8) + digits = digits + 1 + else: + digits = 3 + if digits >= 3: + octa = False + escape = False + r = r + chr(num) + else: + if escapeSeqs.has_key(s[i]): + r = r + escapeSeqs[s[i]] + escape = False + elif s[i] >= '0' and s[i] <= '7': + octa = True + num = int(s[i],8) + if num <= 3: + digits = 1 + else: + digits = 2 + elif s[i] == 'x' or s[i] == 'X': + hexa = True + num = 0 + digits = 0 + else: + r = r + s[i] + escape = False + i = i + 1 + return r + +# Expand matches. The first match is always a DESC or DESC_BEGIN match. +# Subsequent matches are ENUM matches. +# +# DESC, DESC_BEGIN format: \1 \2=<lang> \3 \4=gettext(" \5=<text> \6=") \7 +# ENUM format: \1 \2=gettext(" \3=<text> \4=") \5 +def expandMatches (matches, translations, end=None): + assert len(matches) > 0 + nTranslations = len(translations) + i = 0 + # Expand the description+enums for all translations + for lang,trans in translations: + i = i + 1 + # Make sure that all but the last line of a simple description + # are extended with a backslash. + suffix = '' + if len(matches) == 1 and i < len(translations) and \ + not matches[0].expand (r'\7').endswith('\\'): + suffix = ' \\' + # Expand the description line. Need to use ugettext in order to allow + # non-ascii unicode chars in the original English descriptions. + text = escapeCString (trans.ugettext (unicode (expandCString ( + matches[0].expand (r'\5')), "utf-8"))).encode("utf-8") + print matches[0].expand (r'\1' + lang + r'\3"' + text + r'"\7') + suffix + # Expand any subsequent enum lines + for match in matches[1:]: + text = escapeCString (trans.ugettext (unicode (expandCString ( + match.expand (r'\3')), "utf-8"))).encode("utf-8") + print match.expand (r'\1"' + text + r'"\5') + + # Expand description end + if end: + print end, + +# Compile a list of translation classes to all supported languages. +# The first translation is always a NullTranslations. +translations = [("en", gettext.NullTranslations())] +for lang in languages: + try: + trans = gettext.translation ("options", localedir, [lang]) + except IOError: + sys.stderr.write ("Warning: language '%s' not found.\n" % lang) + continue + translations.append ((lang, trans)) + +# Regular expressions: +reLibintl_h = re.compile (r'#\s*include\s*<libintl.h>') +reDESC = re.compile (r'(\s*DRI_CONF_DESC\s*\(\s*)([a-z]+)(\s*,\s*)(gettext\s*\(\s*")(.*)("\s*\))(\s*\)[ \t]*\\?)$') +reDESC_BEGIN = re.compile (r'(\s*DRI_CONF_DESC_BEGIN\s*\(\s*)([a-z]+)(\s*,\s*)(gettext\s*\(\s*")(.*)("\s*\))(\s*\)[ \t]*\\?)$') +reENUM = re.compile (r'(\s*DRI_CONF_ENUM\s*\([^,]+,\s*)(gettext\s*\(\s*")(.*)("\s*\))(\s*\)[ \t]*\\?)$') +reDESC_END = re.compile (r'\s*DRI_CONF_DESC_END') + +# Print a header +print \ +"/***********************************************************************\n" \ +" *** THIS FILE IS GENERATED AUTOMATICALLY. DON'T EDIT! ***\n" \ +" ***********************************************************************/" + +# Process the options template and generate options.h with all +# translations. +template = file (template_header_path, "r") +descMatches = [] +for line in template: + if len(descMatches) > 0: + matchENUM = reENUM .match (line) + matchDESC_END = reDESC_END.match (line) + if matchENUM: + descMatches.append (matchENUM) + elif matchDESC_END: + expandMatches (descMatches, translations, line) + descMatches = [] + else: + sys.stderr.write ( + "Warning: unexpected line inside description dropped:\n%s\n" \ + % line) + continue + if reLibintl_h.search (line): + # Ignore (comment out) #include <libintl.h> + print "/* %s * commented out by gen_xmlpool.py */" % line + continue + matchDESC = reDESC .match (line) + matchDESC_BEGIN = reDESC_BEGIN.match (line) + if matchDESC: + assert len(descMatches) == 0 + expandMatches ([matchDESC], translations) + elif matchDESC_BEGIN: + assert len(descMatches) == 0 + descMatches = [matchDESC_BEGIN] + else: + print line, + +if len(descMatches) > 0: + sys.stderr.write ("Warning: unterminated description at end of file.\n") + expandMatches (descMatches, translations) diff --git a/src/util/xmlpool/nl.po b/src/util/xmlpool/nl.po new file mode 100644 index 00000000000..86cb6e96d96 --- /dev/null +++ b/src/util/xmlpool/nl.po @@ -0,0 +1,311 @@ +# Dutch translations for PACKAGE package. +# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# <[email protected]>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-25 22:29-0600\n" +"PO-Revision-Date: 2005-04-12 20:09+0200\n" +"Last-Translator: Manfred Stienstra <[email protected]>\n" +"Language-Team: Dutch <[email protected]>\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Debuggen" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "3D versnelling uitschakelen" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Laat prestatie boxjes zien" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Beeldkwaliteit" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Textuurkleurendiepte" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Prefereer kaderbufferkleurdiepte" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Prefereer 32 bits per texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Prefereer 16 bits per texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Dwing 16 bits per texel af" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Initïele maximum waarde voor anisotrophische textuur filtering" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "Verbied negatief niveau detailonderscheid (LOD) van texturen" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "" +"Schakel S3TC textuurcompressie in, zelfs als softwareondersteuning niet " +"aanwezig is" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Initïele kleurreductie methode" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Rond kleuren af" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Rasteriseer kleuren" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Kleurafrondingmethode" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Rond kleurencomponenten af naar beneden" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Rond af naar dichtsbijzijnde kleur" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Kleurrasteriseringsmethode" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Horizontale foutdiffusie" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Horizontale foutdiffusie, zet fout bij lijnbegin terug" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Geordende 2D kleurrasterisering" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Dieptebuffer als commagetal" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" + +#: t_options.h:230 +msgid "Performance" +msgstr "Prestatie" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "TCL-modus (Transformatie, Clipping, Licht)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Gebruik software TCL pijpleiding" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Gebruik hardware TCL as eerste TCL pijpleiding trap" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Omzeil de TCL pijpleiding" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Omzeil de TCL pijpleiding met staatgebaseerde machinecode die tijdens " +"executie gegenereerd wordt" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Methode om beeldopbouwvertraging te onderdrukken" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Actief wachten voor de grafische hardware" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "" +"Slaap voor korte intervallen tijdens het wachten op de grafische hardware" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "" +"Laat de grafische hardware een software onderbreking uitzenden en in slaap " +"vallen" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Synchronisatie met verticale verversing (interval omwisselen)" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "" +"Nooit synchroniseren met verticale verversing, negeer de keuze van de " +"applicatie" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "Initïeel omwisselingsinterval 0, honoreer de keuze van de applicatie" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "Initïeel omwisselingsinterval 1, honoreer de keuze van de applicatie" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Synchroniseer altijd met verticale verversing, de applicatie kiest het " +"minimum omwisselingsinterval" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "Gebruik HyperZ om de prestaties te verbeteren" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Aantal textuureenheden in gebruik" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Textuurfilterkwaliteit versus -snelheid, ookwel bekend als “brilineaire” " +"textuurfiltering" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Gebruikte soorten textuurgeheugen" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Al het beschikbaar geheugen" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Alleen geheugen op de kaart (als het aanwezig is)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Alleen GART (AGP/PCIE) geheugen (als het aanwezig is)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Eigenschappen die niet hardwareversneld zijn" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Zet uitbreiding GL_ARB_vertex_program aan" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "" + +#: t_options.h:337 +msgid "Initialization" +msgstr "" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "" + +#~ msgid "" +#~ "Enable hack to allow larger textures with texture compression on radeon/" +#~ "r200" +#~ msgstr "" +#~ "Schakel hack in om met textuurcompressie grotere texturen toe te staan op " +#~ "een radeon/r200" diff --git a/src/util/xmlpool/sv.po b/src/util/xmlpool/sv.po new file mode 100644 index 00000000000..d8d7353f408 --- /dev/null +++ b/src/util/xmlpool/sv.po @@ -0,0 +1,309 @@ +# Swedish translation of DRI driver options. +# Copyright (C) Free Software Foundation, Inc. +# This file is distributed under the same license as the Mesa package. +# Daniel Nylander <[email protected]>, 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: Mesa DRI\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-25 22:29-0600\n" +"PO-Revision-Date: 2006-09-18 10:56+0100\n" +"Last-Translator: Daniel Nylander <[email protected]>\n" +"Language-Team: Swedish <[email protected]>\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: t_options.h:56 +msgid "Debugging" +msgstr "Felsökning" + +#: t_options.h:60 +msgid "Disable 3D acceleration" +msgstr "Inaktivera 3D-accelerering" + +#: t_options.h:65 +msgid "Show performance boxes" +msgstr "Visa prestandarutor" + +#: t_options.h:70 +msgid "Enable flushing batchbuffer after each draw call" +msgstr "" + +#: t_options.h:75 +msgid "Enable flushing GPU caches with each draw call" +msgstr "" + +#: t_options.h:80 +msgid "Disable throttling on first batch after flush" +msgstr "" + +#: t_options.h:85 +msgid "Force GLSL extension default behavior to 'warn'" +msgstr "" + +#: t_options.h:90 +msgid "Disable dual source blending" +msgstr "" + +#: t_options.h:95 +msgid "Disable backslash-based line continuations in GLSL source" +msgstr "" + +#: t_options.h:100 +msgid "Disable GL_ARB_shader_bit_encoding" +msgstr "" + +#: t_options.h:105 +msgid "" +"Force a default GLSL version for shaders that lack an explicit #version line" +msgstr "" + +#: t_options.h:110 +msgid "Allow GLSL #extension directives in the middle of shaders" +msgstr "" + +#: t_options.h:120 +msgid "Image Quality" +msgstr "Bildkvalitet" + +#: t_options.h:133 +msgid "Texture color depth" +msgstr "Färgdjup för texturer" + +#: t_options.h:134 +msgid "Prefer frame buffer color depth" +msgstr "Föredra färgdjupet för framebuffer" + +#: t_options.h:135 +msgid "Prefer 32 bits per texel" +msgstr "Föredra 32 bitar per texel" + +#: t_options.h:136 +msgid "Prefer 16 bits per texel" +msgstr "Föredra 16 bitar per texel" + +#: t_options.h:137 +msgid "Force 16 bits per texel" +msgstr "Tvinga 16 bitar per texel" + +#: t_options.h:143 +msgid "Initial maximum value for anisotropic texture filtering" +msgstr "Initialt maximalt värde för anisotropisk texturfiltrering" + +#: t_options.h:148 +msgid "Forbid negative texture LOD bias" +msgstr "Förbjud negativ LOD-kompensation för texturer" + +#: t_options.h:153 +msgid "" +"Enable S3TC texture compression even if software support is not available" +msgstr "Aktivera S3TC-texturkomprimering även om programvarustöd saknas" + +#: t_options.h:160 +msgid "Initial color reduction method" +msgstr "Initial färgminskningsmetod" + +#: t_options.h:161 +msgid "Round colors" +msgstr "Avrunda färger" + +#: t_options.h:162 +msgid "Dither colors" +msgstr "Utjämna färger" + +#: t_options.h:170 +msgid "Color rounding method" +msgstr "Färgavrundningsmetod" + +#: t_options.h:171 +msgid "Round color components downward" +msgstr "Avrunda färdkomponenter nedåt" + +#: t_options.h:172 +msgid "Round to nearest color" +msgstr "Avrunda till närmsta färg" + +#: t_options.h:181 +msgid "Color dithering method" +msgstr "Färgutjämningsmetod" + +#: t_options.h:182 +msgid "Horizontal error diffusion" +msgstr "Horisontell felspridning" + +#: t_options.h:183 +msgid "Horizontal error diffusion, reset error at line start" +msgstr "Horisontell felspridning, återställ fel vid radbörjan" + +#: t_options.h:184 +msgid "Ordered 2D color dithering" +msgstr "Ordnad 2D-färgutjämning" + +#: t_options.h:190 +msgid "Floating point depth buffer" +msgstr "Buffert för flytande punktdjup" + +#: t_options.h:195 +msgid "A post-processing filter to cel-shade the output" +msgstr "" + +#: t_options.h:200 +msgid "A post-processing filter to remove the red channel" +msgstr "" + +#: t_options.h:205 +msgid "A post-processing filter to remove the green channel" +msgstr "" + +#: t_options.h:210 +msgid "A post-processing filter to remove the blue channel" +msgstr "" + +#: t_options.h:215 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality" +msgstr "" + +#: t_options.h:220 +msgid "" +"Morphological anti-aliasing based on Jimenez\\' MLAA. 0 to disable, 8 for " +"default quality. Color version, usable with 2d GL apps" +msgstr "" + +#: t_options.h:230 +msgid "Performance" +msgstr "Prestanda" + +#: t_options.h:238 +msgid "TCL mode (Transformation, Clipping, Lighting)" +msgstr "TCL-läge (Transformation, Clipping, Lighting)" + +#: t_options.h:239 +msgid "Use software TCL pipeline" +msgstr "Använd programvaru-TCL-rörledning" + +#: t_options.h:240 +msgid "Use hardware TCL as first TCL pipeline stage" +msgstr "Använd maskinvaru-TCL som första TCL-rörledningssteg" + +#: t_options.h:241 +msgid "Bypass the TCL pipeline" +msgstr "Kringgå TCL-rörledningen" + +#: t_options.h:242 +msgid "" +"Bypass the TCL pipeline with state-based machine code generated on-the-fly" +msgstr "" +"Kringgå TCL-rörledningen med tillståndsbaserad maskinkod som direktgenereras" + +#: t_options.h:251 +msgid "Method to limit rendering latency" +msgstr "Metod för att begränsa renderingslatens" + +#: t_options.h:252 +msgid "Busy waiting for the graphics hardware" +msgstr "Upptagen med att vänta på grafikhårdvaran" + +#: t_options.h:253 +msgid "Sleep for brief intervals while waiting for the graphics hardware" +msgstr "Sov i korta intervall under väntan på grafikhårdvaran" + +#: t_options.h:254 +msgid "Let the graphics hardware emit a software interrupt and sleep" +msgstr "Låt grafikhårdvaran sända ut ett programvaruavbrott och sov" + +#: t_options.h:264 +msgid "Synchronization with vertical refresh (swap intervals)" +msgstr "Synkronisering med vertikal uppdatering (växlingsintervall)" + +#: t_options.h:265 +msgid "Never synchronize with vertical refresh, ignore application's choice" +msgstr "Synkronisera aldrig med vertikal uppdatering, ignorera programmets val" + +#: t_options.h:266 +msgid "Initial swap interval 0, obey application's choice" +msgstr "Initialt växlingsintervall 0, följ programmets val" + +#: t_options.h:267 +msgid "Initial swap interval 1, obey application's choice" +msgstr "Initialt växlingsintervall 1, följ programmets val" + +#: t_options.h:268 +msgid "" +"Always synchronize with vertical refresh, application chooses the minimum " +"swap interval" +msgstr "" +"Synkronisera alltid med vertikal uppdatering, programmet väljer den minsta " +"växlingsintervallen" + +#: t_options.h:276 +msgid "Use HyperZ to boost performance" +msgstr "Använd HyperZ för att maximera prestandan" + +#: t_options.h:281 +msgid "Number of texture units used" +msgstr "Antal använda texturenheter" + +#: t_options.h:286 +msgid "Texture filtering quality vs. speed, AKA “brilinear” texture filtering" +msgstr "" +"Texturfiltreringskvalitet mot hastighet, även kallad \"brilinear\"-" +"texturfiltrering" + +#: t_options.h:294 +msgid "Used types of texture memory" +msgstr "Använda typer av texturminne" + +#: t_options.h:295 +msgid "All available memory" +msgstr "Allt tillgängligt minne" + +#: t_options.h:296 +msgid "Only card memory (if available)" +msgstr "Endast kortminne (om tillgängligt)" + +#: t_options.h:297 +msgid "Only GART (AGP/PCIE) memory (if available)" +msgstr "Endast GART-minne (AGP/PCIE) (om tillgängligt)" + +#: t_options.h:309 +msgid "Features that are not hardware-accelerated" +msgstr "Funktioner som inte är hårdvaruaccelererade" + +#: t_options.h:313 +msgid "Enable extension GL_ARB_vertex_program" +msgstr "Aktivera tillägget GL_ARB_vertex_program" + +#: t_options.h:323 +msgid "Miscellaneous" +msgstr "" + +#: t_options.h:327 +msgid "Create all visuals with a depth buffer" +msgstr "" + +#: t_options.h:337 +msgid "Initialization" +msgstr "" + +#: t_options.h:341 +msgid "Define the graphic device to use if possible" +msgstr "" + +#~ msgid "Support larger textures not guaranteed to fit into graphics memory" +#~ msgstr "" +#~ "Stöd för större texturer är inte garanterat att passa i grafikminnet" + +#~ msgid "No" +#~ msgstr "Nej" + +#~ msgid "At least 1 texture must fit under worst-case assumptions" +#~ msgstr "Åtminstone en textur måste passa för antaget sämsta förhållande" + +#~ msgid "Announce hardware limits" +#~ msgstr "Annonsera hårdvarubegränsningar" diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h new file mode 100644 index 00000000000..e308839aa78 --- /dev/null +++ b/src/util/xmlpool/t_options.h @@ -0,0 +1,431 @@ +/* + * XML DRI client-side driver configuration + * Copyright (C) 2003 Felix Kuehling + * + * 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 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 + * FELIX KUEHLING, OR ANY OTHER CONTRIBUTORS 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. + * + */ +/** + * \file t_options.h + * \brief Templates of common options + * \author Felix Kuehling + * + * This file defines macros for common options that can be used to + * construct driConfigOptions in the drivers. This file is only a + * template containing English descriptions for options wrapped in + * gettext(). xgettext can be used to extract translatable + * strings. These strings can then be translated by anyone familiar + * with GNU gettext. gen_xmlpool.py takes this template and fills in + * all the translations. The result (options.h) is included by + * xmlpool.h which in turn can be included by drivers. + * + * The macros used to describe otions in this file are defined in + * ../xmlpool.h. + */ + +/* This is needed for xgettext to extract translatable strings. + * gen_xmlpool.py will discard this line. */ +#include <libintl.h> + +/* + * predefined option sections and options with multi-lingual descriptions + */ + + +/** + * \brief Debugging options + */ +#define DRI_CONF_SECTION_DEBUG \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Debugging")) + +#define DRI_CONF_NO_RAST(def) \ +DRI_CONF_OPT_BEGIN_B(no_rast, def) \ + DRI_CONF_DESC(en,gettext("Disable 3D acceleration")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PERFORMANCE_BOXES(def) \ +DRI_CONF_OPT_BEGIN_B(performance_boxes, def) \ + DRI_CONF_DESC(en,gettext("Show performance boxes")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_BATCH(def) \ +DRI_CONF_OPT_BEGIN_B(always_flush_batch, def) \ + DRI_CONF_DESC(en,gettext("Enable flushing batchbuffer after each draw call")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_CACHE(def) \ +DRI_CONF_OPT_BEGIN_B(always_flush_cache, def) \ + DRI_CONF_DESC(en,gettext("Enable flushing GPU caches with each draw call")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_THROTTLING(def) \ +DRI_CONF_OPT_BEGIN_B(disable_throttling, def) \ + DRI_CONF_DESC(en,gettext("Disable throttling on first batch after flush")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(def) \ +DRI_CONF_OPT_BEGIN_B(force_glsl_extensions_warn, def) \ + DRI_CONF_DESC(en,gettext("Force GLSL extension default behavior to 'warn'")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED(def) \ +DRI_CONF_OPT_BEGIN_B(disable_blend_func_extended, def) \ + DRI_CONF_DESC(en,gettext("Disable dual source blending")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION(def) \ +DRI_CONF_OPT_BEGIN_B(dual_color_blend_by_location, def) \ + DRI_CONF_DESC(en,gettext("Identify dual color blending sources by location rather than index")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS(def) \ +DRI_CONF_OPT_BEGIN_B(disable_glsl_line_continuations, def) \ + DRI_CONF_DESC(en,gettext("Disable backslash-based line continuations in GLSL source")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_SHADER_BIT_ENCODING(def) \ +DRI_CONF_OPT_BEGIN_B(disable_shader_bit_encoding, def) \ + DRI_CONF_DESC(en,gettext("Disable GL_ARB_shader_bit_encoding")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_FORCE_GLSL_VERSION(def) \ +DRI_CONF_OPT_BEGIN_V(force_glsl_version, int, def, "0:999") \ + DRI_CONF_DESC(en,gettext("Force a default GLSL version for shaders that lack an explicit #version line")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER(def) \ +DRI_CONF_OPT_BEGIN_B(allow_glsl_extension_directive_midshader, def) \ + DRI_CONF_DESC(en,gettext("Allow GLSL #extension directives in the middle of shaders")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION(def) \ +DRI_CONF_OPT_BEGIN_B(allow_glsl_builtin_variable_redeclaration, def) \ + DRI_CONF_DESC(en,gettext("Allow GLSL built-in variables to be redeclared verbatim")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION(def) \ +DRI_CONF_OPT_BEGIN_B(allow_higher_compat_version, def) \ + DRI_CONF_DESC(en,gettext("Allow a higher compat profile (version 3.1+) for apps that request it")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_FORCE_GLSL_ABS_SQRT(def) \ +DRI_CONF_OPT_BEGIN_B(force_glsl_abs_sqrt, def) \ + DRI_CONF_DESC(en,gettext("Force computing the absolute value for sqrt() and inversesqrt()")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_GLSL_CORRECT_DERIVATIVES_AFTER_DISCARD(def) \ +DRI_CONF_OPT_BEGIN_B(glsl_correct_derivatives_after_discard, def) \ + DRI_CONF_DESC(en,gettext("Implicit and explicit derivatives after a discard behave as if the discard didn't happen")) \ +DRI_CONF_OPT_END + + +/** + * \brief Image quality-related options + */ +#define DRI_CONF_SECTION_QUALITY \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Image Quality")) + +#define DRI_CONF_EXCESS_MIPMAP(def) \ +DRI_CONF_OPT_BEGIN_B(excess_mipmap, def) \ + DRI_CONF_DESC(en,"Enable extra mipmap level") \ +DRI_CONF_OPT_END + +#define DRI_CONF_TEXTURE_DEPTH_FB 0 +#define DRI_CONF_TEXTURE_DEPTH_32 1 +#define DRI_CONF_TEXTURE_DEPTH_16 2 +#define DRI_CONF_TEXTURE_DEPTH_FORCE_16 3 +#define DRI_CONF_TEXTURE_DEPTH(def) \ +DRI_CONF_OPT_BEGIN_V(texture_depth,enum,def,"0:3") \ + DRI_CONF_DESC_BEGIN(en,gettext("Texture color depth")) \ + DRI_CONF_ENUM(0,gettext("Prefer frame buffer color depth")) \ + DRI_CONF_ENUM(1,gettext("Prefer 32 bits per texel")) \ + DRI_CONF_ENUM(2,gettext("Prefer 16 bits per texel")) \ + DRI_CONF_ENUM(3,gettext("Force 16 bits per texel")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_DEF_MAX_ANISOTROPY(def,range) \ +DRI_CONF_OPT_BEGIN_V(def_max_anisotropy,float,def,range) \ + DRI_CONF_DESC(en,gettext("Initial maximum value for anisotropic texture filtering")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NO_NEG_LOD_BIAS(def) \ +DRI_CONF_OPT_BEGIN_B(no_neg_lod_bias, def) \ + DRI_CONF_DESC(en,gettext("Forbid negative texture LOD bias")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_FORCE_S3TC_ENABLE(def) \ +DRI_CONF_OPT_BEGIN_B(force_s3tc_enable, def) \ + DRI_CONF_DESC(en,gettext("Enable S3TC texture compression even if software support is not available")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PRECISE_TRIG(def) \ +DRI_CONF_OPT_BEGIN_B(precise_trig, def) \ + DRI_CONF_DESC(en,gettext("Prefer accuracy over performance in trig functions")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_COLOR_REDUCTION_ROUND 0 +#define DRI_CONF_COLOR_REDUCTION_DITHER 1 +#define DRI_CONF_COLOR_REDUCTION(def) \ +DRI_CONF_OPT_BEGIN_V(color_reduction,enum,def,"0:1") \ + DRI_CONF_DESC_BEGIN(en,gettext("Initial color reduction method")) \ + DRI_CONF_ENUM(0,gettext("Round colors")) \ + DRI_CONF_ENUM(1,gettext("Dither colors")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_ROUND_TRUNC 0 +#define DRI_CONF_ROUND_ROUND 1 +#define DRI_CONF_ROUND_MODE(def) \ +DRI_CONF_OPT_BEGIN_V(round_mode,enum,def,"0:1") \ + DRI_CONF_DESC_BEGIN(en,gettext("Color rounding method")) \ + DRI_CONF_ENUM(0,gettext("Round color components downward")) \ + DRI_CONF_ENUM(1,gettext("Round to nearest color")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_DITHER_XERRORDIFF 0 +#define DRI_CONF_DITHER_XERRORDIFFRESET 1 +#define DRI_CONF_DITHER_ORDERED 2 +#define DRI_CONF_DITHER_MODE(def) \ +DRI_CONF_OPT_BEGIN_V(dither_mode,enum,def,"0:2") \ + DRI_CONF_DESC_BEGIN(en,gettext("Color dithering method")) \ + DRI_CONF_ENUM(0,gettext("Horizontal error diffusion")) \ + DRI_CONF_ENUM(1,gettext("Horizontal error diffusion, reset error at line start")) \ + DRI_CONF_ENUM(2,gettext("Ordered 2D color dithering")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_FLOAT_DEPTH(def) \ +DRI_CONF_OPT_BEGIN_B(float_depth, def) \ + DRI_CONF_DESC(en,gettext("Floating point depth buffer")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_CELSHADE(def) \ +DRI_CONF_OPT_BEGIN_V(pp_celshade,enum,def,"0:1") \ + DRI_CONF_DESC(en,gettext("A post-processing filter to cel-shade the output")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_NORED(def) \ +DRI_CONF_OPT_BEGIN_V(pp_nored,enum,def,"0:1") \ + DRI_CONF_DESC(en,gettext("A post-processing filter to remove the red channel")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_NOGREEN(def) \ +DRI_CONF_OPT_BEGIN_V(pp_nogreen,enum,def,"0:1") \ + DRI_CONF_DESC(en,gettext("A post-processing filter to remove the green channel")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_NOBLUE(def) \ +DRI_CONF_OPT_BEGIN_V(pp_noblue,enum,def,"0:1") \ + DRI_CONF_DESC(en,gettext("A post-processing filter to remove the blue channel")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_JIMENEZMLAA(def,min,max) \ +DRI_CONF_OPT_BEGIN_V(pp_jimenezmlaa,int,def, # min ":" # max ) \ + DRI_CONF_DESC(en,gettext("Morphological anti-aliasing based on Jimenez\\\' MLAA. 0 to disable, 8 for default quality")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_PP_JIMENEZMLAA_COLOR(def,min,max) \ +DRI_CONF_OPT_BEGIN_V(pp_jimenezmlaa_color,int,def, # min ":" # max ) \ + DRI_CONF_DESC(en,gettext("Morphological anti-aliasing based on Jimenez\\\' MLAA. 0 to disable, 8 for default quality. Color version, usable with 2d GL apps")) \ +DRI_CONF_OPT_END + + + +/** + * \brief Performance-related options + */ +#define DRI_CONF_SECTION_PERFORMANCE \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Performance")) + +#define DRI_CONF_TCL_SW 0 +#define DRI_CONF_TCL_PIPELINED 1 +#define DRI_CONF_TCL_VTXFMT 2 +#define DRI_CONF_TCL_CODEGEN 3 +#define DRI_CONF_TCL_MODE(def) \ +DRI_CONF_OPT_BEGIN_V(tcl_mode,enum,def,"0:3") \ + DRI_CONF_DESC_BEGIN(en,gettext("TCL mode (Transformation, Clipping, Lighting)")) \ + DRI_CONF_ENUM(0,gettext("Use software TCL pipeline")) \ + DRI_CONF_ENUM(1,gettext("Use hardware TCL as first TCL pipeline stage")) \ + DRI_CONF_ENUM(2,gettext("Bypass the TCL pipeline")) \ + DRI_CONF_ENUM(3,gettext("Bypass the TCL pipeline with state-based machine code generated on-the-fly")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_FTHROTTLE_BUSY 0 +#define DRI_CONF_FTHROTTLE_USLEEPS 1 +#define DRI_CONF_FTHROTTLE_IRQS 2 +#define DRI_CONF_FTHROTTLE_MODE(def) \ +DRI_CONF_OPT_BEGIN_V(fthrottle_mode,enum,def,"0:2") \ + DRI_CONF_DESC_BEGIN(en,gettext("Method to limit rendering latency")) \ + DRI_CONF_ENUM(0,gettext("Busy waiting for the graphics hardware")) \ + DRI_CONF_ENUM(1,gettext("Sleep for brief intervals while waiting for the graphics hardware")) \ + DRI_CONF_ENUM(2,gettext("Let the graphics hardware emit a software interrupt and sleep")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_VBLANK_NEVER 0 +#define DRI_CONF_VBLANK_DEF_INTERVAL_0 1 +#define DRI_CONF_VBLANK_DEF_INTERVAL_1 2 +#define DRI_CONF_VBLANK_ALWAYS_SYNC 3 +#define DRI_CONF_VBLANK_MODE(def) \ +DRI_CONF_OPT_BEGIN_V(vblank_mode,enum,def,"0:3") \ + DRI_CONF_DESC_BEGIN(en,gettext("Synchronization with vertical refresh (swap intervals)")) \ + DRI_CONF_ENUM(0,gettext("Never synchronize with vertical refresh, ignore application's choice")) \ + DRI_CONF_ENUM(1,gettext("Initial swap interval 0, obey application's choice")) \ + DRI_CONF_ENUM(2,gettext("Initial swap interval 1, obey application's choice")) \ + DRI_CONF_ENUM(3,gettext("Always synchronize with vertical refresh, application chooses the minimum swap interval")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_HYPERZ_DISABLED 0 +#define DRI_CONF_HYPERZ_ENABLED 1 +#define DRI_CONF_HYPERZ(def) \ +DRI_CONF_OPT_BEGIN_B(hyperz, def) \ + DRI_CONF_DESC(en,gettext("Use HyperZ to boost performance")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_MAX_TEXTURE_UNITS(def,min,max) \ +DRI_CONF_OPT_BEGIN_V(texture_units,int,def, # min ":" # max ) \ + DRI_CONF_DESC(en,gettext("Number of texture units used")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_TEXTURE_BLEND_QUALITY(def,range) \ +DRI_CONF_OPT_BEGIN_V(texture_blend_quality,float,def,range) \ + DRI_CONF_DESC(en,gettext("Texture filtering quality vs. speed, AKA “brilinear” texture filtering")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_TEXTURE_HEAPS_ALL 0 +#define DRI_CONF_TEXTURE_HEAPS_CARD 1 +#define DRI_CONF_TEXTURE_HEAPS_GART 2 +#define DRI_CONF_TEXTURE_HEAPS(def) \ +DRI_CONF_OPT_BEGIN_V(texture_heaps,enum,def,"0:2") \ + DRI_CONF_DESC_BEGIN(en,gettext("Used types of texture memory")) \ + DRI_CONF_ENUM(0,gettext("All available memory")) \ + DRI_CONF_ENUM(1,gettext("Only card memory (if available)")) \ + DRI_CONF_ENUM(2,gettext("Only GART (AGP/PCIE) memory (if available)")) \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + +#define DRI_CONF_MESA_GLTHREAD(def) \ +DRI_CONF_OPT_BEGIN_B(mesa_glthread, def) \ + DRI_CONF_DESC(en,gettext("Enable offloading GL driver work to a separate thread")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_MESA_NO_ERROR(def) \ +DRI_CONF_OPT_BEGIN_B(mesa_no_error, def) \ + DRI_CONF_DESC(en,gettext("Disable GL driver error checking")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_EXT_BUFFER_AGE(def) \ +DRI_CONF_OPT_BEGIN_B(glx_disable_ext_buffer_age, def) \ + DRI_CONF_DESC(en, gettext("Disable the GLX_EXT_buffer_age extension")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_DISABLE_OML_SYNC_CONTROL(def) \ +DRI_CONF_OPT_BEGIN_B(glx_disable_oml_sync_control, def) \ + DRI_CONF_DESC(en, gettext("Disable the GLX_OML_sync_control extension")) \ +DRI_CONF_OPT_END + + +/** + * \brief Software-fallback options. To allow using features (like + * GL_ARB_vertex_program) on GPUs that don't otherwise support the feature. + */ +#define DRI_CONF_SECTION_SOFTWARE \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Features that are not hardware-accelerated")) + +#define DRI_CONF_ARB_VERTEX_PROGRAM(def) \ +DRI_CONF_OPT_BEGIN_B(arb_vertex_program, def) \ + DRI_CONF_DESC(en,gettext("Enable extension GL_ARB_vertex_program")) \ +DRI_CONF_OPT_END + + + +/** + * \brief Miscellaneous configuration options + */ +#define DRI_CONF_SECTION_MISCELLANEOUS \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Miscellaneous")) + +#define DRI_CONF_ALWAYS_HAVE_DEPTH_BUFFER(def) \ +DRI_CONF_OPT_BEGIN_B(always_have_depth_buffer, def) \ + DRI_CONF_DESC(en,gettext("Create all visuals with a depth buffer")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_GLSL_ZERO_INIT(def) \ +DRI_CONF_OPT_BEGIN_B(glsl_zero_init, def) \ + DRI_CONF_DESC(en,gettext("Force uninitialized variables to default to zero")) \ +DRI_CONF_OPT_END + +/** + * \brief Initialization configuration options + */ +#define DRI_CONF_SECTION_INITIALIZATION \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Initialization")) + +#define DRI_CONF_DEVICE_ID_PATH_TAG(def) \ +DRI_CONF_OPT_BEGIN(device_id, string, def) \ + DRI_CONF_DESC(en,gettext("Define the graphic device to use if possible")) \ +DRI_CONF_OPT_END + +/** + * \brief Gallium-Nine specific configuration options + */ + +#define DRI_CONF_SECTION_NINE \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(en,gettext("Gallium Nine")) + +#define DRI_CONF_NINE_THROTTLE(def) \ +DRI_CONF_OPT_BEGIN(throttle_value, int, def) \ + DRI_CONF_DESC(en,gettext("Define the throttling value. -1 for no throttling, -2 for default (usually 2), 0 for glfinish behaviour")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NINE_THREADSUBMIT(def) \ +DRI_CONF_OPT_BEGIN_B(thread_submit, def) \ + DRI_CONF_DESC(en,gettext("Use an additional thread to submit buffers.")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NINE_OVERRIDEVENDOR(def) \ +DRI_CONF_OPT_BEGIN(override_vendorid, int, def) \ + DRI_CONF_DESC(en,gettext("Define the vendor_id to report. This allows faking another hardware vendor.")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NINE_ALLOWDISCARDDELAYEDRELEASE(def) \ +DRI_CONF_OPT_BEGIN_B(discard_delayed_release, def) \ + DRI_CONF_DESC(en,gettext("Whether to allow the display server to release buffers with a delay when using d3d's presentation mode DISCARD. Default to true. Set to false if suffering from lag (thread_submit=true can also help in this situation).")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NINE_TEARFREEDISCARD(def) \ +DRI_CONF_OPT_BEGIN_B(tearfree_discard, def) \ + DRI_CONF_DESC(en,gettext("Whether to make d3d's presentation mode DISCARD (games usually use that mode) Tear Free. If rendering above screen refresh, some frames will get skipped. false by default.")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_NINE_CSMT(def) \ +DRI_CONF_OPT_BEGIN(csmt_force, int, def) \ + DRI_CONF_DESC(en,gettext("If set to 1, force gallium nine CSMT. If set to 0, disable it. By default (-1) CSMT is enabled on known thread-safe drivers.")) \ +DRI_CONF_OPT_END |