diff options
27 files changed, 623 insertions, 103 deletions
diff --git a/fontconfig/configure.ac b/fontconfig/configure.ac index 1270ba5bf..870979df8 100644 --- a/fontconfig/configure.ac +++ b/fontconfig/configure.ac @@ -136,7 +136,23 @@ AC_TYPE_PID_T # Checks for library functions. AC_FUNC_VPRINTF AC_FUNC_MMAP -AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror regexec regfree posix_fadvise fstatvfs fstatfs]) +AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs]) + +dnl AC_CHECK_FUNCS doesn't check for header files. +dnl posix_fadvise() may be not available in older libc. +fc_saved_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $WARN_CFLAGS -Werror" +AC_MSG_CHECKING([for posix_fadvise]) +AC_LINK_IFELSE([AC_LANG_SOURCE([[ + #include <fcntl.h> + int main(void) { + return posix_fadvise(0, 0, 0, 0); + } + ]])],[ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the `posix_fadvise' function.]) + ],[AC_MSG_RESULT([no])]) +CFLAGS="$fc_saved_CFLAGS" # if test "x$ac_cv_func_fstatvfs" = "xyes"; then diff --git a/libX11/configure.ac b/libX11/configure.ac index 48a0c8ab9..a45f9d956 100644 --- a/libX11/configure.ac +++ b/libX11/configure.ac @@ -306,7 +306,15 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) # Find keysymdef.h # AC_MSG_CHECKING([keysym definitions]) -KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11 +AC_ARG_WITH([keysymdefdir], + [AC_HELP_STRING([--with-keysymdefdir=DIR], [The location of keysymdef.h (defaults to xproto include dir)])], + [KEYSYMDEFDIR=$withval], + [KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11]) + +if test ! -d "$KEYSYMDEFDIR"; then + AC_MSG_ERROR([$KEYSYMDEFDIR doesn't exist or isn't a directory]) +fi + FILES="keysymdef.h XF86keysym.h Sunkeysym.h DECkeysym.h HPkeysym.h" for i in $FILES; do if test -f "$KEYSYMDEFDIR/$i"; then diff --git a/mesalib/Makefile.am b/mesalib/Makefile.am index 36bcf1f0b..e411218eb 100644 --- a/mesalib/Makefile.am +++ b/mesalib/Makefile.am @@ -52,7 +52,7 @@ distclean-local: # Rules for making release tarballs -PACKAGE_VERSION=9.0-devel +PACKAGE_VERSION=9.1-devel PACKAGE_DIR = Mesa-$(PACKAGE_VERSION) PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION) diff --git a/mesalib/configs/default b/mesalib/configs/default index 5e4cc5678..7b9e1c61a 100644 --- a/mesalib/configs/default +++ b/mesalib/configs/default @@ -9,7 +9,7 @@ CONFIG_NAME = default # Version info MESA_MAJOR=9 -MESA_MINOR=0 +MESA_MINOR=1 MESA_TINY=0 MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY) diff --git a/mesalib/configure.ac b/mesalib/configure.ac index 6e67ec039..4193496de 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -6,7 +6,7 @@ dnl Tell the user about autoconf.html in the --help output m4_divert_once([HELP_END], [ See docs/autoconf.html for more details on the options for Mesa.]) -AC_INIT([Mesa], [9.0.0], +AC_INIT([Mesa], [9.1.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa]) AC_CONFIG_AUX_DIR([bin]) AC_CANONICAL_HOST @@ -26,6 +26,10 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) LT_PREREQ([2.2]) LT_INIT([disable-static]) +dnl Set internal versions +OSMESA_VERSION=8 +AC_SUBST([OSMESA_VERSION]) + dnl Versions for external dependencies LIBDRM_REQUIRED=2.4.24 LIBDRM_RADEON_REQUIRED=2.4.39 @@ -563,11 +567,13 @@ AC_ARG_ENABLE([xa], [enable build of the XA X Acceleration API @<:@default=no@:>@])], [enable_xa="$enableval"], [enable_xa=no]) -AC_ARG_ENABLE([d3d1x], - [AS_HELP_STRING([--enable-d3d1x], - [enable support for Direct3D 10 & 11 low-level API @<:@default=no@:>@])], - [enable_d3d1x="$enableval"], - [enable_d3d1x=no]) +dnl Broken, unmaintained. Don't want to see bug reports about it without patches. +enable_d3d1x=no +dnl AC_ARG_ENABLE([d3d1x], +dnl [AS_HELP_STRING([--enable-d3d1x], +dnl [enable support for Direct3D 10 & 11 low-level API @<:@default=no@:>@])], +dnl [enable_d3d1x="$enableval"], +dnl [enable_d3d1x=no]) AC_ARG_ENABLE([gbm], [AS_HELP_STRING([--enable-gbm], [enable gbm library @<:@default=auto@:>@])], @@ -855,13 +861,12 @@ xyesyes) xyesno) # DRI-based GLX PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED]) - GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED" if test x"$driglx_direct" = xyes; then if test "x$have_libdrm" != xyes; then AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED]) fi PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED]) - GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED" + GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED" fi # find the DRI deps for libGL @@ -1919,10 +1924,6 @@ AM_CONDITIONAL(HAVE_X86_ASM, echo "$DEFINES" | grep 'X86_ASM' >/dev/null 2>&1) AM_CONDITIONAL(HAVE_X86_64_ASM, echo "$DEFINES" | grep 'X86_64_ASM' >/dev/null 2>&1) AM_CONDITIONAL(HAVE_SPARC_ASM, echo "$DEFINES" | grep 'SPARC_ASM' >/dev/null 2>&1) -# To pass as an argument to libtool's -version-number flag -VERSION_NUMBER=`echo "$VERSION" | $SED 's/\./:/g'` -AC_SUBST([VERSION_NUMBER]) - dnl prepend CORE_DIRS to SRC_DIRS SRC_DIRS="$CORE_DIRS $SRC_DIRS" diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.c b/mesalib/src/gallium/auxiliary/util/u_blitter.c index 44295c136..35b8edba7 100644 --- a/mesalib/src/gallium/auxiliary/util/u_blitter.c +++ b/mesalib/src/gallium/auxiliary/util/u_blitter.c @@ -1213,6 +1213,21 @@ void util_blitter_copy_texture_view(struct blitter_context *blitter, pipe->bind_fragment_sampler_states(pipe, 2, samplers); pipe_sampler_view_reference(&views[1], NULL); + } else if (blit_stencil) { + /* Set a stencil-only sampler view for it not to sample depth instead. */ + struct pipe_sampler_view templ; + struct pipe_sampler_view *view; + + templ = *src; + templ.format = util_format_stencil_only(templ.format); + assert(templ.format != PIPE_FORMAT_NONE); + + view = pipe->create_sampler_view(pipe, src->texture, &templ); + + pipe->set_fragment_sampler_views(pipe, 1, &view); + pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state); + + pipe_sampler_view_reference(&view, NULL); } else { pipe->set_fragment_sampler_views(pipe, 1, &src); pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state); diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 02fe66b60..5157661b3 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -2086,9 +2086,24 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } else { var->location = qual->location; } + if (qual->flags.q.explicit_index) { - var->explicit_index = true; - var->index = qual->index; + /* From the GLSL 4.30 specification, section 4.4.2 (Output + * Layout Qualifiers): + * + * "It is also a compile-time error if a fragment shader + * sets a layout index to less than 0 or greater than 1." + * + * Older specifications don't mandate a behavior; we take + * this as a clarification and always generate the error. + */ + if (qual->index < 0 || qual->index > 1) { + _mesa_glsl_error(loc, state, + "explicit index may only be 0 or 1\n"); + } else { + var->explicit_index = true; + var->index = qual->index; + } } } } else if (qual->flags.q.explicit_index) { diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp index eef9025cf..aa8a8b3fb 100644 --- a/mesalib/src/glsl/link_uniforms.cpp +++ b/mesalib/src/glsl/link_uniforms.cpp @@ -572,8 +572,11 @@ link_assign_uniform_locations(struct gl_shader_program *prog) /* FINISHME: Update code to process built-in uniforms! */ - if (strncmp("gl_", var->name, 3) == 0) + if (strncmp("gl_", var->name, 3) == 0) { + uniform_size.num_shader_uniform_components += + var->type->component_slots(); continue; + } uniform_size.process(var); } diff --git a/mesalib/src/mapi/glapi/gen/glX_proto_send.py b/mesalib/src/mapi/glapi/gen/glX_proto_send.py index d42f661ea..34aa2c31f 100644 --- a/mesalib/src/mapi/glapi/gen/glX_proto_send.py +++ b/mesalib/src/mapi/glapi/gen/glX_proto_send.py @@ -423,9 +423,9 @@ __indirect_get_proc_address(const char *name) print '' print '#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)' print ' if (gc->isDirect) {' - print ' const _glapi_proc *const table = GET_DISPATCH();' + print ' const _glapi_proc *const disp_table = GET_DISPATCH();' print ' PFNGL%sPROC p =' % (name.upper()) - print ' (PFNGL%sPROC) table[%d];' % (name.upper(), func.offset) + print ' (PFNGL%sPROC) disp_table[%d];' % (name.upper(), func.offset) print ' %sp(%s);' % (ret_string, func.get_called_parameter_string()) print ' } else' print '#endif' diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index 36e1fcf62..e6f4541f0 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/src/mesa/main/extensions.c @@ -927,7 +927,7 @@ _mesa_get_extension_count(struct gl_context *ctx) base = (GLboolean *) &ctx->Extensions; for (i = extension_table; i->name != 0; ++i) { - if (base[i->offset]) { + if (base[i->offset] && (i->api_set & (1 << ctx->API))) { ctx->Extensions.Count++; } } @@ -947,10 +947,11 @@ _mesa_get_enabled_extension(struct gl_context *ctx, GLuint index) base = (GLboolean*) &ctx->Extensions; n = 0; for (i = extension_table; i->name != 0; ++i) { - if (n == index && base[i->offset]) { - return (const GLubyte*) i->name; - } else if (base[i->offset]) { - ++n; + if (base[i->offset] & (i->api_set & (1 << ctx->API))) { + if (n == index) + return (const GLubyte*) i->name; + else + ++n; } } diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 59a5ec32d..abc9d83a6 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -2979,8 +2979,8 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, /* extra checks for multisample copies... */ if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) { /* src and dest region sizes must be the same */ - if (srcX1 - srcX0 != dstX1 - dstX0 || - srcY1 - srcY0 != dstY1 - dstY0) { + if (abs(srcX1 - srcX0) != abs(dstX1 - dstX0) || + abs(srcY1 - srcY0) != abs(dstY1 - dstY0)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT(bad src/dst multisample region sizes)"); return; diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c index 24d2a18fe..6800cc353 100644 --- a/mesalib/src/mesa/main/get.c +++ b/mesalib/src/mesa/main/get.c @@ -789,6 +789,15 @@ static const struct value_desc values[] = { #endif /* FEATURE_GL || FEATURE_ES2 */ +#if FEATURE_ES1 || FEATURE_ES2 + { 0, 0, TYPE_API_MASK, API_OPENGLES | API_OPENGLES2_BIT, NO_EXTRA }, + /* GL_OES_EGL_image_external */ + { GL_TEXTURE_BINDING_EXTERNAL_OES, LOC_CUSTOM, + TYPE_INT, TEXTURE_EXTERNAL_INDEX, extra_OES_EGL_image_external }, + { GL_TEXTURE_EXTERNAL_OES, LOC_CUSTOM, + TYPE_BOOLEAN, 0, extra_OES_EGL_image_external }, +#endif + #if FEATURE_ES2 /* Enums unique to OpenGL ES 2.0 */ { 0, 0, TYPE_API_MASK, API_OPENGLES2_BIT, NO_EXTRA }, @@ -801,12 +810,6 @@ static const struct value_desc values[] = { { GL_SHADER_BINARY_FORMATS, CONST(0), NO_EXTRA }, #endif /* FEATURE_ES2 */ - /* GL_OES_EGL_image_external */ - { GL_TEXTURE_BINDING_EXTERNAL_OES, LOC_CUSTOM, - TYPE_INT, TEXTURE_EXTERNAL_INDEX, extra_OES_EGL_image_external }, - { GL_TEXTURE_EXTERNAL_OES, LOC_CUSTOM, - TYPE_BOOLEAN, 0, extra_OES_EGL_image_external }, - #if FEATURE_GL /* Remaining enums are only in OpenGL */ { 0, 0, TYPE_API_MASK, API_OPENGL_BIT | API_OPENGL_CORE_BIT, NO_EXTRA }, @@ -1398,29 +1401,29 @@ print_table_stats(void) for (i = 0; i < Elements(table); i++) { if (!table[i]) - continue; + continue; count++; d = &values[table[i]]; hash = (d->pname * prime_factor); j = 0; while (1) { - if (values[table[hash & mask]].pname == d->pname) - break; - hash += prime_step; - j++; + if (values[table[hash & mask]].pname == d->pname) + break; + hash += prime_step; + j++; } if (j < 10) - collisions[j]++; + collisions[j]++; else - collisions[10]++; + collisions[10]++; } printf("number of enums: %d (total %d)\n", count, Elements(values)); for (i = 0; i < Elements(collisions) - 1; i++) if (collisions[i] > 0) - printf(" %d enums with %d %scollisions\n", - collisions[i], i, i == 10 ? "or more " : ""); + printf(" %d enums with %d %scollisions\n", + collisions[i], i, i == 10 ? "or more " : ""); } #endif @@ -1442,20 +1445,20 @@ void _mesa_init_get_hash(struct gl_context *ctx) for (i = 0; i < Elements(values); i++) { if (values[i].type == TYPE_API_MASK) { - api_mask = values[i].offset; - continue; + api_mask = values[i].offset; + continue; } if (!(api_mask & api_bit)) - continue; + continue; hash = (values[i].pname * prime_factor) & mask; while (1) { - index = hash & mask; - if (!table[index]) { - table[index] = i; - break; - } - hash += prime_step; + index = hash & mask; + if (!table[index]) { + table[index] = i; + break; + } + hash += prime_step; } } @@ -1992,13 +1995,13 @@ find_value(const char *func, GLenum pname, void **p, union value *v) /* If the enum isn't valid, the hash walk ends with index 0, * which is the API mask entry at the beginning of values[]. */ if (unlikely(d->type == TYPE_API_MASK)) { - _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=%s)", func, - _mesa_lookup_enum_by_nr(pname)); - return &error_value; + _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=%s)", func, + _mesa_lookup_enum_by_nr(pname)); + return &error_value; } if (likely(d->pname == pname)) - break; + break; hash += prime_step; } diff --git a/mesalib/src/mesa/main/imports.h b/mesalib/src/mesa/main/imports.h index abf216c99..81da51047 100644 --- a/mesalib/src/mesa/main/imports.h +++ b/mesalib/src/mesa/main/imports.h @@ -520,6 +520,28 @@ extern unsigned int _mesa_bitcount_64(uint64_t n); #endif +/** + * Find the last (most significant) bit set in a word. + * + * Essentially ffs() in the reverse direction. + */ +static inline unsigned int +_mesa_fls(unsigned int n) +{ +#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) + return n == 0 ? 0 : 32 - __builtin_clz(n); +#else + unsigned int v = 1; + + if (n == 0) + return 0; + + while (n >>= 1) + v++; + + return v; +#endif +} extern GLhalfARB _mesa_float_to_half(float f); diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c index 3cf74f295..02bd87ac6 100644 --- a/mesalib/src/mesa/main/teximage.c +++ b/mesalib/src/mesa/main/teximage.c @@ -660,8 +660,8 @@ _mesa_is_proxy_texture(GLenum target) /** * Return the proxy target which corresponds to the given texture target */ -static GLenum -get_proxy_target(GLenum target) +GLenum +_mesa_get_proxy_target(GLenum target) { switch (target) { case GL_TEXTURE_1D: @@ -692,7 +692,7 @@ get_proxy_target(GLenum target) case GL_PROXY_TEXTURE_2D_ARRAY_EXT: return GL_PROXY_TEXTURE_2D_ARRAY_EXT; default: - _mesa_problem(NULL, "unexpected target in get_proxy_target()"); + _mesa_problem(NULL, "unexpected target in _mesa_get_proxy_target()"); return 0; } } @@ -1703,7 +1703,7 @@ texture_error_check( struct gl_context *ctx, GLint width, GLint height, GLint depth, GLint border ) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLboolean isProxy = target == proxyTarget; GLboolean sizeOK = GL_TRUE; GLboolean colorFormat; @@ -1933,7 +1933,7 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLint maxLevels = _mesa_max_texture_levels(ctx, target); GLint expectedSize; GLenum choose_format; @@ -2308,7 +2308,7 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions, GLenum target, GLint level, GLint internalFormat, GLint width, GLint height, GLint border ) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLenum type = GL_FLOAT; GLboolean sizeOK; GLint baseFormat; diff --git a/mesalib/src/mesa/main/teximage.h b/mesalib/src/mesa/main/teximage.h index feaaf0cba..36fd1c2bc 100644 --- a/mesalib/src/mesa/main/teximage.h +++ b/mesalib/src/mesa/main/teximage.h @@ -66,6 +66,8 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat ); extern GLboolean _mesa_is_proxy_texture(GLenum target); +extern GLenum +_mesa_get_proxy_target(GLenum target); extern struct gl_texture_image * _mesa_new_texture_image( struct gl_context *ctx ); diff --git a/mesalib/src/mesa/main/texstorage.c b/mesalib/src/mesa/main/texstorage.c index f8af8bf01..f8a939794 100644 --- a/mesalib/src/mesa/main/texstorage.c +++ b/mesalib/src/mesa/main/texstorage.c @@ -192,9 +192,10 @@ setup_texstorage(struct gl_context *ctx, return; } - } - texObj->Immutable = GL_TRUE; + /* Only set this field for non-proxy texture objects */ + texObj->Immutable = GL_TRUE; + } } @@ -242,25 +243,68 @@ tex_storage_error_check(struct gl_context *ctx, GLuint dims, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { - const GLboolean isProxy = _mesa_is_proxy_texture(target); struct gl_texture_object *texObj; GLuint maxDim; + GLboolean legalFormat; + + /* check internal format - note that only sized formats are allowed */ + switch (internalformat) { + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_INTENSITY: + case GL_RED: + case GL_RG: + case GL_RGB: + case GL_RGBA: + case GL_BGRA: + case GL_DEPTH_COMPONENT: + case GL_DEPTH_STENCIL: + case GL_COMPRESSED_ALPHA: + case GL_COMPRESSED_LUMINANCE_ALPHA: + case GL_COMPRESSED_LUMINANCE: + case GL_COMPRESSED_INTENSITY: + case GL_COMPRESSED_RGB: + case GL_COMPRESSED_RGBA: + case GL_COMPRESSED_SRGB: + case GL_COMPRESSED_SRGB_ALPHA: + case GL_COMPRESSED_SLUMINANCE: + case GL_COMPRESSED_SLUMINANCE_ALPHA: + case GL_RED_INTEGER: + case GL_GREEN_INTEGER: + case GL_BLUE_INTEGER: + case GL_ALPHA_INTEGER: + case GL_RGB_INTEGER: + case GL_RGBA_INTEGER: + case GL_BGR_INTEGER: + case GL_BGRA_INTEGER: + case GL_LUMINANCE_INTEGER_EXT: + case GL_LUMINANCE_ALPHA_INTEGER_EXT: + /* these unsized formats are illegal */ + legalFormat = GL_FALSE; + break; + default: + legalFormat = _mesa_base_tex_format(ctx, internalformat) > 0; + } + + if (!legalFormat) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glTexStorage%uD(internalformat = %s)", dims, + _mesa_lookup_enum_by_nr(internalformat)); + return GL_TRUE; + } /* size check */ if (width < 1 || height < 1 || depth < 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glTexStorage%uD(width, height or depth < 1)", dims); - } + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexStorage%uD(width, height or depth < 1)", dims); return GL_TRUE; } /* levels check */ if (levels < 1 || height < 1 || depth < 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_VALUE, "glTexStorage%uD(levels < 1)", - dims); - } + _mesa_error(ctx, GL_INVALID_VALUE, "glTexStorage%uD(levels < 1)", + dims); return GL_TRUE; } @@ -274,40 +318,32 @@ tex_storage_error_check(struct gl_context *ctx, GLuint dims, GLenum target, /* check levels against maximum */ if (levels > _mesa_max_texture_levels(ctx, target)) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(levels too large)", dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(levels too large)", dims); return GL_TRUE; } /* check levels against width/height/depth */ maxDim = MAX3(width, height, depth); if (levels > _mesa_logbase2(maxDim) + 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(too many levels for max texture dimension)", - dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(too many levels for max texture dimension)", + dims); return GL_TRUE; } /* non-default texture object check */ texObj = _mesa_get_current_tex_object(ctx, target); - if (!texObj || (texObj->Name == 0 && !isProxy)) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(texture object 0)", dims); - } + if (!texObj || (texObj->Name == 0)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(texture object 0)", dims); return GL_TRUE; } /* Check if texObj->Immutable is set */ if (texObj->Immutable) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glTexStorage%uD(immutable)", - dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexStorage%uD(immutable)", + dims); return GL_TRUE; } @@ -323,22 +359,38 @@ texstorage(GLuint dims, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { struct gl_texture_object *texObj; - GLboolean error; + GLboolean sizeOK; + GLenum proxyTarget = _mesa_get_proxy_target(target); GET_CURRENT_CONTEXT(ctx); texObj = _mesa_get_current_tex_object(ctx, target); - error = tex_storage_error_check(ctx, dims, target, levels, - internalformat, width, height, depth); - if (!error) { + if (tex_storage_error_check(ctx, dims, target, levels, + internalformat, width, height, depth)) { + return; /* error was recorded */ + } + + sizeOK = ctx->Driver.TestProxyTexImage(ctx, proxyTarget, 0, + internalformat, GL_NONE, GL_NONE, + width, height, depth, 0); + + if (!sizeOK) { + if (_mesa_is_proxy_texture(texObj->Target)) { + /* clear all image fields for [levels] */ + clear_image_fields(ctx, dims, texObj); + } + else { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexStorage%uD(invalid width, height or depth)", + dims); + return; + } + } + else { setup_texstorage(ctx, texObj, dims, levels, internalformat, width, height, depth); } - else if (_mesa_is_proxy_texture(target)) { - /* clear all image fields for [levels] */ - clear_image_fields(ctx, dims, texObj); - } } diff --git a/mesalib/src/mesa/main/version.h b/mesalib/src/mesa/main/version.h index 5b2e85afd..f0ba6f267 100644 --- a/mesalib/src/mesa/main/version.h +++ b/mesalib/src/mesa/main/version.h @@ -33,9 +33,9 @@ struct gl_context; /* Mesa version */ #define MESA_MAJOR 9 -#define MESA_MINOR 0 +#define MESA_MINOR 1 #define MESA_PATCH 0 -#define MESA_VERSION_STRING "9.0-devel" +#define MESA_VERSION_STRING "9.1-devel" /* To make version comparison easy */ #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS index e53dd344c..731a2e474 100644 --- a/xorg-server/xkeyboard-config/NEWS +++ b/xorg-server/xkeyboard-config/NEWS @@ -1,3 +1,6 @@ +2.7 8 bugs fixed, most important: + - Fxx fixed (CTRL+ALT type) + - *.dir files not produced any more 2.6 16 bugs fixed Updated translations Using proper gettext, instead of glib-gettext diff --git a/xorg-server/xkeyboard-config/configure.in b/xorg-server/xkeyboard-config/configure.in index a43c379c8..9ba1819be 100644 --- a/xorg-server/xkeyboard-config/configure.in +++ b/xorg-server/xkeyboard-config/configure.in @@ -1,4 +1,4 @@ -AC_INIT(xkeyboard-config, 2.6) +AC_INIT(xkeyboard-config, 2.6.99) AC_CONFIG_SRCDIR(rules/base.xml.in) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE @@ -97,6 +97,7 @@ symbols/macintosh_vndr/Makefile symbols/nec_vndr/Makefile symbols/nokia_vndr/Makefile symbols/sgi_vndr/Makefile +symbols/sharp_vndr/Makefile symbols/sony_vndr/Makefile symbols/sun_vndr/Makefile symbols/xfree68_vndr/Makefile diff --git a/xorg-server/xkeyboard-config/rules/base.ml_s.part b/xorg-server/xkeyboard-config/rules/base.ml_s.part index 5d3b46d61..7e0148672 100644 --- a/xorg-server/xkeyboard-config/rules/base.ml_s.part +++ b/xorg-server/xkeyboard-config/rules/base.ml_s.part @@ -36,6 +36,11 @@ olpc $olpclayouts = olpc+%l%(m) olpc * = olpc+%l%(v) $thinkpads br = pc+br(thinkpad) + sl-c3x00 * = pc+sharp_vndr/sl-c3x00(basic) + ws003sh * = pc+sharp_vndr/ws003sh(basic) + ws007sh * = pc+sharp_vndr/ws007sh(basic) + ws011sh * = pc+sharp_vndr/ws011sh(basic) + ws020sh * = pc+sharp_vndr/ws020sh(basic) htcdream $htcdreamlayouts = %l(htcdream) * $nonlatin = pc+us+%l%(v):2 * * = pc+%l%(v) diff --git a/xorg-server/xkeyboard-config/symbols/Makefile.am b/xorg-server/xkeyboard-config/symbols/Makefile.am index c67a60088..af0322f0c 100644 --- a/xorg-server/xkeyboard-config/symbols/Makefile.am +++ b/xorg-server/xkeyboard-config/symbols/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = digital_vndr fujitsu_vndr hp_vndr macintosh_vndr nec_vndr nokia_vndr sgi_vndr sony_vndr sun_vndr xfree68_vndr +SUBDIRS = digital_vndr fujitsu_vndr hp_vndr macintosh_vndr nec_vndr nokia_vndr sharp_vndr sgi_vndr sony_vndr sun_vndr xfree68_vndr symbolsdir = $(xkb_base)/symbols symbols_DATA = \ diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/Makefile.am b/xorg-server/xkeyboard-config/symbols/sharp_vndr/Makefile.am new file mode 100644 index 000000000..5b2d4aafd --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/Makefile.am @@ -0,0 +1,8 @@ +symbolsdir = $(xkb_base)/symbols/sharp_vndr + +dist_symbols_DATA = \ +sl-c3x00 \ +ws003sh \ +ws007sh \ +ws011sh \ +ws020sh diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/sl-c3x00 b/xorg-server/xkeyboard-config/symbols/sharp_vndr/sl-c3x00 new file mode 100644 index 000000000..d1dca0cb9 --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/sl-c3x00 @@ -0,0 +1,74 @@ +// $NetBSD: sl-c3x00,v 1.1 2009/12/13 04:54:51 nonaka Exp $ +// $OpenBSD: zaurus,v 1.2 2008/03/05 17:24:55 matthieu Exp $ + +partial default alphanumeric_keys +xkb_symbols "basic" { + name[Group1]= "Sharp SL-C3x00"; + + // Upper row + key <AE01> { [ 1, exclam ] }; + key <AE02> { [ 2, quotedbl ] }; + key <AE03> { [ 3, numbersign ] }; + key <AE04> { [ 4, dollar ] }; + key <AE05> { [ 5, percent ] }; + key <AE06> { [ 6, ampersand ] }; + key <AE07> { [ 7, quoteright ] }; + key <AE08> { [ 8, parenleft ] }; + key <AE09> { [ 9, parenright ] }; + key <AE10> { [ 0, asciitilde ] }; + key <BKSP> { type="CTRL+ALT", + symbols[Group1]= [ BackSpace, Terminate_Server ] }; + + key <AD01> { [ q, Q ] }; + key <AD02> { [ w, W, asciicircum ] }; + key <AD03> { [ e, E, equal ] }; + key <AD04> { [ r, R, plus ] }; + key <AD05> { [ t, T, bracketleft ] }; + key <AD06> { [ y, Y, bracketright ] }; + key <AD07> { [ u, U, braceleft ] }; + key <AD08> { [ i, I, braceright ] }; + key <AD09> { [ o, O ] }; + key <AD10> { [ p, P ] }; + + key <TAB> { [ Tab, ISO_Left_Tab, Caps_Lock ] }; + + key <AC01> { [ a, A ] }; + key <AC02> { [ s, S ] }; + key <AC03> { [ d, D, quoteleft ] }; + key <AC04> { [ f, F, backslash ] }; + key <AC05> { [ g, G, semicolon ] }; + key <AC06> { [ h, H, colon ] }; + key <AC07> { [ j, J, asterisk ] }; + key <AC08> { [ k, K, yen ] }; + key <AC09> { [ l, L, bar ] }; + + key <LFSH> { [ Shift_L ] }; + key <AB01> { [ z, Z ] }; + key <AB02> { [ x, X, SunCut ] }; + key <AB03> { [ c, C, SunCopy ] }; + key <AB04> { [ v, V, SunPaste ] }; + key <AB05> { [ b, B, underscore ] }; + key <AB06> { [ n, N ] }; + key <AB07> { [ m, M ] }; + key <RTSH> { [ Shift_R ] }; + key <RTRN> { [ Return ] }; + + key <RALT> { [ ISO_Level3_Shift ] }; + + key <LCTL> { [ Control_L ] }; + key <AE11> { [ minus, minus, at ] }; + key <SPCE> { [ space ] }; + key <AB08> { [ comma, slash, less ] }; + key <AB09> { [ period, question, greater ] }; + // End alphanumeric section + + // keypad + key <UP> { [ Up, Up, Prior ] }; + key <LEFT> { [ Left, Left, Home ] }; + key <DOWN> { [ Down, Down, Next ] }; + key <RGHT> { [ Right, Right, End ] }; + + key <ESC> { [ Escape ] }; + + include "level3(ralt_switch)" +}; diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws003sh b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws003sh new file mode 100644 index 000000000..7c3d98fdf --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws003sh @@ -0,0 +1,73 @@ +// $NetBSD: ws003sh,v 1.1 2010/05/15 15:33:30 nonaka Exp $ + +partial default alphanumeric_keys +xkb_symbols "basic" { + name[Group1]= "Sharp WS003SH"; + + // Upper row + key <AE01> { [ 1, exclam ] }; + key <AE02> { [ 2, quotedbl ] }; + key <AE03> { [ 3, numbersign ] }; + key <AE04> { [ 4, dollar ] }; + key <AE05> { [ 5, percent ] }; + key <AE06> { [ 6, ampersand ] }; + key <AE07> { [ 7, quoteright, quoteleft ] }; + key <AE08> { [ 8, parenleft, braceleft ] }; + key <AE09> { [ 9, parenright, braceright ] }; + key <AE10> { [ 0 ] }; + key <AE11> { [ minus, equal, backslash ] }; + key <BKSP> { [ BackSpace, BackSpace, Delete ] }; + + key <AD01> { [ q, Q ] }; + key <AD02> { [ w, W, asciicircum ] }; + key <AD03> { [ e, E, asciitilde ] }; + key <AD04> { [ r, R, bar ] }; + key <AD05> { [ t, T ] }; + key <AD06> { [ y, Y ] }; + key <AD07> { [ u, U, bracketleft ] }; + key <AD08> { [ i, I, bracketright ] }; + key <AD09> { [ o, O, underscore ] }; + key <AD10> { [ p, P, at ] }; + + key <TAB> { [ Tab, Tab, Escape ] }; + + key <AC01> { [ a, A ] }; + key <AC02> { [ s, S ] }; + key <AC03> { [ d, D ] }; + key <AC04> { [ f, F ] }; + key <AC05> { [ g, G ] }; + key <AC06> { [ h, H ] }; + key <AC07> { [ j, J ] }; + key <AC08> { [ k, K, plus ] }; + key <AC09> { [ l, L, asterisk ] }; + + key <LFSH> { [ Shift_L ] }; + key <AB01> { [ z, Z ] }; + key <AB02> { [ x, X ] }; + key <AB03> { [ c, C ] }; + key <AB04> { [ v, V ] }; + key <AB05> { [ b, B ] }; + key <AB06> { [ n, N ] }; + key <AB07> { [ m, M ] }; + key <AB08> { [ comma, semicolon, less ] }; + key <AB09> { [ period, colon, greater ] }; + key <AB10> { [ slash, question ] }; + key <RTSH> { [ Shift_R ] }; + key <RTRN> { [ Return ] }; + + key <RALT> { [ ISO_Level3_Shift ] }; + + key <LCTL> { [ Control_L ] }; + key <SPCE> { [ space ] }; + // End alphanumeric section + + // keypad + key <UP> { [ Up, Up, Prior ] }; + key <LEFT> { [ Left, Left, Home ] }; + key <DOWN> { [ Down, Down, Next ] }; + key <RGHT> { [ Right, Right, End ] }; + + key <ESC> { [ Escape ] }; + + include "level3(ralt_switch)" +}; diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws007sh b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws007sh new file mode 100644 index 000000000..d287eb528 --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws007sh @@ -0,0 +1,73 @@ +// $NetBSD: ws007sh,v 1.1 2010/05/15 15:33:30 nonaka Exp $ + +partial default alphanumeric_keys +xkb_symbols "basic" { + name[Group1]= "Sharp WS007SH"; + + // Upper row + key <AE01> { [ 1, exclam ] }; + key <AE02> { [ 2, quotedbl ] }; + key <AE03> { [ 3, numbersign ] }; + key <AE04> { [ 4, dollar ] }; + key <AE05> { [ 5, percent ] }; + key <AE06> { [ 6, ampersand ] }; + key <AE07> { [ 7, quoteright, quoteleft ] }; + key <AE08> { [ 8, parenleft, braceleft ] }; + key <AE09> { [ 9, parenright, braceright ] }; + key <AE10> { [ 0 ] }; + key <AE11> { [ minus, equal, backslash ] }; + key <BKSP> { [ BackSpace, BackSpace, Delete ] }; + + key <AD01> { [ q, Q ] }; + key <AD02> { [ w, W, asciicircum ] }; + key <AD03> { [ e, E, asciitilde ] }; + key <AD04> { [ r, R, bar ] }; + key <AD05> { [ t, T ] }; + key <AD06> { [ y, Y ] }; + key <AD07> { [ u, U, bracketleft ] }; + key <AD08> { [ i, I, bracketright ] }; + key <AD09> { [ o, O, underscore ] }; + key <AD10> { [ p, P, at ] }; + + key <TAB> { [ Tab, Tab, Escape ] }; + + key <AC01> { [ a, A ] }; + key <AC02> { [ s, S ] }; + key <AC03> { [ d, D ] }; + key <AC04> { [ f, F ] }; + key <AC05> { [ g, G ] }; + key <AC06> { [ h, H ] }; + key <AC07> { [ j, J ] }; + key <AC08> { [ k, K, plus ] }; + key <AC09> { [ l, L, asterisk ] }; + + key <LFSH> { [ Shift_L ] }; + key <AB01> { [ z, Z ] }; + key <AB02> { [ x, X ] }; + key <AB03> { [ c, C ] }; + key <AB04> { [ v, V ] }; + key <AB05> { [ b, B ] }; + key <AB06> { [ n, N ] }; + key <AB07> { [ m, M ] }; + key <AB08> { [ comma, semicolon, less ] }; + key <AB09> { [ period, colon, greater ] }; + key <AB10> { [ slash, question ] }; + key <RTSH> { [ Shift_R ] }; + key <RTRN> { [ Return ] }; + + key <RALT> { [ ISO_Level3_Shift ] }; + + key <LCTL> { [ Control_L ] }; + key <SPCE> { [ space ] }; + // End alphanumeric section + + // keypad + key <UP> { [ Up, Up, Prior ] }; + key <LEFT> { [ Left, Left, Home ] }; + key <DOWN> { [ Down, Down, Next ] }; + key <RGHT> { [ Right, Right, End ] }; + + key <ESC> { [ Escape ] }; + + include "level3(ralt_switch)" +}; diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws011sh b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws011sh new file mode 100644 index 000000000..45976dff9 --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws011sh @@ -0,0 +1,78 @@ +// $NetBSD: ws011sh,v 1.2 2010/05/30 10:10:20 nonaka Exp $ + +partial default alphanumeric_keys +xkb_symbols "basic" { + name[Group1]= "Sharp WS011SH"; + + // Upper row + key <HZTG> { + type[Group1] = "THREE_LEVEL", + symbols[Group1] = [ Zenkaku_Hankaku, Zenkaku_Hankaku, exclam ] + }; + + key <AD01> { [ q, Q, quotedbl ] }; + key <AD02> { [ w, W, numbersign ] }; + key <AD03> { [ e, E, dollar ] }; + key <AD04> { [ r, R, percent ] }; + key <AD05> { [ t, T, ampersand ] }; + key <AD06> { [ y, Y, 1 ] }; + key <AD07> { [ u, U, 2 ] }; + key <AD08> { [ i, I, 3 ] }; + key <AD09> { [ o, O, underscore ] }; + key <AD10> { [ p, P, at ] }; + key <BKSP> { [ BackSpace, BackSpace, Delete ] }; + + key <TAB> { [ Tab, Tab, Escape ] }; + key <AC01> { [ a, A, bracketleft ] }; + key <AC02> { [ s, S, apostrophe ] }; + key <AC03> { [ d, D, parenleft ] }; + key <AC04> { [ f, F, parenright ] }; + key <AC05> { [ g, G, asterisk ] }; + key <AC06> { [ h, H, 4 ] }; + key <AC07> { [ j, J, 5 ] }; + key <AC08> { [ k, K, 6 ] }; + key <AC09> { [ l, L, plus ] }; + key <AE11> { [ minus, equal, backslash ] }; + key <AE02> { [ grave, braceleft, braceright ] }; + + key <LFSH> { [ Shift_L ] }; + key <AB01> { [ z, Z, bracketright ] }; + key <AB02> { [ x, X, asciicircum ] }; + key <AB03> { [ c, C, asciitilde ] }; + key <AB04> { [ v, V, bar ] }; + key <AB05> { [ b, B, 7 ] }; + key <AB06> { [ n, N, 8 ] }; + key <AB07> { [ m, M, 9 ] }; + key <AB08> { [ comma, less, semicolon ] }; + key <AB09> { [ period, greater, colon ] }; + key <AB10> { [ slash, question, 0 ] }; + key <RTSH> { [ Shift_R ] }; + key <RTRN> { [ Return ] }; + + key <RALT> { [ ISO_Level3_Shift ] }; + + key <LCTL> { [ Control_L ] }; + key <SPCE> { [ space ] }; + // End alphanumeric section + + key <UP> { [ Up, Up, Prior ] }; + key <LEFT> { [ Left, Left, Home ] }; + key <DOWN> { [ Down, Down, Next ] }; + key <RGHT> { [ Right, Right, End ] }; + + key <ESC> { [ Escape ] }; + + // keypad + key <KP1> { [ 1 ] }; + key <KP2> { [ 2 ] }; + key <KP3> { [ 3 ] }; + key <KP4> { [ 4 ] }; + key <KP5> { [ 5 ] }; + key <KP6> { [ 6 ] }; + key <KP7> { [ 7 ] }; + key <KP8> { [ 8 ] }; + key <KP9> { [ 9 ] }; + key <KP0> { [ 0 ] }; + + include "level3(ralt_switch)" +}; diff --git a/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws020sh b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws020sh new file mode 100644 index 000000000..5231e1483 --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/sharp_vndr/ws020sh @@ -0,0 +1,67 @@ +// $NetBSD: ws020sh,v 1.1 2010/05/25 13:12:51 nonaka Exp $ + +partial default alphanumeric_keys +xkb_symbols "basic" { + name[Group1]= "Sharp WS020SH"; + + // Upper row + key <HZTG> { + type[Group1]="THREE_LEVEL", + symbols[Group1]= [ Zenkaku_Hankaku, Zenkaku_Hankaku, exclam ] + }; + + key <AD01> { [ q, Q, quotedbl ] }; + key <AD02> { [ w, W, numbersign ] }; + key <AD03> { [ e, E, dollar ] }; + key <AD04> { [ r, R, percent ] }; + key <AD05> { [ t, T, ampersand ] }; + key <AD06> { [ y, Y, underscore ] }; + key <AD07> { [ u, U, 1 ] }; + key <AD08> { [ i, I, 2 ] }; + key <AD09> { [ o, O, 3 ] }; + key <AD10> { [ p, P, at ] }; + key <BKSP> { [ BackSpace, BackSpace, Delete ] }; + + key <TAB> { [ Tab, Tab, Escape ] }; + key <AC01> { [ a, A, bracketleft ] }; + key <AC02> { [ s, S, apostrophe ] }; + key <AC03> { [ d, D, parenleft ] }; + key <AC04> { [ f, F, parenright ] }; + key <AC05> { [ g, G, asterisk ] }; + key <AC06> { [ h, H, 4 ] }; + key <AC07> { [ j, J, 5 ] }; + key <AC08> { [ k, K, 6 ] }; + key <AC09> { [ l, L, plus ] }; + key <AE11> { [ minus, equal, backslash ] }; + key <AE02> { [ grave, braceleft, braceright ] }; + + key <LFSH> { [ Shift_L ] }; + key <AB01> { [ z, Z, bracketright ] }; + key <AB02> { [ x, X, asciicircum ] }; + key <AB03> { [ c, C, asciitilde ] }; + key <AB04> { [ v, V, bar ] }; + key <AB05> { [ b, B, 7 ] }; + key <AB06> { [ n, N, 8 ] }; + key <AB07> { [ m, M, 9 ] }; + key <AB08> { [ comma, less, semicolon ] }; + key <AB09> { [ period, greater, colon ] }; + key <AB10> { [ slash, question, 0 ] }; + key <RTSH> { [ Shift_R ] }; + key <RTRN> { [ Return ] }; + + key <RALT> { [ ISO_Level3_Shift ] }; + + key <LCTL> { [ Control_L ] }; + key <SPCE> { [ space ] }; + // End alphanumeric section + + // keypad + key <UP> { [ Up, Up, Prior ] }; + key <LEFT> { [ Left, Left, Home ] }; + key <DOWN> { [ Down, Down, Next ] }; + key <RGHT> { [ Right, Right, End ] }; + + key <ESC> { [ Escape ] }; + + include "level3(ralt_switch)" +}; |