aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/xwininfo/configure.ac2
-rw-r--r--fontconfig/README21
-rw-r--r--fontconfig/conf.d/Makefile.am11
-rw-r--r--fontconfig/conf.d/README.in (renamed from fontconfig/conf.d/README)6
-rw-r--r--fontconfig/configure.ac2
-rw-r--r--fontconfig/doc/fontconfig-devel.sgml3
-rw-r--r--fontconfig/fontconfig/fontconfig.h2
-rw-r--r--fontconfig/src/fcatomic.h14
-rw-r--r--fontconfig/src/fccfg.c46
-rw-r--r--fontconfig/src/fcfreetype.c45
-rw-r--r--fontconfig/src/fchash.c57
-rw-r--r--fontconfig/src/fcint.h9
-rw-r--r--fontconfig/src/fcmatch.c32
-rw-r--r--fontconfig/src/fcname.c6
-rw-r--r--fontconfig/src/fcobjs.h2
-rw-r--r--fontconfig/src/fcstr.c44
-rw-r--r--libX11/README5
-rw-r--r--libX11/configure.ac2
-rw-r--r--libX11/include/X11/Xlibint.h18
-rw-r--r--libX11/man/XCreateGC.man3
-rw-r--r--libX11/modules/im/ximcp/Makefile.am1
-rw-r--r--libX11/modules/im/ximcp/imLcPrs.c68
-rw-r--r--libX11/modules/im/ximcp/imTrX.c2
-rw-r--r--libX11/nls/en_US.UTF-8/Compose.pre2
-rw-r--r--libX11/src/AllCells.c9
-rw-r--r--libX11/src/Cmap.h2
-rw-r--r--libX11/src/Context.c8
-rw-r--r--libX11/src/Cr.h2
-rw-r--r--libX11/src/CrGC.c2
-rw-r--r--libX11/src/Depths.c2
-rw-r--r--libX11/src/FSWrap.c6
-rw-r--r--libX11/src/Font.c90
-rw-r--r--libX11/src/FontInfo.c111
-rw-r--r--libX11/src/FontNames.c35
-rw-r--r--libX11/src/GetAtomNm.c12
-rw-r--r--libX11/src/GetDflt.c25
-rw-r--r--libX11/src/GetFPath.c36
-rw-r--r--libX11/src/GetHints.c9
-rw-r--r--libX11/src/GetImage.c12
-rw-r--r--libX11/src/GetMoEv.c26
-rw-r--r--libX11/src/GetPntMap.c31
-rw-r--r--libX11/src/GetProp.c33
-rw-r--r--libX11/src/GetRGBCMap.c3
-rw-r--r--libX11/src/ImUtil.c6
-rw-r--r--libX11/src/InitExt.c4
-rw-r--r--libX11/src/IntAtom.c6
-rw-r--r--libX11/src/Key.h3
-rw-r--r--libX11/src/KeyBind.c8
-rw-r--r--libX11/src/LiHosts.c22
-rw-r--r--libX11/src/LiICmaps.c8
-rw-r--r--libX11/src/LiProps.c8
-rw-r--r--libX11/src/ListExt.c36
-rw-r--r--libX11/src/Makefile.am1
-rw-r--r--libX11/src/ModMap.c17
-rw-r--r--libX11/src/OpenDis.c23
-rw-r--r--libX11/src/PixFormats.c4
-rw-r--r--libX11/src/PolyReg.c13
-rw-r--r--libX11/src/PropAlloc.c9
-rw-r--r--libX11/src/PutBEvent.c2
-rw-r--r--libX11/src/PutImage.c13
-rw-r--r--libX11/src/QuColors.c10
-rw-r--r--libX11/src/QuTree.c8
-rw-r--r--libX11/src/Quarks.c9
-rw-r--r--libX11/src/RdBitF.c2
-rw-r--r--libX11/src/Region.c19
-rw-r--r--libX11/src/RegstFlt.c4
-rw-r--r--libX11/src/SetFPath.c2
-rw-r--r--libX11/src/SetHints.c6
-rw-r--r--libX11/src/StrToText.c2
-rw-r--r--libX11/src/TextToStr.c4
-rw-r--r--libX11/src/VisUtil.c8
-rw-r--r--libX11/src/WrBitF.c2
-rw-r--r--libX11/src/Xintatom.h1
-rw-r--r--libX11/src/Xintconn.h1
-rw-r--r--libX11/src/XlibInt.c20
-rw-r--r--libX11/src/Xprivate.h2
-rw-r--r--libX11/src/Xresinternal.h2
-rw-r--r--libX11/src/Xrm.c50
-rw-r--r--libX11/src/locking.c8
-rw-r--r--libX11/src/locking.h2
-rw-r--r--libX11/src/pathmax.h81
-rw-r--r--libX11/src/udcInf.c9
-rw-r--r--libX11/src/xcb_io.c17
-rw-r--r--libX11/src/xcms/cmsColNm.c27
-rw-r--r--libX11/src/xcms/cmsMath.c4
-rw-r--r--libX11/src/xkb/XKBExtDev.c6
-rw-r--r--libX11/src/xkb/XKBGeom.c15
-rw-r--r--libX11/src/xkb/XKBGetMap.c33
-rw-r--r--libX11/src/xkb/XKBNames.c2
-rw-r--r--libX11/src/xlibi18n/lcFile.c24
-rw-r--r--libXau/configure.ac2
-rw-r--r--libXdmcp/Array.c24
-rw-r--r--libXext/COPYING3
-rw-r--r--libXext/configure.ac8
-rw-r--r--libXext/src/Makefile.am1
-rw-r--r--libXext/src/XEVI.c29
-rw-r--r--libXext/src/XMultibuf.c3
-rw-r--r--libXext/src/XSecurity.c3
-rw-r--r--libXext/src/XShape.c27
-rw-r--r--libXext/src/XSync.c35
-rw-r--r--libXext/src/Xcup.c49
-rw-r--r--libXext/src/Xdbe.c27
-rw-r--r--libXext/src/eat.h40
-rw-r--r--libXinerama/configure.ac8
-rw-r--r--libXinerama/src/Xinerama.c61
-rw-r--r--libfontenc/configure.ac2
-rw-r--r--libxcb/src/c_client.py18
-rw-r--r--libxcb/src/xcb_in.c13
-rw-r--r--libxcb/src/xcb_out.c40
-rw-r--r--libxcb/src/xcbext.h1
-rw-r--r--libxcb/src/xcbint.h7
-rw-r--r--libxcb/xcb-proto/doc/xml-xcb.txt13
-rw-r--r--libxcb/xcb-proto/src/res.xml70
-rw-r--r--libxcb/xcb-proto/src/screensaver.xml13
-rw-r--r--libxcb/xcb-proto/src/xcb.xsd2
-rw-r--r--libxcb/xcb-proto/src/xkb.xml447
-rw-r--r--libxcb/xcb-proto/xcbgen/xtypes.py18
-rw-r--r--mesalib/Android.mk4
-rw-r--r--mesalib/bin/bugzilla_mesa.sh52
-rw-r--r--mesalib/bin/get-pick-list.sh6
-rw-r--r--mesalib/bin/perf-annotate-jit251
-rw-r--r--mesalib/bin/shortlog_mesa.sh6
-rw-r--r--mesalib/configure.ac287
-rw-r--r--mesalib/docs/GL3.txt18
-rw-r--r--mesalib/docs/README.UVD13
-rw-r--r--mesalib/docs/devinfo.html12
-rw-r--r--mesalib/docs/envvars.html5
-rw-r--r--mesalib/docs/extensions.html34
-rw-r--r--mesalib/docs/index.html118
-rw-r--r--mesalib/docs/license.html7
-rw-r--r--mesalib/docs/llvmpipe.html40
-rw-r--r--mesalib/docs/relnotes.html156
-rw-r--r--mesalib/docs/relnotes/3.1 (renamed from mesalib/docs/RELNOTES-3.1)0
-rw-r--r--mesalib/docs/relnotes/3.2 (renamed from mesalib/docs/RELNOTES-3.2)0
-rw-r--r--mesalib/docs/relnotes/3.2.1 (renamed from mesalib/docs/RELNOTES-3.2.1)0
-rw-r--r--mesalib/docs/relnotes/3.3 (renamed from mesalib/docs/RELNOTES-3.3)0
-rw-r--r--mesalib/docs/relnotes/3.4 (renamed from mesalib/docs/RELNOTES-3.4)0
-rw-r--r--mesalib/docs/relnotes/3.4.1 (renamed from mesalib/docs/RELNOTES-3.4.1)0
-rw-r--r--mesalib/docs/relnotes/3.4.2 (renamed from mesalib/docs/RELNOTES-3.4.2)0
-rw-r--r--mesalib/docs/relnotes/3.5 (renamed from mesalib/docs/RELNOTES-3.5)0
-rw-r--r--mesalib/docs/relnotes/4.0 (renamed from mesalib/docs/RELNOTES-4.0)0
-rw-r--r--mesalib/docs/relnotes/4.0.1 (renamed from mesalib/docs/RELNOTES-4.0.1)0
-rw-r--r--mesalib/docs/relnotes/4.0.2 (renamed from mesalib/docs/RELNOTES-4.0.2)0
-rw-r--r--mesalib/docs/relnotes/4.0.3 (renamed from mesalib/docs/RELNOTES-4.0.3)0
-rw-r--r--mesalib/docs/relnotes/4.1 (renamed from mesalib/docs/RELNOTES-4.1)0
-rw-r--r--mesalib/docs/relnotes/5.0 (renamed from mesalib/docs/RELNOTES-5.0)0
-rw-r--r--mesalib/docs/relnotes/5.0.1 (renamed from mesalib/docs/RELNOTES-5.0.1)0
-rw-r--r--mesalib/docs/relnotes/5.0.2 (renamed from mesalib/docs/RELNOTES-5.0.2)0
-rw-r--r--mesalib/docs/relnotes/5.1 (renamed from mesalib/docs/RELNOTES-5.1)2
-rw-r--r--mesalib/docs/relnotes/6.0 (renamed from mesalib/docs/RELNOTES-6.0)0
-rw-r--r--mesalib/docs/relnotes/6.0.1 (renamed from mesalib/docs/RELNOTES-6.0.1)0
-rw-r--r--mesalib/docs/relnotes/6.1 (renamed from mesalib/docs/RELNOTES-6.1)0
-rw-r--r--mesalib/docs/relnotes/6.2 (renamed from mesalib/docs/RELNOTES-6.2)0
-rw-r--r--mesalib/docs/relnotes/6.2.1 (renamed from mesalib/docs/RELNOTES-6.2.1)0
-rw-r--r--mesalib/docs/relnotes/6.3 (renamed from mesalib/docs/RELNOTES-6.3)0
-rw-r--r--mesalib/docs/relnotes/6.3.1 (renamed from mesalib/docs/RELNOTES-6.3.1)0
-rw-r--r--mesalib/docs/relnotes/6.3.2 (renamed from mesalib/docs/RELNOTES-6.3.2)0
-rw-r--r--mesalib/docs/relnotes/6.4 (renamed from mesalib/docs/RELNOTES-6.4)0
-rw-r--r--mesalib/docs/relnotes/6.4.1.html (renamed from mesalib/docs/relnotes-6.4.1.html)4
-rw-r--r--mesalib/docs/relnotes/6.4.2.html (renamed from mesalib/docs/relnotes-6.4.2.html)4
-rw-r--r--mesalib/docs/relnotes/6.4.html (renamed from mesalib/docs/relnotes-6.4.html)4
-rw-r--r--mesalib/docs/relnotes/6.5.1.html (renamed from mesalib/docs/relnotes-6.5.1.html)4
-rw-r--r--mesalib/docs/relnotes/6.5.2.html (renamed from mesalib/docs/relnotes-6.5.2.html)4
-rw-r--r--mesalib/docs/relnotes/6.5.3.html (renamed from mesalib/docs/relnotes-6.5.3.html)6
-rw-r--r--mesalib/docs/relnotes/6.5.html (renamed from mesalib/docs/relnotes-6.5.html)4
-rw-r--r--mesalib/docs/relnotes/7.0.1.html (renamed from mesalib/docs/relnotes-7.0.1.html)4
-rw-r--r--mesalib/docs/relnotes/7.0.2.html (renamed from mesalib/docs/relnotes-7.0.2.html)4
-rw-r--r--mesalib/docs/relnotes/7.0.3.html (renamed from mesalib/docs/relnotes-7.0.3.html)4
-rw-r--r--mesalib/docs/relnotes/7.0.4.html (renamed from mesalib/docs/relnotes-7.0.4.html)4
-rw-r--r--mesalib/docs/relnotes/7.0.html (renamed from mesalib/docs/relnotes-7.0.html)4
-rw-r--r--mesalib/docs/relnotes/7.1.html (renamed from mesalib/docs/relnotes-7.1.html)4
-rw-r--r--mesalib/docs/relnotes/7.10.1.html (renamed from mesalib/docs/relnotes-7.10.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.10.2.html (renamed from mesalib/docs/relnotes-7.10.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.10.3.html (renamed from mesalib/docs/relnotes-7.10.3.html)6
-rw-r--r--mesalib/docs/relnotes/7.10.html (renamed from mesalib/docs/relnotes-7.10.html)8
-rw-r--r--mesalib/docs/relnotes/7.11.1.html (renamed from mesalib/docs/relnotes-7.11.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.11.2.html (renamed from mesalib/docs/relnotes-7.11.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.11.html (renamed from mesalib/docs/relnotes-7.11.html)6
-rw-r--r--mesalib/docs/relnotes/7.2.html (renamed from mesalib/docs/relnotes-7.2.html)4
-rw-r--r--mesalib/docs/relnotes/7.3.html (renamed from mesalib/docs/relnotes-7.3.html)6
-rw-r--r--mesalib/docs/relnotes/7.4.1.html (renamed from mesalib/docs/relnotes-7.4.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.4.2.html (renamed from mesalib/docs/relnotes-7.4.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.4.3.html (renamed from mesalib/docs/relnotes-7.4.3.html)6
-rw-r--r--mesalib/docs/relnotes/7.4.4.html (renamed from mesalib/docs/relnotes-7.4.4.html)6
-rw-r--r--mesalib/docs/relnotes/7.4.html (renamed from mesalib/docs/relnotes-7.4.html)6
-rw-r--r--mesalib/docs/relnotes/7.5.1.html (renamed from mesalib/docs/relnotes-7.5.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.5.2.html (renamed from mesalib/docs/relnotes-7.5.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.5.html (renamed from mesalib/docs/relnotes-7.5.html)6
-rw-r--r--mesalib/docs/relnotes/7.6.1.html (renamed from mesalib/docs/relnotes-7.6.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.6.html (renamed from mesalib/docs/relnotes-7.6.html)8
-rw-r--r--mesalib/docs/relnotes/7.7.1.html (renamed from mesalib/docs/relnotes-7.7.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.7.html (renamed from mesalib/docs/relnotes-7.7.html)6
-rw-r--r--mesalib/docs/relnotes/7.8.1.html (renamed from mesalib/docs/relnotes-7.8.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.8.2.html (renamed from mesalib/docs/relnotes-7.8.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.8.3.html (renamed from mesalib/docs/relnotes-7.8.3.html)6
-rw-r--r--mesalib/docs/relnotes/7.8.html (renamed from mesalib/docs/relnotes-7.8.html)10
-rw-r--r--mesalib/docs/relnotes/7.9.1.html (renamed from mesalib/docs/relnotes-7.9.1.html)6
-rw-r--r--mesalib/docs/relnotes/7.9.2.html (renamed from mesalib/docs/relnotes-7.9.2.html)6
-rw-r--r--mesalib/docs/relnotes/7.9.html (renamed from mesalib/docs/relnotes-7.9.html)8
-rw-r--r--mesalib/docs/relnotes/8.0.1.html (renamed from mesalib/docs/relnotes-8.0.1.html)6
-rw-r--r--mesalib/docs/relnotes/8.0.2.html (renamed from mesalib/docs/relnotes-8.0.2.html)6
-rw-r--r--mesalib/docs/relnotes/8.0.3.html (renamed from mesalib/docs/relnotes-8.0.3.html)6
-rw-r--r--mesalib/docs/relnotes/8.0.4.html (renamed from mesalib/docs/relnotes-8.0.4.html)6
-rw-r--r--mesalib/docs/relnotes/8.0.5.html (renamed from mesalib/docs/relnotes-8.0.5.html)6
-rw-r--r--mesalib/docs/relnotes/8.0.html (renamed from mesalib/docs/relnotes-8.0.html)6
-rw-r--r--mesalib/docs/relnotes/9.0.1.html (renamed from mesalib/docs/relnotes-9.0.1.html)4
-rw-r--r--mesalib/docs/relnotes/9.0.2.html (renamed from mesalib/docs/relnotes-9.0.2.html)4
-rw-r--r--mesalib/docs/relnotes/9.0.3.html (renamed from mesalib/docs/relnotes-9.0.3.html)4
-rw-r--r--mesalib/docs/relnotes/9.0.html (renamed from mesalib/docs/relnotes-9.0.html)4
-rw-r--r--mesalib/docs/relnotes/9.1.1.html (renamed from mesalib/docs/relnotes-9.1.1.html)4
-rw-r--r--mesalib/docs/relnotes/9.1.2.html237
-rw-r--r--mesalib/docs/relnotes/9.1.3.html230
-rw-r--r--mesalib/docs/relnotes/9.1.html (renamed from mesalib/docs/relnotes-9.1.html)4
-rw-r--r--mesalib/docs/relnotes/9.2.html70
-rw-r--r--mesalib/docs/specs/MESA_agp_offset.spec (renamed from mesalib/docs/MESA_agp_offset.spec)0
-rw-r--r--mesalib/docs/specs/MESA_copy_sub_buffer.spec (renamed from mesalib/docs/MESA_copy_sub_buffer.spec)0
-rw-r--r--mesalib/docs/specs/MESA_drm_image.spec (renamed from mesalib/docs/MESA_drm_image.spec)0
-rw-r--r--mesalib/docs/specs/MESA_multithread_makecurrent.spec (renamed from mesalib/docs/MESA_multithread_makecurrent.spec)0
-rw-r--r--mesalib/docs/specs/MESA_pack_invert.spec (renamed from mesalib/docs/MESA_pack_invert.spec)0
-rw-r--r--mesalib/docs/specs/MESA_pixmap_colormap.spec (renamed from mesalib/docs/MESA_pixmap_colormap.spec)0
-rw-r--r--mesalib/docs/specs/MESA_release_buffers.spec (renamed from mesalib/docs/MESA_release_buffers.spec)0
-rw-r--r--mesalib/docs/specs/MESA_resize_buffers.spec (renamed from mesalib/docs/MESA_resize_buffers.spec)0
-rw-r--r--mesalib/docs/specs/MESA_set_3dfx_mode.spec (renamed from mesalib/docs/MESA_set_3dfx_mode.spec)0
-rw-r--r--mesalib/docs/specs/MESA_shader_debug.spec (renamed from mesalib/docs/MESA_shader_debug.spec)0
-rw-r--r--mesalib/docs/specs/MESA_swap_control.spec (renamed from mesalib/docs/MESA_swap_control.spec)0
-rw-r--r--mesalib/docs/specs/MESA_swap_frame_usage.spec (renamed from mesalib/docs/MESA_swap_frame_usage.spec)0
-rw-r--r--mesalib/docs/specs/MESA_texture_array.spec (renamed from mesalib/docs/MESA_texture_array.spec)0
-rw-r--r--mesalib/docs/specs/MESA_texture_signed_rgba.spec (renamed from mesalib/docs/MESA_texture_signed_rgba.spec)0
-rw-r--r--mesalib/docs/specs/MESA_window_pos.spec (renamed from mesalib/docs/MESA_window_pos.spec)0
-rw-r--r--mesalib/docs/specs/MESA_ycbcr_texture.spec (renamed from mesalib/docs/MESA_ycbcr_texture.spec)0
-rw-r--r--mesalib/docs/specs/WL_bind_wayland_display.spec (renamed from mesalib/docs/WL_bind_wayland_display.spec)0
-rw-r--r--mesalib/docs/specs/enums.txt (renamed from mesalib/docs/enums.txt)0
-rw-r--r--mesalib/docs/versions.html4
-rw-r--r--mesalib/docs/viewperf.html30
-rw-r--r--mesalib/docs/xlibdriver.html6
-rw-r--r--mesalib/include/EGL/eglext.h45
-rw-r--r--mesalib/include/GL/gl.h7
-rw-r--r--mesalib/include/GL/glx.h7
-rw-r--r--mesalib/include/GL/glx_mangle.h7
-rw-r--r--mesalib/include/GL/osmesa.h7
-rw-r--r--mesalib/scons/crossmingw.py42
-rw-r--r--mesalib/scons/gallium.py25
-rw-r--r--mesalib/src/Makefile.am55
-rw-r--r--mesalib/src/gallium/Android.mk5
-rw-r--r--mesalib/src/gallium/SConscript49
-rw-r--r--mesalib/src/gallium/auxiliary/Makefile.sources1
-rw-r--r--mesalib/src/gallium/auxiliary/SConscript4
-rw-r--r--mesalib/src/gallium/auxiliary/hud/hud_context.c67
-rw-r--r--mesalib/src/gallium/auxiliary/hud/hud_fps.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blit.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blitter.c98
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blitter.h18
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_debug_symbol.c6
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_dump_state.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format.c34
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format.h12
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format_latc.c7
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format_rgtc.c7
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format_s3tc.c7
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_gen_mipmap.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_inlines.h3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_prim.h227
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_simple_list.h7
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_sse.h7
-rw-r--r--mesalib/src/glsl/Makefile.am3
-rw-r--r--mesalib/src/glsl/Makefile.sources5
-rw-r--r--mesalib/src/glsl/ast.h14
-rw-r--r--mesalib/src/glsl/ast_array_index.cpp190
-rw-r--r--mesalib/src/glsl/ast_function.cpp149
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp274
-rw-r--r--mesalib/src/glsl/builtin_variables.cpp33
-rw-r--r--mesalib/src/glsl/glcpp/glcpp-parse.y6
-rw-r--r--mesalib/src/glsl/glcpp/pp.c4
-rw-r--r--mesalib/src/glsl/glsl_parser.yy188
-rw-r--r--mesalib/src/glsl/glsl_parser_extras.cpp15
-rw-r--r--mesalib/src/glsl/glsl_parser_extras.h4
-rw-r--r--mesalib/src/glsl/glsl_symbol_table.cpp84
-rw-r--r--mesalib/src/glsl/glsl_symbol_table.h4
-rw-r--r--mesalib/src/glsl/glsl_types.cpp4
-rw-r--r--mesalib/src/glsl/glsl_types.h3
-rw-r--r--mesalib/src/glsl/ir.cpp16
-rw-r--r--mesalib/src/glsl/ir.h68
-rw-r--r--mesalib/src/glsl/ir_basic_block.cpp2
-rw-r--r--mesalib/src/glsl/ir_constant_expression.cpp185
-rw-r--r--mesalib/src/glsl/ir_optimization.h7
-rw-r--r--mesalib/src/glsl/ir_print_visitor.cpp5
-rw-r--r--mesalib/src/glsl/ir_reader.cpp10
-rw-r--r--mesalib/src/glsl/ir_uniform.h27
-rw-r--r--mesalib/src/glsl/ir_validate.cpp82
-rw-r--r--mesalib/src/glsl/link_interface_blocks.cpp110
-rw-r--r--mesalib/src/glsl/link_uniform_initializers.cpp25
-rw-r--r--mesalib/src/glsl/link_uniforms.cpp126
-rw-r--r--mesalib/src/glsl/link_varyings.cpp69
-rw-r--r--mesalib/src/glsl/linker.cpp28
-rw-r--r--mesalib/src/glsl/linker.h8
-rw-r--r--mesalib/src/glsl/lower_clip_distance.cpp124
-rw-r--r--mesalib/src/glsl/lower_instructions.cpp39
-rw-r--r--mesalib/src/glsl/lower_named_interface_blocks.cpp238
-rw-r--r--mesalib/src/glsl/lower_packed_varyings.cpp8
-rw-r--r--mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp149
-rw-r--r--mesalib/src/glsl/lower_vec_index_to_swizzle.cpp37
-rw-r--r--mesalib/src/glsl/lower_vector_insert.cpp139
-rw-r--r--mesalib/src/glsl/main.cpp4
-rw-r--r--mesalib/src/glsl/opt_algebraic.cpp6
-rw-r--r--mesalib/src/glsl/opt_flip_matrices.cpp122
-rw-r--r--mesalib/src/glsl/opt_if_simplification.cpp27
-rw-r--r--mesalib/src/glsl/program.h7
-rw-r--r--mesalib/src/glsl/ralloc.c8
-rw-r--r--mesalib/src/glsl/standalone_scaffolding.cpp17
-rw-r--r--mesalib/src/glsl/standalone_scaffolding.h17
-rw-r--r--mesalib/src/glsl/test_optpass.cpp14
-rw-r--r--mesalib/src/mapi/Android.mk16
-rw-r--r--mesalib/src/mapi/Makefile.am (renamed from mesalib/src/gallium/Makefile.am)24
-rw-r--r--mesalib/src/mapi/Makefile.sources (renamed from mesalib/src/mapi/mapi/sources.mak)24
-rw-r--r--mesalib/src/mapi/entry.c (renamed from mesalib/src/mapi/mapi/entry.c)0
-rw-r--r--mesalib/src/mapi/entry.h (renamed from mesalib/src/mapi/mapi/entry.h)0
-rw-r--r--mesalib/src/mapi/entry_x86-64_tls.h (renamed from mesalib/src/mapi/mapi/entry_x86-64_tls.h)13
-rw-r--r--mesalib/src/mapi/entry_x86_tls.h (renamed from mesalib/src/mapi/mapi/entry_x86_tls.h)13
-rw-r--r--mesalib/src/mapi/entry_x86_tsd.h (renamed from mesalib/src/mapi/mapi/entry_x86_tsd.h)0
-rw-r--r--mesalib/src/mapi/glapi/Makefile.am4
-rw-r--r--mesalib/src/mapi/glapi/Makefile.sources (renamed from mesalib/src/mapi/glapi/sources.mak)2
-rw-r--r--mesalib/src/mapi/glapi/SConscript10
-rw-r--r--mesalib/src/mapi/glapi/gen/GL3x.xml18
-rw-r--r--mesalib/src/mapi/glapi/gen/Makefile.am2
-rw-r--r--mesalib/src/mapi/glapi/gen/es_EXT.xml23
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_API.xml72
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_XML.py2
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_enums.py8
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_genexec.py4
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_table.py21
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py13
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_x86_asm.py13
-rw-r--r--mesalib/src/mapi/glapi/gen/glapi_gen.mk2
-rw-r--r--mesalib/src/mapi/glapi/gen/mesadef.py7
-rw-r--r--mesalib/src/mapi/glapi/glapi.c2
-rw-r--r--mesalib/src/mapi/glapi/glapi.h7
-rw-r--r--mesalib/src/mapi/glapi/glapi_dispatch.c7
-rw-r--r--mesalib/src/mapi/glapi/glapi_entrypoint.c9
-rw-r--r--mesalib/src/mapi/glapi/glapi_getproc.c7
-rw-r--r--mesalib/src/mapi/glapi/glapi_nop.c7
-rw-r--r--mesalib/src/mapi/glapi/glapi_priv.h7
-rw-r--r--mesalib/src/mapi/glapi/glthread.h2
-rw-r--r--mesalib/src/mapi/mapi.c (renamed from mesalib/src/mapi/mapi/mapi.c)0
-rw-r--r--mesalib/src/mapi/mapi.h (renamed from mesalib/src/mapi/mapi/mapi.h)0
-rw-r--r--mesalib/src/mapi/mapi_abi.py (renamed from mesalib/src/mapi/mapi/mapi_abi.py)2
-rw-r--r--mesalib/src/mapi/mapi_glapi.c (renamed from mesalib/src/mapi/mapi/mapi_glapi.c)6
-rw-r--r--mesalib/src/mapi/mapi_tmp.h (renamed from mesalib/src/mapi/mapi/mapi_tmp.h)0
-rw-r--r--mesalib/src/mapi/stub.c (renamed from mesalib/src/mapi/mapi/stub.c)0
-rw-r--r--mesalib/src/mapi/stub.h (renamed from mesalib/src/mapi/mapi/stub.h)0
-rw-r--r--mesalib/src/mapi/table.c (renamed from mesalib/src/mapi/mapi/table.c)0
-rw-r--r--mesalib/src/mapi/table.h (renamed from mesalib/src/mapi/mapi/table.h)0
-rw-r--r--mesalib/src/mapi/u_compiler.h (renamed from mesalib/src/mapi/mapi/u_compiler.h)0
-rw-r--r--mesalib/src/mapi/u_current.c (renamed from mesalib/src/mapi/mapi/u_current.c)7
-rw-r--r--mesalib/src/mapi/u_current.h (renamed from mesalib/src/mapi/mapi/u_current.h)0
-rw-r--r--mesalib/src/mapi/u_execmem.c (renamed from mesalib/src/mapi/mapi/u_execmem.c)9
-rw-r--r--mesalib/src/mapi/u_execmem.h (renamed from mesalib/src/mapi/mapi/u_execmem.h)0
-rw-r--r--mesalib/src/mapi/u_macros.h (renamed from mesalib/src/mapi/mapi/u_macros.h)0
-rw-r--r--mesalib/src/mapi/u_thread.h (renamed from mesalib/src/mapi/mapi/u_thread.h)7
-rw-r--r--mesalib/src/mesa/Android.gen.mk3
-rw-r--r--mesalib/src/mesa/Android.libmesa_dricore.mk2
-rw-r--r--mesalib/src/mesa/Android.libmesa_st_mesa.mk2
-rw-r--r--mesalib/src/mesa/Makefile.am24
-rw-r--r--mesalib/src/mesa/Makefile.sources (renamed from mesalib/src/mesa/sources.mak)1
-rw-r--r--mesalib/src/mesa/SConscript12
-rw-r--r--mesalib/src/mesa/drivers/Makefile.am22
-rw-r--r--mesalib/src/mesa/drivers/common/driverfuncs.c10
-rw-r--r--mesalib/src/mesa/drivers/common/driverfuncs.h7
-rw-r--r--mesalib/src/mesa/drivers/common/meta.c57
-rw-r--r--mesalib/src/mesa/drivers/common/meta.h7
-rw-r--r--mesalib/src/mesa/drivers/dri/common/Makefile.am1
-rw-r--r--mesalib/src/mesa/drivers/dri/common/drisw_util.c7
-rw-r--r--mesalib/src/mesa/drivers/dri/common/xmlpool.h7
-rw-r--r--mesalib/src/mesa/drivers/dri/common/xmlpool/t_options.h30
-rw-r--r--mesalib/src/mesa/drivers/dri/swrast/Makefile.am1
-rw-r--r--mesalib/src/mesa/drivers/dri/swrast/swrast.c7
-rw-r--r--mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h7
-rw-r--r--mesalib/src/mesa/main/accum.c8
-rw-r--r--mesalib/src/mesa/main/accum.h8
-rw-r--r--mesalib/src/mesa/main/api_arrayelt.c110
-rw-r--r--mesalib/src/mesa/main/api_arrayelt.h12
-rw-r--r--mesalib/src/mesa/main/api_exec.h7
-rw-r--r--mesalib/src/mesa/main/api_loopback.c8
-rw-r--r--mesalib/src/mesa/main/api_loopback.h9
-rw-r--r--mesalib/src/mesa/main/api_validate.c41
-rw-r--r--mesalib/src/mesa/main/api_validate.h13
-rw-r--r--mesalib/src/mesa/main/arbprogram.c7
-rw-r--r--mesalib/src/mesa/main/arbprogram.h7
-rw-r--r--mesalib/src/mesa/main/arrayobj.c9
-rw-r--r--mesalib/src/mesa/main/arrayobj.h8
-rw-r--r--mesalib/src/mesa/main/atifragshader.c1
-rw-r--r--mesalib/src/mesa/main/atifragshader.h1
-rw-r--r--mesalib/src/mesa/main/attrib.c11
-rw-r--r--mesalib/src/mesa/main/attrib.h8
-rw-r--r--mesalib/src/mesa/main/bitset.h11
-rw-r--r--mesalib/src/mesa/main/blend.c25
-rw-r--r--mesalib/src/mesa/main/blend.h11
-rw-r--r--mesalib/src/mesa/main/bufferobj.c21
-rw-r--r--mesalib/src/mesa/main/bufferobj.h8
-rw-r--r--mesalib/src/mesa/main/buffers.c12
-rw-r--r--mesalib/src/mesa/main/buffers.h7
-rw-r--r--mesalib/src/mesa/main/clear.c56
-rw-r--r--mesalib/src/mesa/main/clear.h7
-rw-r--r--mesalib/src/mesa/main/clip.c7
-rw-r--r--mesalib/src/mesa/main/clip.h7
-rw-r--r--mesalib/src/mesa/main/colormac.h7
-rw-r--r--mesalib/src/mesa/main/colortab.c8
-rw-r--r--mesalib/src/mesa/main/colortab.h8
-rw-r--r--mesalib/src/mesa/main/compiler.h7
-rw-r--r--mesalib/src/mesa/main/config.h21
-rw-r--r--mesalib/src/mesa/main/context.c44
-rw-r--r--mesalib/src/mesa/main/context.h38
-rw-r--r--mesalib/src/mesa/main/convolve.c8
-rw-r--r--mesalib/src/mesa/main/convolve.h8
-rw-r--r--mesalib/src/mesa/main/cpuinfo.c7
-rw-r--r--mesalib/src/mesa/main/cpuinfo.h7
-rw-r--r--mesalib/src/mesa/main/dd.h132
-rw-r--r--mesalib/src/mesa/main/debug.c31
-rw-r--r--mesalib/src/mesa/main/debug.h9
-rw-r--r--mesalib/src/mesa/main/depth.c15
-rw-r--r--mesalib/src/mesa/main/depth.h8
-rw-r--r--mesalib/src/mesa/main/dlist.c146
-rw-r--r--mesalib/src/mesa/main/dlist.h16
-rw-r--r--mesalib/src/mesa/main/dlopen.h7
-rw-r--r--mesalib/src/mesa/main/drawpix.c8
-rw-r--r--mesalib/src/mesa/main/drawpix.h8
-rw-r--r--mesalib/src/mesa/main/drawtex.c1
-rw-r--r--mesalib/src/mesa/main/drawtex.h1
-rw-r--r--mesalib/src/mesa/main/enable.c27
-rw-r--r--mesalib/src/mesa/main/enable.h7
-rw-r--r--mesalib/src/mesa/main/enums.h8
-rw-r--r--mesalib/src/mesa/main/errors.c7
-rw-r--r--mesalib/src/mesa/main/errors.h17
-rw-r--r--mesalib/src/mesa/main/es1_conversion.c1
-rw-r--r--mesalib/src/mesa/main/eval.c18
-rw-r--r--mesalib/src/mesa/main/eval.h23
-rw-r--r--mesalib/src/mesa/main/execmem.c9
-rw-r--r--mesalib/src/mesa/main/extensions.c17
-rw-r--r--mesalib/src/mesa/main/extensions.h8
-rw-r--r--mesalib/src/mesa/main/fbobject.c187
-rw-r--r--mesalib/src/mesa/main/fbobject.h38
-rw-r--r--mesalib/src/mesa/main/feedback.c8
-rw-r--r--mesalib/src/mesa/main/feedback.h8
-rw-r--r--mesalib/src/mesa/main/ff_fragment_shader.cpp5
-rw-r--r--mesalib/src/mesa/main/ffvertex_prog.c9
-rw-r--r--mesalib/src/mesa/main/fog.c7
-rw-r--r--mesalib/src/mesa/main/fog.h8
-rw-r--r--mesalib/src/mesa/main/format_pack.c7
-rw-r--r--mesalib/src/mesa/main/format_pack.h7
-rw-r--r--mesalib/src/mesa/main/format_unpack.c604
-rw-r--r--mesalib/src/mesa/main/format_unpack.h7
-rw-r--r--mesalib/src/mesa/main/formatquery.c1
-rw-r--r--mesalib/src/mesa/main/formats.c8
-rw-r--r--mesalib/src/mesa/main/formats.h37
-rw-r--r--mesalib/src/mesa/main/framebuffer.c88
-rw-r--r--mesalib/src/mesa/main/framebuffer.h7
-rw-r--r--mesalib/src/mesa/main/get.c123
-rw-r--r--mesalib/src/mesa/main/get.h7
-rw-r--r--mesalib/src/mesa/main/get_hash_generator.py26
-rw-r--r--mesalib/src/mesa/main/get_hash_params.py26
-rw-r--r--mesalib/src/mesa/main/getstring.c8
-rw-r--r--mesalib/src/mesa/main/glformats.c7
-rw-r--r--mesalib/src/mesa/main/glformats.h7
-rw-r--r--mesalib/src/mesa/main/glheader.h7
-rw-r--r--mesalib/src/mesa/main/hash.c11
-rw-r--r--mesalib/src/mesa/main/hash.h7
-rw-r--r--mesalib/src/mesa/main/hint.c7
-rw-r--r--mesalib/src/mesa/main/hint.h8
-rw-r--r--mesalib/src/mesa/main/histogram.c8
-rw-r--r--mesalib/src/mesa/main/histogram.h8
-rw-r--r--mesalib/src/mesa/main/image.c8
-rw-r--r--mesalib/src/mesa/main/image.h7
-rw-r--r--mesalib/src/mesa/main/imports.c7
-rw-r--r--mesalib/src/mesa/main/imports.h7
-rw-r--r--mesalib/src/mesa/main/light.c11
-rw-r--r--mesalib/src/mesa/main/light.h8
-rw-r--r--mesalib/src/mesa/main/lines.c7
-rw-r--r--mesalib/src/mesa/main/lines.h7
-rw-r--r--mesalib/src/mesa/main/macros.h13
-rw-r--r--mesalib/src/mesa/main/matrix.c8
-rw-r--r--mesalib/src/mesa/main/matrix.h7
-rw-r--r--mesalib/src/mesa/main/mfeatures.h53
-rw-r--r--mesalib/src/mesa/main/mipmap.c7
-rw-r--r--mesalib/src/mesa/main/mipmap.h7
-rw-r--r--mesalib/src/mesa/main/mtypes.h149
-rw-r--r--mesalib/src/mesa/main/multisample.c12
-rw-r--r--mesalib/src/mesa/main/multisample.h7
-rw-r--r--mesalib/src/mesa/main/pack.h7
-rw-r--r--mesalib/src/mesa/main/pbo.c7
-rw-r--r--mesalib/src/mesa/main/pbo.h7
-rw-r--r--mesalib/src/mesa/main/pixel.c8
-rw-r--r--mesalib/src/mesa/main/pixel.h8
-rw-r--r--mesalib/src/mesa/main/pixelstore.c25
-rw-r--r--mesalib/src/mesa/main/pixelstore.h7
-rw-r--r--mesalib/src/mesa/main/pixeltransfer.c7
-rw-r--r--mesalib/src/mesa/main/pixeltransfer.h7
-rw-r--r--mesalib/src/mesa/main/points.c12
-rw-r--r--mesalib/src/mesa/main/points.h7
-rw-r--r--mesalib/src/mesa/main/polygon.c12
-rw-r--r--mesalib/src/mesa/main/polygon.h7
-rw-r--r--mesalib/src/mesa/main/querymatrix.h1
-rw-r--r--mesalib/src/mesa/main/queryobj.c15
-rw-r--r--mesalib/src/mesa/main/queryobj.h8
-rw-r--r--mesalib/src/mesa/main/rastpos.c8
-rw-r--r--mesalib/src/mesa/main/rastpos.h8
-rw-r--r--mesalib/src/mesa/main/readpix.c7
-rw-r--r--mesalib/src/mesa/main/readpix.h7
-rw-r--r--mesalib/src/mesa/main/remap.c7
-rw-r--r--mesalib/src/mesa/main/remap.h35
-rw-r--r--mesalib/src/mesa/main/renderbuffer.c8
-rw-r--r--mesalib/src/mesa/main/renderbuffer.h7
-rw-r--r--mesalib/src/mesa/main/samplerobj.c8
-rw-r--r--mesalib/src/mesa/main/samplerobj.h7
-rw-r--r--mesalib/src/mesa/main/scissor.c7
-rw-r--r--mesalib/src/mesa/main/scissor.h7
-rw-r--r--mesalib/src/mesa/main/shaderapi.c19
-rw-r--r--mesalib/src/mesa/main/shaderapi.h7
-rw-r--r--mesalib/src/mesa/main/shaderobj.c8
-rw-r--r--mesalib/src/mesa/main/shaderobj.h7
-rw-r--r--mesalib/src/mesa/main/shared.c8
-rw-r--r--mesalib/src/mesa/main/shared.h7
-rw-r--r--mesalib/src/mesa/main/simple_list.h7
-rw-r--r--mesalib/src/mesa/main/state.c110
-rw-r--r--mesalib/src/mesa/main/state.h7
-rw-r--r--mesalib/src/mesa/main/stencil.c21
-rw-r--r--mesalib/src/mesa/main/stencil.h21
-rw-r--r--mesalib/src/mesa/main/syncobj.c1
-rw-r--r--mesalib/src/mesa/main/syncobj.h1
-rw-r--r--mesalib/src/mesa/main/texcompress.c10
-rw-r--r--mesalib/src/mesa/main/texcompress.h11
-rw-r--r--mesalib/src/mesa/main/texcompress_cpal.c8
-rw-r--r--mesalib/src/mesa/main/texcompress_cpal.h7
-rw-r--r--mesalib/src/mesa/main/texcompress_etc.c52
-rw-r--r--mesalib/src/mesa/main/texcompress_etc.h1
-rw-r--r--mesalib/src/mesa/main/texcompress_fxt1.c16
-rw-r--r--mesalib/src/mesa/main/texcompress_fxt1.h8
-rw-r--r--mesalib/src/mesa/main/texcompress_rgtc.c71
-rw-r--r--mesalib/src/mesa/main/texcompress_rgtc.h1
-rw-r--r--mesalib/src/mesa/main/texcompress_s3tc.c64
-rw-r--r--mesalib/src/mesa/main/texcompress_s3tc.h8
-rw-r--r--mesalib/src/mesa/main/texenv.c15
-rw-r--r--mesalib/src/mesa/main/texenv.h7
-rw-r--r--mesalib/src/mesa/main/texenvprogram.h7
-rw-r--r--mesalib/src/mesa/main/texformat.c1475
-rw-r--r--mesalib/src/mesa/main/texformat.h9
-rw-r--r--mesalib/src/mesa/main/texgen.c8
-rw-r--r--mesalib/src/mesa/main/texgen.h8
-rw-r--r--mesalib/src/mesa/main/texgetimage.c8
-rw-r--r--mesalib/src/mesa/main/texgetimage.h7
-rw-r--r--mesalib/src/mesa/main/teximage.c108
-rw-r--r--mesalib/src/mesa/main/teximage.h7
-rw-r--r--mesalib/src/mesa/main/texobj.c8
-rw-r--r--mesalib/src/mesa/main/texobj.h7
-rw-r--r--mesalib/src/mesa/main/texparam.c8
-rw-r--r--mesalib/src/mesa/main/texparam.h7
-rw-r--r--mesalib/src/mesa/main/texstate.c8
-rw-r--r--mesalib/src/mesa/main/texstate.h7
-rw-r--r--mesalib/src/mesa/main/texstorage.c38
-rw-r--r--mesalib/src/mesa/main/texstorage.h12
-rw-r--r--mesalib/src/mesa/main/texstore.c8
-rw-r--r--mesalib/src/mesa/main/texstore.h7
-rw-r--r--mesalib/src/mesa/main/transformfeedback.c28
-rw-r--r--mesalib/src/mesa/main/transformfeedback.h8
-rw-r--r--mesalib/src/mesa/main/uniform_query.cpp31
-rw-r--r--mesalib/src/mesa/main/uniforms.c22
-rw-r--r--mesalib/src/mesa/main/uniforms.h7
-rw-r--r--mesalib/src/mesa/main/varray.c41
-rw-r--r--mesalib/src/mesa/main/varray.h10
-rw-r--r--mesalib/src/mesa/main/version.c9
-rw-r--r--mesalib/src/mesa/main/version.h7
-rw-r--r--mesalib/src/mesa/main/viewport.c7
-rw-r--r--mesalib/src/mesa/main/viewport.h7
-rw-r--r--mesalib/src/mesa/main/vtxfmt.c59
-rw-r--r--mesalib/src/mesa/main/vtxfmt.h8
-rw-r--r--mesalib/src/mesa/math/m_clip_tmp.h7
-rw-r--r--mesalib/src/mesa/math/m_copy_tmp.h7
-rw-r--r--mesalib/src/mesa/math/m_debug.h7
-rw-r--r--mesalib/src/mesa/math/m_debug_clip.c7
-rw-r--r--mesalib/src/mesa/math/m_debug_norm.c7
-rw-r--r--mesalib/src/mesa/math/m_debug_util.h7
-rw-r--r--mesalib/src/mesa/math/m_debug_xform.c7
-rw-r--r--mesalib/src/mesa/math/m_dotprod_tmp.h7
-rw-r--r--mesalib/src/mesa/math/m_eval.c7
-rw-r--r--mesalib/src/mesa/math/m_eval.h7
-rw-r--r--mesalib/src/mesa/math/m_matrix.c7
-rw-r--r--mesalib/src/mesa/math/m_matrix.h7
-rw-r--r--mesalib/src/mesa/math/m_norm_tmp.h7
-rw-r--r--mesalib/src/mesa/math/m_trans_tmp.h7
-rw-r--r--mesalib/src/mesa/math/m_translate.c7
-rw-r--r--mesalib/src/mesa/math/m_translate.h7
-rw-r--r--mesalib/src/mesa/math/m_vector.c7
-rw-r--r--mesalib/src/mesa/math/m_vector.h7
-rw-r--r--mesalib/src/mesa/math/m_xform.c7
-rw-r--r--mesalib/src/mesa/math/m_xform.h7
-rw-r--r--mesalib/src/mesa/math/m_xform_tmp.h7
-rw-r--r--mesalib/src/mesa/program/Android.mk4
-rw-r--r--mesalib/src/mesa/program/Makefile.am4
-rw-r--r--mesalib/src/mesa/program/arbprogparse.c7
-rw-r--r--mesalib/src/mesa/program/arbprogparse.h7
-rw-r--r--mesalib/src/mesa/program/ir_to_mesa.cpp38
-rw-r--r--mesalib/src/mesa/program/prog_execute.c142
-rw-r--r--mesalib/src/mesa/program/prog_execute.h7
-rw-r--r--mesalib/src/mesa/program/prog_instruction.c16
-rw-r--r--mesalib/src/mesa/program/prog_instruction.h18
-rw-r--r--mesalib/src/mesa/program/prog_noise.c7
-rw-r--r--mesalib/src/mesa/program/prog_noise.h7
-rw-r--r--mesalib/src/mesa/program/prog_opt_constant_fold.c4
-rw-r--r--mesalib/src/mesa/program/prog_parameter.c7
-rw-r--r--mesalib/src/mesa/program/prog_parameter.h7
-rw-r--r--mesalib/src/mesa/program/prog_print.c21
-rw-r--r--mesalib/src/mesa/program/prog_print.h7
-rw-r--r--mesalib/src/mesa/program/prog_statevars.c7
-rw-r--r--mesalib/src/mesa/program/prog_statevars.h7
-rw-r--r--mesalib/src/mesa/program/program.c8
-rw-r--r--mesalib/src/mesa/program/program.h7
-rw-r--r--mesalib/src/mesa/program/program_parse.y7
-rw-r--r--mesalib/src/mesa/program/program_parse_extra.c24
-rw-r--r--mesalib/src/mesa/program/programopt.c9
-rw-r--r--mesalib/src/mesa/program/programopt.h7
-rw-r--r--mesalib/src/mesa/program/register_allocate.c6
-rw-r--r--mesalib/src/mesa/program/sampler.cpp20
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_array.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_constbuf.c28
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_depth.c9
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_framebuffer.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_msaa.c3
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_rasterizer.c11
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_sampler.c33
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_scissor.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_texture.c11
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_bitmap.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_bitmap.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_blit.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_blit.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c19
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_clear.c3
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawpixels.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawpixels.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawtex.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawtex.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_eglimage.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_eglimage.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_fbo.c39
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_feedback.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_feedback.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_flush.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_flush.h2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_msaa.c59
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_msaa.h39
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_queryobj.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_queryobj.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_rasterpos.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_rasterpos.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_texture.c51
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_xformfb.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_xformfb.h1
-rw-r--r--mesalib/src/mesa/state_tracker/st_context.c10
-rw-r--r--mesalib/src/mesa/state_tracker/st_context.h3
-rw-r--r--mesalib/src/mesa/state_tracker/st_draw.c5
-rw-r--r--mesalib/src/mesa/state_tracker/st_draw_feedback.c15
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c148
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.c36
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.h4
-rw-r--r--mesalib/src/mesa/state_tracker/st_gen_mipmap.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp48
-rw-r--r--mesalib/src/mesa/state_tracker/st_manager.c34
-rw-r--r--mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c22
-rw-r--r--mesalib/src/mesa/state_tracker/st_program.c1
-rw-r--r--mesalib/src/mesa/state_tracker/st_texture.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_texture.h11
-rw-r--r--mesalib/src/mesa/swrast/s_aaline.c7
-rw-r--r--mesalib/src/mesa/swrast/s_aaline.h7
-rw-r--r--mesalib/src/mesa/swrast/s_aalinetemp.h7
-rw-r--r--mesalib/src/mesa/swrast/s_aatriangle.c7
-rw-r--r--mesalib/src/mesa/swrast/s_aatriangle.h7
-rw-r--r--mesalib/src/mesa/swrast/s_aatritemp.h7
-rw-r--r--mesalib/src/mesa/swrast/s_alpha.c7
-rw-r--r--mesalib/src/mesa/swrast/s_alpha.h7
-rw-r--r--mesalib/src/mesa/swrast/s_bitmap.c7
-rw-r--r--mesalib/src/mesa/swrast/s_blend.c7
-rw-r--r--mesalib/src/mesa/swrast/s_blend.h7
-rw-r--r--mesalib/src/mesa/swrast/s_blit.c99
-rw-r--r--mesalib/src/mesa/swrast/s_chan.h7
-rw-r--r--mesalib/src/mesa/swrast/s_clear.c7
-rw-r--r--mesalib/src/mesa/swrast/s_context.c16
-rw-r--r--mesalib/src/mesa/swrast/s_context.h35
-rw-r--r--mesalib/src/mesa/swrast/s_copypix.c7
-rw-r--r--mesalib/src/mesa/swrast/s_depth.c7
-rw-r--r--mesalib/src/mesa/swrast/s_depth.h7
-rw-r--r--mesalib/src/mesa/swrast/s_drawpix.c7
-rw-r--r--mesalib/src/mesa/swrast/s_feedback.c7
-rw-r--r--mesalib/src/mesa/swrast/s_feedback.h7
-rw-r--r--mesalib/src/mesa/swrast/s_fog.c7
-rw-r--r--mesalib/src/mesa/swrast/s_fog.h7
-rw-r--r--mesalib/src/mesa/swrast/s_fragprog.c7
-rw-r--r--mesalib/src/mesa/swrast/s_fragprog.h7
-rw-r--r--mesalib/src/mesa/swrast/s_lines.c7
-rw-r--r--mesalib/src/mesa/swrast/s_lines.h7
-rw-r--r--mesalib/src/mesa/swrast/s_linetemp.h7
-rw-r--r--mesalib/src/mesa/swrast/s_logic.c7
-rw-r--r--mesalib/src/mesa/swrast/s_logic.h7
-rw-r--r--mesalib/src/mesa/swrast/s_masking.c7
-rw-r--r--mesalib/src/mesa/swrast/s_masking.h7
-rw-r--r--mesalib/src/mesa/swrast/s_points.c7
-rw-r--r--mesalib/src/mesa/swrast/s_points.h7
-rw-r--r--mesalib/src/mesa/swrast/s_renderbuffer.c7
-rw-r--r--mesalib/src/mesa/swrast/s_renderbuffer.h7
-rw-r--r--mesalib/src/mesa/swrast/s_span.c7
-rw-r--r--mesalib/src/mesa/swrast/s_span.h7
-rw-r--r--mesalib/src/mesa/swrast/s_stencil.c13
-rw-r--r--mesalib/src/mesa/swrast/s_stencil.h7
-rw-r--r--mesalib/src/mesa/swrast/s_texcombine.c9
-rw-r--r--mesalib/src/mesa/swrast/s_texcombine.h7
-rw-r--r--mesalib/src/mesa/swrast/s_texfetch.c22
-rw-r--r--mesalib/src/mesa/swrast/s_texfetch.h7
-rw-r--r--mesalib/src/mesa/swrast/s_texfetch_tmp.h18
-rw-r--r--mesalib/src/mesa/swrast/s_texfilter.c15
-rw-r--r--mesalib/src/mesa/swrast/s_texfilter.h7
-rw-r--r--mesalib/src/mesa/swrast/s_texrender.c63
-rw-r--r--mesalib/src/mesa/swrast/s_texture.c186
-rw-r--r--mesalib/src/mesa/swrast/s_triangle.c18
-rw-r--r--mesalib/src/mesa/swrast/s_triangle.h7
-rw-r--r--mesalib/src/mesa/swrast/s_tritemp.h7
-rw-r--r--mesalib/src/mesa/swrast/s_zoom.c7
-rw-r--r--mesalib/src/mesa/swrast/s_zoom.h7
-rw-r--r--mesalib/src/mesa/swrast/swrast.h19
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_context.c7
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_context.h7
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_triangle.c7
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_triangle.h7
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_tritmp.h7
-rw-r--r--mesalib/src/mesa/swrast_setup/ss_vb.h7
-rw-r--r--mesalib/src/mesa/swrast_setup/swrast_setup.h7
-rw-r--r--mesalib/src/mesa/tnl/t_context.c7
-rw-r--r--mesalib/src/mesa/tnl/t_context.h7
-rw-r--r--mesalib/src/mesa/tnl/t_draw.c7
-rw-r--r--mesalib/src/mesa/tnl/t_pipeline.c7
-rw-r--r--mesalib/src/mesa/tnl/t_pipeline.h7
-rw-r--r--mesalib/src/mesa/tnl/t_rasterpos.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_cliptmp.h7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_fog.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_light.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_lighttmp.h10
-rw-r--r--mesalib/src/mesa/tnl/t_vb_normals.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_points.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_program.c11
-rw-r--r--mesalib/src/mesa/tnl/t_vb_render.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_rendertmp.h7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_texgen.c10
-rw-r--r--mesalib/src/mesa/tnl/t_vb_texmat.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vb_vertex.c7
-rw-r--r--mesalib/src/mesa/tnl/t_vertex.c13
-rw-r--r--mesalib/src/mesa/tnl/tnl.h7
-rw-r--r--mesalib/src/mesa/vbo/vbo.h26
-rw-r--r--mesalib/src/mesa/vbo/vbo_context.c7
-rw-r--r--mesalib/src/mesa/vbo/vbo_context.h8
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec.c128
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec.h5
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_api.c182
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_array.c235
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_draw.c8
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_eval.c7
-rw-r--r--mesalib/src/mesa/vbo/vbo_noop.c100
-rw-r--r--mesalib/src/mesa/vbo/vbo_noop.h8
-rw-r--r--mesalib/src/mesa/vbo/vbo_primitive_restart.c3
-rw-r--r--mesalib/src/mesa/vbo/vbo_rebase.c7
-rw-r--r--mesalib/src/mesa/vbo/vbo_save.c10
-rw-r--r--mesalib/src/mesa/vbo/vbo_save.h9
-rw-r--r--mesalib/src/mesa/vbo/vbo_save_api.c364
-rw-r--r--mesalib/src/mesa/vbo/vbo_save_draw.c25
-rw-r--r--mesalib/src/mesa/vbo/vbo_save_loopback.c3
-rw-r--r--mesalib/src/mesa/vbo/vbo_split.c7
-rw-r--r--mesalib/src/mesa/vbo/vbo_split.h7
-rw-r--r--mesalib/src/mesa/vbo/vbo_split_copy.c7
-rw-r--r--mesalib/src/mesa/vbo/vbo_split_inplace.c7
-rw-r--r--mesalib/src/mesa/x86/3dnow.c7
-rw-r--r--mesalib/src/mesa/x86/3dnow.h7
-rw-r--r--mesalib/src/mesa/x86/3dnow_normal.S7
-rw-r--r--mesalib/src/mesa/x86/3dnow_xform1.S7
-rw-r--r--mesalib/src/mesa/x86/3dnow_xform2.S7
-rw-r--r--mesalib/src/mesa/x86/3dnow_xform3.S7
-rw-r--r--mesalib/src/mesa/x86/3dnow_xform4.S7
-rw-r--r--mesalib/src/mesa/x86/Makefile.am1
-rw-r--r--mesalib/src/mesa/x86/clip_args.h7
-rw-r--r--mesalib/src/mesa/x86/common_x86.c7
-rw-r--r--mesalib/src/mesa/x86/common_x86_asm.S7
-rw-r--r--mesalib/src/mesa/x86/common_x86_asm.h7
-rw-r--r--mesalib/src/mesa/x86/common_x86_features.h7
-rw-r--r--mesalib/src/mesa/x86/gen_matypes.c7
-rw-r--r--mesalib/src/mesa/x86/mmx.h7
-rw-r--r--mesalib/src/mesa/x86/norm_args.h7
-rw-r--r--mesalib/src/mesa/x86/sse.c7
-rw-r--r--mesalib/src/mesa/x86/sse.h7
-rw-r--r--mesalib/src/mesa/x86/sse_normal.S7
-rw-r--r--mesalib/src/mesa/x86/sse_xform1.S7
-rw-r--r--mesalib/src/mesa/x86/sse_xform2.S7
-rw-r--r--mesalib/src/mesa/x86/sse_xform3.S7
-rw-r--r--mesalib/src/mesa/x86/sse_xform4.S7
-rw-r--r--mesalib/src/mesa/x86/x86_cliptest.S7
-rw-r--r--mesalib/src/mesa/x86/x86_xform.c7
-rw-r--r--mesalib/src/mesa/x86/x86_xform.h7
-rw-r--r--mesalib/src/mesa/x86/x86_xform2.S7
-rw-r--r--mesalib/src/mesa/x86/x86_xform3.S7
-rw-r--r--mesalib/src/mesa/x86/x86_xform4.S7
-rw-r--r--mesalib/src/mesa/x86/xform_args.h7
-rw-r--r--mkfontscale/man/mkfontscale.man6
-rw-r--r--pixman/configure.ac13
-rw-r--r--pixman/pixman/pixman-arm-neon-asm.h2
-rw-r--r--pixman/pixman/pixman-fast-path.c99
-rw-r--r--pixman/pixman/pixman-filter.c2
-rw-r--r--pixman/pixman/pixman-general.c92
-rw-r--r--pixman/pixman/pixman-image.c10
-rw-r--r--pixman/pixman/pixman-implementation.c89
-rw-r--r--pixman/pixman/pixman-mips-dspr2-asm.S723
-rw-r--r--pixman/pixman/pixman-mips-dspr2-asm.h51
-rw-r--r--pixman/pixman/pixman-mips-dspr2.c31
-rw-r--r--pixman/pixman/pixman-mips-dspr2.h42
-rw-r--r--pixman/pixman/pixman-mmx.c82
-rw-r--r--pixman/pixman/pixman-noop.c183
-rw-r--r--pixman/pixman/pixman-private.h70
-rw-r--r--pixman/pixman/pixman-region.c6
-rw-r--r--pixman/pixman/pixman-sse2.c93
-rw-r--r--pixman/pixman/pixman-utils.c11
-rw-r--r--pixman/pixman/pixman-vmx.c2
-rw-r--r--pixman/pixman/pixman.c2
-rw-r--r--pixman/pixman/refactor478
-rw-r--r--pixman/test/blitters-test.c13
-rw-r--r--pixman/test/lowlevel-blt-bench.c13
-rw-r--r--pixman/test/prng-test.c5
-rw-r--r--pixman/test/utils-prng.c58
-rw-r--r--pixman/test/utils-prng.h5
-rw-r--r--xkbcomp/man/xkbcomp.man12
-rw-r--r--xkbcomp/utils.h4
-rw-r--r--xorg-server/COPYING1
-rw-r--r--xorg-server/Xext/saver.c8
-rw-r--r--xorg-server/Xext/xvmain.c4
-rw-r--r--xorg-server/Xi/chgdctl.c6
-rw-r--r--xorg-server/Xi/devbell.c3
-rw-r--r--xorg-server/Xi/exevents.c179
-rw-r--r--xorg-server/Xi/extinit.c38
-rw-r--r--xorg-server/Xi/setdval.c3
-rw-r--r--xorg-server/Xi/setmode.c4
-rw-r--r--xorg-server/Xi/ungrdevb.c2
-rw-r--r--xorg-server/Xi/ungrdevk.c2
-rw-r--r--xorg-server/Xi/xibarriers.c12
-rw-r--r--xorg-server/Xi/xibarriers.h4
-rw-r--r--xorg-server/Xi/xigrabdev.c15
-rw-r--r--xorg-server/Xi/xipassivegrab.c2
-rw-r--r--xorg-server/configure.ac14
-rw-r--r--xorg-server/dix/cursor.c29
-rw-r--r--xorg-server/dix/devices.c59
-rw-r--r--xorg-server/dix/dispatch.c4
-rw-r--r--xorg-server/dix/dixutils.c8
-rw-r--r--xorg-server/dix/eventconvert.c23
-rw-r--r--xorg-server/dix/events.c89
-rw-r--r--xorg-server/dix/getevents.c61
-rw-r--r--xorg-server/dix/grabs.c21
-rw-r--r--xorg-server/dix/main.c7
-rw-r--r--xorg-server/dix/pixmap.c2
-rw-r--r--xorg-server/dix/registry.c25
-rw-r--r--xorg-server/dix/touch.c118
-rw-r--r--xorg-server/dix/window.c15
-rw-r--r--xorg-server/fb/fbpixmap.c1
-rw-r--r--xorg-server/glx/glxdri.c10
-rw-r--r--xorg-server/glx/glxdri2.c4
-rw-r--r--xorg-server/hw/dmx/config/dmxcompat.c4
-rw-r--r--xorg-server/hw/kdrive/ephyr/man/Xephyr.man6
-rw-r--r--xorg-server/hw/kdrive/fbdev/fbdev.c157
-rw-r--r--xorg-server/hw/kdrive/fbdev/fbdev.h2
-rw-r--r--xorg-server/hw/kdrive/src/kdrive.c3
-rw-r--r--xorg-server/hw/xfree86/common/xf86.h26
-rw-r--r--xorg-server/hw/xfree86/common/xf86Config.c1
-rw-r--r--xorg-server/hw/xfree86/common/xf86Events.c17
-rw-r--r--xorg-server/hw/xfree86/common/xf86Init.c2
-rw-r--r--xorg-server/hw/xfree86/common/xf86Xinput.c2
-rw-r--r--xorg-server/hw/xfree86/common/xf86platformBus.c30
-rw-r--r--xorg-server/hw/xfree86/common/xf86platformBus.h4
-rw-r--r--xorg-server/hw/xfree86/common/xf86sbusBus.c6
-rw-r--r--xorg-server/hw/xfree86/ddc/xf86DDC.h2
-rw-r--r--xorg-server/hw/xfree86/fbdevhw/Makefile.am2
-rw-r--r--xorg-server/hw/xfree86/fbdevhw/fbdevhw.c1
-rw-r--r--xorg-server/hw/xfree86/modes/Makefile.am4
-rw-r--r--xorg-server/hw/xfree86/modes/xf86Crtc.c39
-rw-r--r--xorg-server/hw/xfree86/modes/xf86Crtc.h3
-rw-r--r--xorg-server/hw/xfree86/modes/xf86Cursors.c4
-rw-r--r--xorg-server/hw/xfree86/modes/xf86DisplayIDModes.c1
-rw-r--r--xorg-server/hw/xfree86/modes/xf86Modes.h6
-rw-r--r--xorg-server/hw/xfree86/modes/xf86RandR12.c3
-rw-r--r--xorg-server/hw/xfree86/modes/xf86RandR12.h3
-rw-r--r--xorg-server/hw/xfree86/modes/xf86Rename.h94
-rw-r--r--xorg-server/hw/xfree86/os-support/bus/Sbus.c8
-rw-r--r--xorg-server/hw/xfree86/os-support/linux/lnx_platform.c62
-rw-r--r--xorg-server/hw/xfree86/os-support/shared/posix_tty.c3
-rw-r--r--xorg-server/hw/xfree86/os-support/solaris/sun_init.c2
-rw-r--r--xorg-server/hw/xfree86/os-support/xf86_OSproc.h3
-rw-r--r--xorg-server/hw/xfree86/ramdac/xf86Cursor.c28
-rw-r--r--xorg-server/hw/xfree86/utils/cvt/Makefile.am1
-rw-r--r--xorg-server/hw/xfree86/utils/cvt/cvt.c1
-rw-r--r--xorg-server/hw/xfree86/vbe/Makefile.am1
-rw-r--r--xorg-server/hw/xfree86/vbe/vbe.c1
-rw-r--r--xorg-server/hw/xwin/winclipboardthread.c5
-rw-r--r--xorg-server/hw/xwin/windialogs.c12
-rw-r--r--xorg-server/hw/xwin/winkeybd.c2
-rw-r--r--xorg-server/hw/xwin/winmultiwindowwindow.c5
-rw-r--r--xorg-server/hw/xwin/winpfbdd.c13
-rw-r--r--xorg-server/hw/xwin/winscrinit.c4
-rw-r--r--xorg-server/hw/xwin/winwin32rootlesswindow.c4
-rw-r--r--xorg-server/hw/xwin/winwindow.c4
-rw-r--r--xorg-server/hw/xwin/winwindowswm.c15
-rw-r--r--xorg-server/hw/xwin/winwndproc.c2
-rw-r--r--xorg-server/include/callback.h1
-rw-r--r--xorg-server/include/cursor.h4
-rw-r--r--xorg-server/include/dixgrabs.h2
-rw-r--r--xorg-server/include/dixstruct.h2
-rw-r--r--xorg-server/include/eventstr.h2
-rw-r--r--xorg-server/include/hotplug.h1
-rw-r--r--xorg-server/include/input.h2
-rw-r--r--xorg-server/include/inputstr.h2
-rw-r--r--xorg-server/include/registry.h1
-rw-r--r--xorg-server/include/xkbsrv.h3
-rw-r--r--xorg-server/miext/shadow/Makefile.am4
-rw-r--r--xorg-server/miext/shadow/c2p_core.h187
-rw-r--r--xorg-server/miext/shadow/shadow.h12
-rw-r--r--xorg-server/miext/shadow/shafb4.c139
-rw-r--r--xorg-server/miext/shadow/shafb8.c143
-rw-r--r--xorg-server/miext/shadow/shiplan2p4.c136
-rw-r--r--xorg-server/miext/shadow/shiplan2p8.c137
-rw-r--r--xorg-server/miext/shadow/shpacked.c1
-rw-r--r--xorg-server/os/io.c1
-rw-r--r--xorg-server/os/log.c111
-rw-r--r--xorg-server/randr/randr.c24
-rw-r--r--xorg-server/randr/randrstr.h4
-rw-r--r--xorg-server/randr/rrcrtc.c2
-rw-r--r--xorg-server/randr/rrinfo.c2
-rw-r--r--xorg-server/randr/rroutput.c2
-rw-r--r--xorg-server/randr/rrscreen.c2
-rw-r--r--xorg-server/render/animcur.c3
-rw-r--r--xorg-server/test/input.c2
-rw-r--r--xorg-server/test/signal-logging.c95
-rw-r--r--xorg-server/xfixes/cursor.c6
-rw-r--r--xorg-server/xkb/xkbInit.c23
-rw-r--r--xorg-server/xkeyboard-config/NEWS2
-rw-r--r--xorg-server/xkeyboard-config/configure.ac4
-rw-r--r--xorg-server/xkeyboard-config/keycodes/Makefile.am1
-rw-r--r--xorg-server/xkeyboard-config/keycodes/olpc24
-rw-r--r--xorg-server/xkeyboard-config/po/ca.po1036
-rw-r--r--xorg-server/xkeyboard-config/po/da.po1037
-rw-r--r--xorg-server/xkeyboard-config/po/de.po1049
-rw-r--r--xorg-server/xkeyboard-config/po/eo.po1036
-rw-r--r--xorg-server/xkeyboard-config/po/fr.po1038
-rw-r--r--xorg-server/xkeyboard-config/po/ja.po4789
-rw-r--r--xorg-server/xkeyboard-config/po/pl.po1030
-rw-r--r--xorg-server/xkeyboard-config/po/pt_BR.po4145
-rw-r--r--xorg-server/xkeyboard-config/po/ru.po1036
-rw-r--r--xorg-server/xkeyboard-config/po/uk.po1038
-rw-r--r--xorg-server/xkeyboard-config/po/xkeyboard-config.pot1020
-rw-r--r--xorg-server/xkeyboard-config/po/zh_TW.po4335
-rw-r--r--xorg-server/xkeyboard-config/rules/base.ml_c.part3
-rw-r--r--xorg-server/xkeyboard-config/rules/base.ml_s.part2
-rw-r--r--xorg-server/xkeyboard-config/rules/base.xml.in22
-rw-r--r--xorg-server/xkeyboard-config/rules/evdev.m_k.part2
-rw-r--r--xorg-server/xkeyboard-config/symbols/cd4
-rw-r--r--xorg-server/xkeyboard-config/symbols/es47
-rw-r--r--xorg-server/xkeyboard-config/symbols/inet2
-rw-r--r--xorg-server/xkeyboard-config/symbols/olpc8
-rw-r--r--xorg-server/xkeyboard-config/symbols/ru19
-rw-r--r--xorg-server/xkeyboard-config/symbols/us61
967 files changed, 28568 insertions, 16302 deletions
diff --git a/apps/xwininfo/configure.ac b/apps/xwininfo/configure.ac
index ae0c3df22..b28dd894a 100644
--- a/apps/xwininfo/configure.ac
+++ b/apps/xwininfo/configure.ac
@@ -23,7 +23,7 @@ dnl Process this file with autoconf to create configure.
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([xwininfo], [1.1.2],
+AC_INIT([xwininfo], [1.1.3],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xwininfo])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
diff --git a/fontconfig/README b/fontconfig/README
index a855f28ff..8120585a7 100644
--- a/fontconfig/README
+++ b/fontconfig/README
@@ -1,12 +1,29 @@
Fontconfig
Font configuration and customization library
- Version 2.10.92 (2.11 RC2)
- 2013-03-29
+ Version 2.10.93 (2.11 RC3)
+ 2013-05-20
Check INSTALL for compilation and installation instructions.
Report bugs to https://bugs.freedesktop.org in the fontconfig module.
+2.10.93 (2.11 RC3)
+
+Akira TAGOH (10):
+ Bug 62980 - matching native fonts with even :lang=en
+ Ensure closing fp on error
+ Obtain fonts data via FT_Face instead of opening a file directly
+ Revert the previous change and rework to not export freetype API outside fcfreetype.c
+ documented FC_HASH and FC_POSTSCRIPT_NAME
+ Bug 63329 - make check fails: .. contents:: :depth: 2
+ Use the glob matching for filename
+ Bug 63452 - conf.d/README outdated
+ Fix missing OSAtomicCompareAndSwapPtrBarrier() on Mac OS X 10.4
+ Bug 63922 - FcFreeTypeQueryFace fails on postscripts fonts loaded from memory
+
+Sebastian Freundt (1):
+ build-chain, replace INCLUDES directive by AM_CPPFLAGS
+
2.10.92 (2.11 RC2)
Akira TAGOH (33):
diff --git a/fontconfig/conf.d/Makefile.am b/fontconfig/conf.d/Makefile.am
index 77597e57f..e1fab5061 100644
--- a/fontconfig/conf.d/Makefile.am
+++ b/fontconfig/conf.d/Makefile.am
@@ -21,8 +21,9 @@
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-DOC_FILES= \
- README
+BUILT_SOURCES = README
+DOC_SOURCES = README.in
+DOC_FILES = $(DOC_SOURCES:.in=)
CONF_LINKS = \
10-scale-bitmap-fonts.conf \
@@ -41,7 +42,8 @@ CONF_LINKS = \
80-delicious.conf \
90-synthetic.conf
-EXTRA_DIST = $(template_DATA) $(DOC_FILES)
+EXTRA_DIST = $(template_DATA) $(DOC_SOURCES)
+CLEANFILES = $(DOC_FILES)
configdir=$(CONFIGDIR)
config_DATA = $(DOC_FILES)
@@ -78,6 +80,9 @@ template_DATA = \
80-delicious.conf \
90-synthetic.conf
+README: $(srcdir)/README.in
+ sed "s|\@TEMPLATEDIR\@|$(templatedir)|" $< > $@
+
install-data-hook:
mkdir -p $(DESTDIR)$(configdir)
@(echo cd $(DESTDIR)$(configdir); \
diff --git a/fontconfig/conf.d/README b/fontconfig/conf.d/README.in
index c2fb52c3b..90c45de52 100644
--- a/fontconfig/conf.d/README
+++ b/fontconfig/conf.d/README.in
@@ -2,9 +2,9 @@ conf.d/README
Each file in this directory is a fontconfig configuration file. Fontconfig
scans this directory, loading all files of the form [0-9][0-9]*.conf.
-These files are normally installed in ../conf.avail and then symlinked here,
-allowing them to be easily installed and then enabled/disabled by adjusting
-the symlinks.
+These files are normally installed in @TEMPLATEDIR@
+and then symlinked here, allowing them to be easily installed and then
+enabled/disabled by adjusting the symlinks.
The files are loaded in numeric order, the structure of the configuration
has led to the following conventions in usage:
diff --git a/fontconfig/configure.ac b/fontconfig/configure.ac
index 791937226..0f129db0d 100644
--- a/fontconfig/configure.ac
+++ b/fontconfig/configure.ac
@@ -33,7 +33,7 @@ dnl This is the package version number, not the shared library
dnl version. This same version number must appear in fontconfig/fontconfig.h
dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
dnl not possible to extract the version number here from fontconfig.h
-AC_INIT([fontconfig], [2.10.92], [https://bugs.freedesktop.org/enger_bug.cgi?product=fontconfig])
+AC_INIT([fontconfig], [2.10.93], [https://bugs.freedesktop.org/enger_bug.cgi?product=fontconfig])
AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
diff --git a/fontconfig/doc/fontconfig-devel.sgml b/fontconfig/doc/fontconfig-devel.sgml
index 05c5c0928..a7b853021 100644
--- a/fontconfig/doc/fontconfig-devel.sgml
+++ b/fontconfig/doc/fontconfig-devel.sgml
@@ -196,6 +196,9 @@ convenience for the application's rendering mechanism.
default value of familylang,
stylelang and fullnamelang
prgname FC_PRGNAME String Name of the running program
+ hash FC_HASH String SHA256 hash value of the font data
+ with "sha256:" prefix.
+ postscriptname FC_POSTSCRIPT_NAME String Font name in PostScript
</programlisting>
</sect2>
</sect1>
diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h
index 361ca4f9e..422187b3c 100644
--- a/fontconfig/fontconfig/fontconfig.h
+++ b/fontconfig/fontconfig/fontconfig.h
@@ -52,7 +52,7 @@ typedef int FcBool;
#define FC_MAJOR 2
#define FC_MINOR 10
-#define FC_REVISION 92
+#define FC_REVISION 93
#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
diff --git a/fontconfig/src/fcatomic.h b/fontconfig/src/fcatomic.h
index a76431139..362e52164 100644
--- a/fontconfig/src/fcatomic.h
+++ b/fontconfig/src/fcatomic.h
@@ -70,13 +70,25 @@ typedef LONG fc_atomic_int_t;
#elif !defined(FC_NO_MT) && defined(__APPLE__)
#include <libkern/OSAtomic.h>
+#ifdef __MAC_OS_X_MIN_REQUIRED
+#include <AvailabilityMacros.h>
+#elif defined(__IPHONE_OS_MIN_REQUIRED)
+#include <Availability.h>
+#endif
typedef int fc_atomic_int_t;
#define fc_atomic_int_add(AI, V) (OSAtomicAdd32Barrier ((V), &(AI)) - (V))
#define fc_atomic_ptr_get(P) (OSMemoryBarrier (), (void *) *(P))
+#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
-
+#else
+#if __ppc64__ || __x86_64__
+#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
+#else
+#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
+#endif
+#endif
#elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c
index 7da50b50f..fcdf73efe 100644
--- a/fontconfig/src/fccfg.c
+++ b/fontconfig/src/fccfg.c
@@ -2211,57 +2211,13 @@ FcConfigGlobAdd (FcConfig *config,
}
static FcBool
-FcConfigGlobMatch (const FcChar8 *glob,
- const FcChar8 *string)
-{
- FcChar8 c;
-
- while ((c = *glob++))
- {
- switch (c) {
- case '*':
- /* short circuit common case */
- if (!*glob)
- return FcTrue;
- /* short circuit another common case */
- if (strchr ((char *) glob, '*') == 0)
- {
- size_t l1, l2;
-
- l1 = strlen ((char *) string);
- l2 = strlen ((char *) glob);
- if (l1 < l2)
- return FcFalse;
- string += (l1 - l2);
- }
- while (*string)
- {
- if (FcConfigGlobMatch (glob, string))
- return FcTrue;
- string++;
- }
- return FcFalse;
- case '?':
- if (*string++ == '\0')
- return FcFalse;
- break;
- default:
- if (*string++ != c)
- return FcFalse;
- break;
- }
- }
- return *string == '\0';
-}
-
-static FcBool
FcConfigGlobsMatch (const FcStrSet *globs,
const FcChar8 *string)
{
int i;
for (i = 0; i < globs->num; i++)
- if (FcConfigGlobMatch (globs->strs[i], string))
+ if (FcStrGlobMatch (globs->strs[i], string))
return FcTrue;
return FcFalse;
}
diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c
index 8a037c059..02e85cb05 100644
--- a/fontconfig/src/fcfreetype.c
+++ b/fontconfig/src/fcfreetype.c
@@ -1104,7 +1104,10 @@ FcFreeTypeQueryFace (const FT_Face face,
char psname[256];
const char *tmp;
- FcChar8 *hashstr;
+ FcChar8 *hashstr = NULL;
+ char *fontdata = NULL;
+ FT_Error err;
+ FT_ULong len = 0, alen;
pat = FcPatternCreate ();
if (!pat)
@@ -1662,12 +1665,36 @@ FcFreeTypeQueryFace (const FT_Face face,
if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative))
goto bail1;
- hashstr = FcHashGetSHA256DigestFromFile (file);
- if (!hashstr)
- goto bail1;
- if (!FcPatternAddString (pat, FC_HASH, hashstr))
- goto bail1;
- free (hashstr);
+ err = FT_Load_Sfnt_Table (face, 0, 0, NULL, &len);
+ if (err == FT_Err_Ok)
+ {
+ alen = (len + 63) & ~63;
+ fontdata = malloc (alen);
+ if (!fontdata)
+ goto bail3;
+ err = FT_Load_Sfnt_Table (face, 0, 0, (FT_Byte *)fontdata, &len);
+ if (err != FT_Err_Ok)
+ goto bail3;
+ memset (&fontdata[len], 0, alen - len);
+ hashstr = FcHashGetSHA256DigestFromMemory (fontdata, len);
+ }
+ else if (err == FT_Err_Invalid_Face_Handle)
+ {
+ /* font may not support SFNT. falling back to
+ * read the font data from file directly
+ */
+ hashstr = FcHashGetSHA256DigestFromFile (file);
+ }
+ else
+ {
+ goto bail3;
+ }
+ if (hashstr)
+ {
+ if (!FcPatternAddString (pat, FC_HASH, hashstr))
+ goto bail1;
+ }
+bail3:
/*
* Compute the unicode coverage for the font
@@ -1756,6 +1783,10 @@ FcFreeTypeQueryFace (const FT_Face face,
bail2:
FcCharSetDestroy (cs);
bail1:
+ if (hashstr)
+ free (hashstr);
+ if (fontdata)
+ free (fontdata);
FcPatternDestroy (pat);
bail0:
return NULL;
diff --git a/fontconfig/src/fchash.c b/fontconfig/src/fchash.c
index 827b20f9f..92585a632 100644
--- a/fontconfig/src/fchash.c
+++ b/fontconfig/src/fchash.c
@@ -220,7 +220,7 @@ FcHashGetSHA256DigestFromFile (const FcChar8 *filename)
ret = FcHashInitSHA256Digest ();
if (!ret)
- return NULL;
+ goto bail0;
while (!feof (fp))
{
@@ -261,5 +261,60 @@ FcHashGetSHA256DigestFromFile (const FcChar8 *filename)
bail0:
fclose (fp);
+
return NULL;
}
+
+FcChar8 *
+FcHashGetSHA256DigestFromMemory (const char *fontdata,
+ size_t length)
+{
+ char ibuf[64];
+ FcChar32 *ret;
+ size_t i = 0;
+
+ ret = FcHashInitSHA256Digest ();
+ if (!ret)
+ return NULL;
+
+ while (i <= length)
+ {
+ if ((length - i) < 64)
+ {
+ long v;
+ size_t n;
+
+ /* add a padding */
+ n = length - i;
+ if (n > 0)
+ memcpy (ibuf, &fontdata[i], n);
+ memset (&ibuf[n], 0, 64 - n);
+ ibuf[n] = 0x80;
+ if ((64 - n) < 9)
+ {
+ /* process a block once */
+ FcHashComputeSHA256Digest (ret, ibuf);
+ memset (ibuf, 0, 64);
+ }
+ /* set input size at the end */
+ v = length * 8;
+ ibuf[63 - 0] = v & 0xff;
+ ibuf[63 - 1] = (v >> 8) & 0xff;
+ ibuf[63 - 2] = (v >> 16) & 0xff;
+ ibuf[63 - 3] = (v >> 24) & 0xff;
+ ibuf[63 - 4] = (v >> 32) & 0xff;
+ ibuf[63 - 5] = (v >> 40) & 0xff;
+ ibuf[63 - 6] = (v >> 48) & 0xff;
+ ibuf[63 - 7] = (v >> 56) & 0xff;
+ FcHashComputeSHA256Digest (ret, ibuf);
+ break;
+ }
+ else
+ {
+ FcHashComputeSHA256Digest (ret, &fontdata[i]);
+ }
+ i += 64;
+ }
+
+ return FcHashSHA256ToString (ret);
+}
diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h
index c45075ecc..65bf3330b 100644
--- a/fontconfig/src/fcint.h
+++ b/fontconfig/src/fcint.h
@@ -818,9 +818,14 @@ FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
FcPrivate FcChar8 *
FcHashGetSHA256Digest (const FcChar8 *input_strings,
size_t len);
+
FcPrivate FcChar8 *
FcHashGetSHA256DigestFromFile (const FcChar8 *filename);
+FcPrivate FcChar8 *
+FcHashGetSHA256DigestFromMemory (const char *fontdata,
+ size_t length);
+
/* fcinit.c */
FcPrivate FcConfig *
FcInitLoadOwnConfig (FcConfig *config);
@@ -1085,6 +1090,10 @@ FcPrivate int
FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
FcPrivate FcBool
+FcStrGlobMatch (const FcChar8 *glob,
+ const FcChar8 *string);
+
+FcPrivate FcBool
FcStrUsesHome (const FcChar8 *s);
FcPrivate FcChar8 *
diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c
index 2d7b79840..10976d6e8 100644
--- a/fontconfig/src/fcmatch.c
+++ b/fontconfig/src/fcmatch.c
@@ -191,17 +191,26 @@ FcCompareSize (FcValue *value1, FcValue *value2)
static double
FcCompareFilename (FcValue *v1, FcValue *v2)
{
- const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2);
- if (FcStrCmp (s1, s2) == 0)
- return 0.0;
- else if (FcStrCmpIgnoreCase (s1, s2) == 0)
- return 1.0;
- else if (FcStrRegexCmp (s2, s1))
- return 2.0;
- else if (FcStrRegexCmpIgnoreCase (s2, s1))
- return 3.0;
- else
- return 4.0;
+ const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2);
+ if (FcStrCmp (s1, s2) == 0)
+ return 0.0;
+ else if (FcStrCmpIgnoreCase (s1, s2) == 0)
+ return 1.0;
+ else if (FcStrGlobMatch (s1, s2))
+ return 2.0;
+ else
+ return 3.0;
+}
+
+static double
+FcCompareHash (FcValue *v1, FcValue *v2)
+{
+ const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2);
+
+ /* Do not match an empty string */
+ if (!s1 || !s2 || !s1[0] || !s2[0])
+ return 1.0;
+ return FcCompareString (v1, v2);
}
#define PRI_NULL(n) \
@@ -217,6 +226,7 @@ FcCompareFilename (FcValue *v1, FcValue *v2)
#define PRI_FcCompareCharSet(n) PRI1(n)
#define PRI_FcCompareLang(n) PRI1(n)
#define PRI_FcComparePostScript(n) PRI1(n)
+#define PRI_FcCompareHash(n) PRI1(n)
#define FC_OBJECT(NAME, Type, Cmp) PRI_##Cmp(NAME)
diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c
index 6dd4d4948..a52534548 100644
--- a/fontconfig/src/fcname.c
+++ b/fontconfig/src/fcname.c
@@ -318,6 +318,12 @@ FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *l
while ((c = *cur))
{
+ if (!isspace (c))
+ break;
+ ++cur;
+ }
+ while ((c = *cur))
+ {
if (c == '\\')
{
++cur;
diff --git a/fontconfig/src/fcobjs.h b/fontconfig/src/fcobjs.h
index b7354012d..682fe6ad3 100644
--- a/fontconfig/src/fcobjs.h
+++ b/fontconfig/src/fcobjs.h
@@ -43,6 +43,6 @@ FC_OBJECT (LCD_FILTER, FcTypeInteger, NULL)
FC_OBJECT (NAMELANG, FcTypeString, NULL)
FC_OBJECT (FONT_FEATURES, FcTypeString, NULL)
FC_OBJECT (PRGNAME, FcTypeString, NULL)
-FC_OBJECT (HASH, FcTypeString, FcCompareString)
+FC_OBJECT (HASH, FcTypeString, FcCompareHash)
FC_OBJECT (POSTSCRIPT_NAME, FcTypeString, FcComparePostScript)
/* ^-------------- Add new objects here. */
diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c
index 339a3465d..3a32031a2 100644
--- a/fontconfig/src/fcstr.c
+++ b/fontconfig/src/fcstr.c
@@ -459,6 +459,50 @@ FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcCha
return w1.src - s1 - 1;
}
+FcBool
+FcStrGlobMatch (const FcChar8 *glob,
+ const FcChar8 *string)
+{
+ FcChar8 c;
+
+ while ((c = *glob++))
+ {
+ switch (c) {
+ case '*':
+ /* short circuit common case */
+ if (!*glob)
+ return FcTrue;
+ /* short circuit another common case */
+ if (strchr ((char *) glob, '*') == 0)
+ {
+ size_t l1, l2;
+
+ l1 = strlen ((char *) string);
+ l2 = strlen ((char *) glob);
+ if (l1 < l2)
+ return FcFalse;
+ string += (l1 - l2);
+ }
+ while (*string)
+ {
+ if (FcStrGlobMatch (glob, string))
+ return FcTrue;
+ string++;
+ }
+ return FcFalse;
+ case '?':
+ if (*string++ == '\0')
+ return FcFalse;
+ break;
+ default:
+ if (*string++ != c)
+ return FcFalse;
+ break;
+ }
+ }
+ return *string == '\0';
+}
+
const FcChar8 *
FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
{
diff --git a/libX11/README b/libX11/README
index befb5a6d9..e551acb52 100644
--- a/libX11/README
+++ b/libX11/README
@@ -1,9 +1,10 @@
libX11 - Core X11 protocol client library
Documentation for this library can be found in the included man pages,
-the xlib spec from the doc/xorg-docs module, also available at:
+and in the Xlib spec from the specs subdirectory, also available at:
- http://xorg.freedesktop.org/releases/X11R7.0/doc/PDF/xlib.pdf
+ http://www.x.org/releases/current/doc/libX11/libX11/libX11.html
+ http://www.x.org/releases/current/doc/libX11/libX11/libX11.pdf
and the O'Reilly Xlib books, which they have made freely available online,
though only for older versions of X11:
diff --git a/libX11/configure.ac b/libX11/configure.ac
index 7734219f4..f533f3c4b 100644
--- a/libX11/configure.ac
+++ b/libX11/configure.ac
@@ -1,7 +1,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libX11], [1.5.99.901],
+AC_INIT([libX11], [1.6.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libX11])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([src/config.h include/X11/XlibConf.h])
diff --git a/libX11/include/X11/Xlibint.h b/libX11/include/X11/Xlibint.h
index 06395b32e..acbad6beb 100644
--- a/libX11/include/X11/Xlibint.h
+++ b/libX11/include/X11/Xlibint.h
@@ -832,6 +832,15 @@ typedef struct _XExten { /* private to extension mechanism */
struct _XExten *next_flush; /* next in list of those with flushes */
} _XExtension;
+/* Temporary definition until we can depend on an xproto release with it */
+#ifdef _X_COLD
+# define _XLIB_COLD _X_COLD
+#elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 403) /* 4.3+ */
+# define _XLIB_COLD __attribute__((__cold__))
+#else
+# define _XLIB_COLD /* nothing */
+#endif
+
/* extension hooks */
#ifdef DataRoutineIsProcedure
@@ -854,7 +863,14 @@ extern int (*_XErrorFunction)(
extern void _XEatData(
Display* /* dpy */,
unsigned long /* n */
-);
+) _XLIB_COLD;
+extern void _XEatDataWords(
+ Display* /* dpy */,
+ unsigned long /* n */
+) _XLIB_COLD;
+#if defined(__SUNPRO_C) /* Studio compiler alternative to "cold" attribute */
+# pragma rarely_called(_XEatData, _XEatDataWords)
+#endif
extern char *_XAllocScratch(
Display* /* dpy */,
unsigned long /* nbytes */
diff --git a/libX11/man/XCreateGC.man b/libX11/man/XCreateGC.man
index 62a2f00c1..de0d03933 100644
--- a/libX11/man/XCreateGC.man
+++ b/libX11/man/XCreateGC.man
@@ -460,7 +460,7 @@ are:
.\" and operation.
.\".CP T 1
.\"Display Functions
-.TS H
+.TS
lw(1.5i) cw(.5i) lw(2i).
_
.sp 6p
@@ -469,7 +469,6 @@ Function Name Value Operation
.sp 6p
_
.sp 6p
-.TH
T{
.ZN GXclear
T} T{
diff --git a/libX11/modules/im/ximcp/Makefile.am b/libX11/modules/im/ximcp/Makefile.am
index 16a6ca878..8aae839cc 100644
--- a/libX11/modules/im/ximcp/Makefile.am
+++ b/libX11/modules/im/ximcp/Makefile.am
@@ -6,6 +6,7 @@ AM_CPPFLAGS= \
-I$(top_srcdir)/src/xcms \
-I$(top_srcdir)/src/xkb \
-I$(top_srcdir)/src/xlibi18n \
+ -I$(top_srcdir)/src \
-D_BSD_SOURCE -DXIM_t -DTRANS_CLIENT
AM_CFLAGS= \
diff --git a/libX11/modules/im/ximcp/imLcPrs.c b/libX11/modules/im/ximcp/imLcPrs.c
index 4e54385b5..f3627a0d1 100644
--- a/libX11/modules/im/ximcp/imLcPrs.c
+++ b/libX11/modules/im/ximcp/imLcPrs.c
@@ -41,6 +41,8 @@ OR PERFORMANCE OF THIS SOFTWARE.
#include "Ximint.h"
#include <sys/stat.h>
#include <stdio.h>
+#include <limits.h>
+#include "pathmax.h"
#define XLC_BUFSIZE 256
@@ -56,6 +58,8 @@ extern int _Xmbstoutf8(
int len
);
+static void parsestringfile(FILE *fp, Xim im, int depth);
+
/*
* Parsing File Format:
*
@@ -304,9 +308,9 @@ static char*
TransFileName(Xim im, char *name)
{
char *home = NULL, *lcCompose = NULL;
- char dir[XLC_BUFSIZE];
- char *i = name, *ret, *j;
- int l = 0;
+ char dir[XLC_BUFSIZE] = "";
+ char *i = name, *ret = NULL, *j;
+ size_t l = 0;
while (*i) {
if (*i == '%') {
@@ -316,30 +320,51 @@ TransFileName(Xim im, char *name)
l++;
break;
case 'H':
- home = getenv("HOME");
- if (home)
- l += strlen(home);
+ if (home == NULL)
+ home = getenv("HOME");
+ if (home) {
+ size_t Hsize = strlen(home);
+ if (Hsize > PATH_MAX)
+ /* your home directory length is ridiculous */
+ goto end;
+ l += Hsize;
+ }
break;
case 'L':
if (lcCompose == NULL)
lcCompose = _XlcFileName(im->core.lcd, COMPOSE_FILE);
- if (lcCompose)
- l += strlen(lcCompose);
+ if (lcCompose) {
+ size_t Lsize = strlen(lcCompose);
+ if (Lsize > PATH_MAX)
+ /* your compose pathname length is ridiculous */
+ goto end;
+ l += Lsize;
+ }
break;
case 'S':
- xlocaledir(dir, XLC_BUFSIZE);
- l += strlen(dir);
+ if (dir[0] == '\0')
+ xlocaledir(dir, XLC_BUFSIZE);
+ if (dir[0]) {
+ size_t Ssize = strlen(dir);
+ if (Ssize > PATH_MAX)
+ /* your locale directory path length is ridiculous */
+ goto end;
+ l += Ssize;
+ }
break;
}
} else {
l++;
}
i++;
+ if (l > PATH_MAX)
+ /* your expanded path length is ridiculous */
+ goto end;
}
j = ret = Xmalloc(l+1);
if (ret == NULL)
- return ret;
+ goto end;
i = name;
while (*i) {
if (*i == '%') {
@@ -371,6 +396,7 @@ TransFileName(Xim im, char *name)
}
}
*j = '\0';
+end:
Xfree(lcCompose);
return ret;
}
@@ -423,7 +449,8 @@ static int
parseline(
FILE *fp,
Xim im,
- char* tokenbuf)
+ char* tokenbuf,
+ int depth)
{
int token;
DTModifier modifier_mask;
@@ -470,11 +497,13 @@ parseline(
goto error;
if ((filename = TransFileName(im, tokenbuf)) == NULL)
goto error;
+ if (++depth > 100)
+ goto error;
infp = _XFopenFile(filename, "r");
Xfree(filename);
if (infp == NULL)
goto error;
- _XimParseStringFile(infp, im);
+ parsestringfile(infp, im, depth);
fclose(infp);
return (0);
} else if ((token == KEY) && (strcmp("None", tokenbuf) == 0)) {
@@ -668,17 +697,28 @@ _XimParseStringFile(
FILE *fp,
Xim im)
{
+ parsestringfile(fp, im, 0);
+}
+
+static void
+parsestringfile(
+ FILE *fp,
+ Xim im,
+ int depth)
+{
char tb[8192];
char* tbp;
struct stat st;
if (fstat (fileno (fp), &st) != -1) {
unsigned long size = (unsigned long) st.st_size;
+ if (st.st_size >= INT_MAX)
+ return;
if (size <= sizeof tb) tbp = tb;
else tbp = malloc (size);
if (tbp != NULL) {
- while (parseline(fp, im, tbp) >= 0) {}
+ while (parseline(fp, im, tbp, depth) >= 0) {}
if (tbp != tb) free (tbp);
}
}
diff --git a/libX11/modules/im/ximcp/imTrX.c b/libX11/modules/im/ximcp/imTrX.c
index 1412d7046..76ff20e55 100644
--- a/libX11/modules/im/ximcp/imTrX.c
+++ b/libX11/modules/im/ximcp/imTrX.c
@@ -372,7 +372,7 @@ _XimXGetReadData(
XFree(prop_ret);
return False;
}
- if (buf_len >= length) {
+ if (buf_len >= (int)nitems) {
(void)memcpy(buf, prop_ret, (int)nitems);
*ret_len = (int)nitems;
if (bytes_after_ret > 0) {
diff --git a/libX11/nls/en_US.UTF-8/Compose.pre b/libX11/nls/en_US.UTF-8/Compose.pre
index 8b45d920d..ab8237643 100644
--- a/libX11/nls/en_US.UTF-8/Compose.pre
+++ b/libX11/nls/en_US.UTF-8/Compose.pre
@@ -618,6 +618,7 @@ XCOMM Part 3
<Multi_key> <I> <quotedbl> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <diaeresis> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <I> <diaeresis> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <J> <acute> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
<Multi_key> <D> <H> : "Ð" ETH # LATIN CAPITAL LETTER ETH
<dead_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<Multi_key> <asciitilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
@@ -738,6 +739,7 @@ XCOMM Part 3
<Multi_key> <i> <quotedbl> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <diaeresis> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <i> <diaeresis> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<Multi_key> <j> <acute> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
<Multi_key> <d> <h> : "ð" eth # LATIN SMALL LETTER ETH
<dead_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<Multi_key> <asciitilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
diff --git a/libX11/src/AllCells.c b/libX11/src/AllCells.c
index ddd9c22ef..6e97e1181 100644
--- a/libX11/src/AllCells.c
+++ b/libX11/src/AllCells.c
@@ -53,8 +53,13 @@ Status XAllocColorCells(
status = _XReply(dpy, (xReply *)&rep, 0, xFalse);
if (status) {
- _XRead32 (dpy, (long *) pixels, 4L * (long) (rep.nPixels));
- _XRead32 (dpy, (long *) masks, 4L * (long) (rep.nMasks));
+ if ((rep.nPixels > ncolors) || (rep.nMasks > nplanes)) {
+ _XEatDataWords(dpy, rep.length);
+ status = 0; /* Failure */
+ } else {
+ _XRead32 (dpy, (long *) pixels, 4L * (long) (rep.nPixels));
+ _XRead32 (dpy, (long *) masks, 4L * (long) (rep.nMasks));
+ }
}
UnlockDisplay(dpy);
diff --git a/libX11/src/Cmap.h b/libX11/src/Cmap.h
index 062b5383b..78cc3ea67 100644
--- a/libX11/src/Cmap.h
+++ b/libX11/src/Cmap.h
@@ -2,6 +2,8 @@
#ifndef _CMAP_H_
#define _CMAP_H_
+#include <X11/Xlib.h>
+
extern void
_XcmsDeleteCmapRec(
Display *dpy,
diff --git a/libX11/src/Context.c b/libX11/src/Context.c
index 79ae7d66c..4bb465b1a 100644
--- a/libX11/src/Context.c
+++ b/libX11/src/Context.c
@@ -111,7 +111,7 @@ static void ResizeTable(DB db)
otable = db->table;
for (i = INITHASHMASK+1; (i + i) < db->numentries; )
i += i;
- db->table = (TableEntry *) Xcalloc((unsigned)i, sizeof(TableEntry));
+ db->table = Xcalloc(i, sizeof(TableEntry));
if (!db->table) {
db->table = otable;
return;
@@ -180,11 +180,11 @@ int XSaveContext(
UnlockDisplay(display);
}
if (!db) {
- db = (DB) Xmalloc(sizeof(DBRec));
+ db = Xmalloc(sizeof(DBRec));
if (!db)
return XCNOMEM;
db->mask = INITHASHMASK;
- db->table = (TableEntry *)Xcalloc(db->mask + 1, sizeof(TableEntry));
+ db->table = Xcalloc(db->mask + 1, sizeof(TableEntry));
if (!db->table) {
Xfree((char *)db);
return XCNOMEM;
@@ -210,7 +210,7 @@ int XSaveContext(
return 0;
}
}
- entry = (TableEntry) Xmalloc(sizeof(TableEntryRec));
+ entry = Xmalloc(sizeof(TableEntryRec));
if (!entry)
return XCNOMEM;
entry->rid = rid;
diff --git a/libX11/src/Cr.h b/libX11/src/Cr.h
index 800c9ab1c..635e9e452 100644
--- a/libX11/src/Cr.h
+++ b/libX11/src/Cr.h
@@ -2,6 +2,8 @@
#ifndef _CR_H_
#define _CR_H_
+#include <X11/Xlib.h>
+
extern int _XUpdateGCCache(
register GC gc,
register unsigned long mask,
diff --git a/libX11/src/CrGC.c b/libX11/src/CrGC.c
index 11de94c1f..2d5f17c00 100644
--- a/libX11/src/CrGC.c
+++ b/libX11/src/CrGC.c
@@ -72,7 +72,7 @@ GC XCreateGC (
register _XExtension *ext;
LockDisplay(dpy);
- if ((gc = (GC)Xmalloc (sizeof(struct _XGC))) == NULL) {
+ if ((gc = Xmalloc (sizeof(struct _XGC))) == NULL) {
UnlockDisplay(dpy);
SyncHandle();
return (NULL);
diff --git a/libX11/src/Depths.c b/libX11/src/Depths.c
index f49655cb2..a8b719d00 100644
--- a/libX11/src/Depths.c
+++ b/libX11/src/Depths.c
@@ -49,7 +49,7 @@ int *XListDepths (
register Depth *dp;
register int i;
- depths = (int *) Xmalloc (count * sizeof(int));
+ depths = Xmalloc (count * sizeof(int));
if (!depths) return NULL;
for (i = 0, dp = scr->depths; i < count; i++, dp++)
depths[i] = dp->depth;
diff --git a/libX11/src/FSWrap.c b/libX11/src/FSWrap.c
index 910e602f4..12d0406ba 100644
--- a/libX11/src/FSWrap.c
+++ b/libX11/src/FSWrap.c
@@ -112,7 +112,7 @@ _XParseBaseFontNameList(
if (!*ptr)
break;
}
- if (!(list = (char **) Xmalloc((unsigned)sizeof(char *) * (*num + 1)))) {
+ if (!(list = Xmalloc(sizeof(char *) * (*num + 1)))) {
Xfree(psave);
return (char **)NULL;
}
@@ -133,7 +133,7 @@ copy_string_list(
if (string_list == NULL || list_count <= 0)
return (char **) NULL;
- string_list_ret = (char **) Xmalloc(sizeof(char *) * list_count);
+ string_list_ret = Xmalloc(sizeof(char *) * list_count);
if (string_list_ret == NULL)
return (char **) NULL;
@@ -142,7 +142,7 @@ copy_string_list(
for (length = 0; count-- > 0; list_src++)
length += strlen(*list_src) + 1;
- dst = (char *) Xmalloc(length);
+ dst = Xmalloc(length);
if (dst == NULL) {
Xfree(string_list_ret);
return (char **) NULL;
diff --git a/libX11/src/Font.c b/libX11/src/Font.c
index 25e1790c8..a32f740bd 100644
--- a/libX11/src/Font.c
+++ b/libX11/src/Font.c
@@ -31,6 +31,7 @@ authorization from the X Consortium and the XFree86 Project.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
#if defined(XF86BIGFONT)
#define USE_XF86BIGFONT
@@ -183,7 +184,8 @@ _XQueryFont (
unsigned long seq)
{
register XFontStruct *fs;
- register long nbytes;
+ unsigned long nbytes;
+ unsigned long reply_left; /* unused data words left in reply buffer */
xQueryFontReply reply;
register xResourceReq *req;
register _XExtension *ext;
@@ -211,9 +213,10 @@ _XQueryFont (
}
if (seq)
DeqAsyncHandler(dpy, &async);
- if (! (fs = (XFontStruct *) Xmalloc (sizeof (XFontStruct)))) {
- _XEatData(dpy, (unsigned long)(reply.nFontProps * SIZEOF(xFontProp) +
- reply.nCharInfos * SIZEOF(xCharInfo)));
+ reply_left = reply.length -
+ ((SIZEOF(xQueryFontReply) - SIZEOF(xReply)) >> 2);
+ if (! (fs = Xmalloc (sizeof (XFontStruct)))) {
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
fs->ext_data = NULL;
@@ -239,16 +242,19 @@ _XQueryFont (
*/
fs->properties = NULL;
if (fs->n_properties > 0) {
- nbytes = reply.nFontProps * sizeof(XFontProp);
- fs->properties = (XFontProp *) Xmalloc ((unsigned) nbytes);
+ /* nFontProps is a CARD16 */
nbytes = reply.nFontProps * SIZEOF(xFontProp);
+ if ((nbytes >> 2) <= reply_left) {
+ size_t pbytes = reply.nFontProps * sizeof(XFontProp);
+ fs->properties = Xmalloc (pbytes);
+ }
if (! fs->properties) {
Xfree((char *) fs);
- _XEatData(dpy, (unsigned long)
- (nbytes + reply.nCharInfos * SIZEOF(xCharInfo)));
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
_XRead32 (dpy, (long *)fs->properties, nbytes);
+ reply_left -= (nbytes >> 2);
}
/*
* If no characters in font, then it is a bad font, but
@@ -256,16 +262,21 @@ _XQueryFont (
*/
fs->per_char = NULL;
if (reply.nCharInfos > 0){
- nbytes = reply.nCharInfos * sizeof(XCharStruct);
- if (! (fs->per_char = (XCharStruct *) Xmalloc ((unsigned) nbytes))) {
+ /* nCharInfos is a CARD32 */
+ if (reply.nCharInfos < (INT_MAX / sizeof(XCharStruct))) {
+ nbytes = reply.nCharInfos * SIZEOF(xCharInfo);
+ if ((nbytes >> 2) <= reply_left) {
+ size_t cibytes = reply.nCharInfos * sizeof(XCharStruct);
+ fs->per_char = Xmalloc (cibytes);
+ }
+ }
+ if (! fs->per_char) {
if (fs->properties) Xfree((char *) fs->properties);
Xfree((char *) fs);
- _XEatData(dpy, (unsigned long)
- (reply.nCharInfos * SIZEOF(xCharInfo)));
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
- nbytes = reply.nCharInfos * SIZEOF(xCharInfo);
_XRead16 (dpy, (char *)fs->per_char, nbytes);
}
@@ -312,7 +323,7 @@ _XF86BigfontCodes (
if (pData)
return (XF86BigfontCodes *) pData->private_data;
- pData = (XExtData *) Xmalloc(sizeof(XExtData) + sizeof(XF86BigfontCodes));
+ pData = Xmalloc(sizeof(XExtData) + sizeof(XF86BigfontCodes));
if (!pData) {
/* Out of luck. */
return (XF86BigfontCodes *) NULL;
@@ -392,7 +403,8 @@ _XF86BigfontQueryFont (
unsigned long seq)
{
register XFontStruct *fs;
- register long nbytes;
+ unsigned long nbytes;
+ unsigned long reply_left; /* unused data left in reply buffer */
xXF86BigfontQueryFontReply reply;
register xXF86BigfontQueryFontReq *req;
register _XExtension *ext;
@@ -445,13 +457,10 @@ _XF86BigfontQueryFont (
DeqAsyncHandler(dpy, &async2);
if (seq)
DeqAsyncHandler(dpy, &async1);
- if (! (fs = (XFontStruct *) Xmalloc (sizeof (XFontStruct)))) {
- _XEatData(dpy,
- reply.nFontProps * SIZEOF(xFontProp)
- + (reply.nCharInfos > 0 && reply.shmid == (CARD32)(-1)
- ? reply.nUniqCharInfos * SIZEOF(xCharInfo)
- + (reply.nCharInfos+1)/2 * 2 * sizeof(CARD16)
- : 0));
+ reply_left = reply.length -
+ ((SIZEOF(xXF86BigfontQueryFontReply) - SIZEOF(xReply)) >> 2);
+ if (! (fs = Xmalloc (sizeof (XFontStruct)))) {
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
fs->ext_data = NULL;
@@ -477,23 +486,33 @@ _XF86BigfontQueryFont (
*/
fs->properties = NULL;
if (fs->n_properties > 0) {
- nbytes = reply.nFontProps * sizeof(XFontProp);
- fs->properties = (XFontProp *) Xmalloc ((unsigned) nbytes);
+ /* nFontProps is a CARD16 */
nbytes = reply.nFontProps * SIZEOF(xFontProp);
+ if ((nbytes >> 2) <= reply_left) {
+ size_t pbytes = reply.nFontProps * sizeof(XFontProp);
+ fs->properties = Xmalloc (pbytes);
+ }
if (! fs->properties) {
Xfree((char *) fs);
- _XEatData(dpy,
- nbytes
- + (reply.nCharInfos > 0 && reply.shmid == (CARD32)(-1)
- ? reply.nUniqCharInfos * SIZEOF(xCharInfo)
- + (reply.nCharInfos+1)/2 * 2 * sizeof(CARD16)
- : 0));
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
_XRead32 (dpy, (long *)fs->properties, nbytes);
+ reply_left -= (nbytes >> 2);
}
fs->per_char = NULL;
+#ifndef LONG64
+ /* compares each part to half the maximum, which should be far more than
+ any real font needs, so the combined total doesn't overflow either */
+ if (reply.nUniqCharInfos > ((ULONG_MAX / 2) / SIZEOF(xCharInfo)) ||
+ reply.nCharInfos > ((ULONG_MAX / 2) / sizeof(CARD16))) {
+ Xfree((char *) fs->properties);
+ Xfree((char *) fs);
+ _XEatDataWords(dpy, reply_left);
+ return (XFontStruct *)NULL;
+ }
+#endif
if (reply.nCharInfos > 0) {
/* fprintf(stderr, "received font metrics, nCharInfos = %d, nUniqCharInfos = %d, shmid = %d\n", reply.nCharInfos, reply.nUniqCharInfos, reply.shmid); */
if (reply.shmid == (CARD32)(-1)) {
@@ -503,18 +522,18 @@ _XF86BigfontQueryFont (
nbytes = reply.nUniqCharInfos * SIZEOF(xCharInfo)
+ (reply.nCharInfos+1)/2 * 2 * sizeof(CARD16);
- pUniqCI = (xCharInfo *) Xmalloc (nbytes);
+ pUniqCI = Xmalloc (nbytes);
if (!pUniqCI) {
if (fs->properties) Xfree((char *) fs->properties);
Xfree((char *) fs);
- _XEatData(dpy, nbytes);
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
- if (! (fs->per_char = (XCharStruct *) Xmalloc (reply.nCharInfos * sizeof(XCharStruct)))) {
+ if (! (fs->per_char = Xmalloc (reply.nCharInfos * sizeof(XCharStruct)))) {
Xfree((char *) pUniqCI);
if (fs->properties) Xfree((char *) fs->properties);
Xfree((char *) fs);
- _XEatData(dpy, nbytes);
+ _XEatDataWords(dpy, reply_left);
return (XFontStruct *)NULL;
}
_XRead16 (dpy, (char *) pUniqCI, nbytes);
@@ -537,7 +556,7 @@ _XF86BigfontQueryFont (
XEDataObject fs_union;
char *addr;
- pData = (XExtData *) Xmalloc(sizeof(XExtData));
+ pData = Xmalloc(sizeof(XExtData));
if (!pData) {
if (fs->properties) Xfree((char *) fs->properties);
Xfree((char *) fs);
@@ -569,6 +588,7 @@ _XF86BigfontQueryFont (
if (!(extcodes->serverCapabilities & CAP_VerifiedLocal)) {
struct shmid_ds buf;
if (!(shmctl(reply.shmid, IPC_STAT, &buf) >= 0
+ && reply.nCharInfos < (LONG_MAX / sizeof(XCharStruct))
&& buf.shm_segsz >= reply.shmsegoffset + reply.nCharInfos * sizeof(XCharStruct) + sizeof(CARD32)
&& *(CARD32 *)(addr + reply.shmsegoffset + reply.nCharInfos * sizeof(XCharStruct)) == extcodes->serverSignature)) {
shmdt(addr);
diff --git a/libX11/src/FontInfo.c b/libX11/src/FontInfo.c
index fb296b8a8..0cb5b1910 100644
--- a/libX11/src/FontInfo.c
+++ b/libX11/src/FontInfo.c
@@ -28,6 +28,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
#if defined(XF86BIGFONT)
#define USE_XF86BIGFONT
@@ -45,10 +46,11 @@ int maxNames,
int *actualCount, /* RETURN */
XFontStruct **info) /* RETURN */
{
- register long nbytes;
+ unsigned long nbytes;
+ unsigned long reply_left; /* unused data left in reply buffer */
register int i;
register XFontStruct *fs;
- register int size = 0;
+ unsigned int size = 0;
XFontStruct *finfo = NULL;
char **flist = NULL;
xListFontsWithInfoReply reply;
@@ -67,52 +69,44 @@ XFontStruct **info) /* RETURN */
if (!_XReply (dpy, (xReply *) &reply,
((SIZEOF(xListFontsWithInfoReply) -
SIZEOF(xGenericReply)) >> 2), xFalse)) {
- for (j=(i-1); (j >= 0); j--) {
- Xfree(flist[j]);
- if (finfo[j].properties) Xfree((char *) finfo[j].properties);
- }
- if (flist) Xfree((char *) flist);
- if (finfo) Xfree((char *) finfo);
- UnlockDisplay(dpy);
- SyncHandle();
- return ((char **) NULL);
+ reply.nameLength = 0; /* avoid trying to read more replies */
+ reply_left = 0;
+ goto badmem;
}
- if (reply.nameLength == 0)
+ reply_left = reply.length -
+ ((SIZEOF(xListFontsWithInfoReply) - SIZEOF(xGenericReply)) >> 2);
+ if (reply.nameLength == 0) {
+ _XEatDataWords(dpy, reply_left);
break;
+ }
+ if (reply.nReplies >= (INT_MAX - i)) /* avoid overflowing size */
+ goto badmem;
if ((i + reply.nReplies) >= size) {
size = i + reply.nReplies + 1;
+ if (size >= (INT_MAX / sizeof(XFontStruct)))
+ goto badmem;
+
if (finfo) {
- XFontStruct * tmp_finfo = (XFontStruct *)
- Xrealloc ((char *) finfo,
- (unsigned) (sizeof(XFontStruct) * size));
- char ** tmp_flist = (char **)
- Xrealloc ((char *) flist,
- (unsigned) (sizeof(char *) * (size+1)));
+ XFontStruct * tmp_finfo;
+ char ** tmp_flist;
+ tmp_finfo = Xrealloc (finfo, sizeof(XFontStruct) * size);
if (tmp_finfo)
finfo = tmp_finfo;
+ else
+ goto badmem;
+
+ tmp_flist = Xrealloc (flist, sizeof(char *) * (size+1));
if (tmp_flist)
flist = tmp_flist;
-
- if ((! tmp_finfo) || (! tmp_flist)) {
- /* free all the memory that we allocated */
- for (j=(i-1); (j >= 0); j--) {
- Xfree(flist[j]);
- if (finfo[j].properties)
- Xfree((char *) finfo[j].properties);
- }
- Xfree((char *) flist);
- Xfree((char *) finfo);
- goto clearwire;
- }
+ else
+ goto badmem;
}
else {
- if (! (finfo = (XFontStruct *)
- Xmalloc((unsigned) (sizeof(XFontStruct) * size))))
+ if (! (finfo = Xmalloc(sizeof(XFontStruct) * size)))
goto clearwire;
- if (! (flist = (char **)
- Xmalloc((unsigned) (sizeof(char *) * (size+1))))) {
+ if (! (flist = Xmalloc(sizeof(char *) * (size+1)))) {
Xfree((char *) finfo);
goto clearwire;
}
@@ -138,24 +132,27 @@ XFontStruct **info) /* RETURN */
fs->max_bounds = * (XCharStruct *) &reply.maxBounds;
fs->n_properties = reply.nFontProps;
+ fs->properties = NULL;
if (fs->n_properties > 0) {
- nbytes = reply.nFontProps * sizeof(XFontProp);
- if (! (fs->properties = (XFontProp *) Xmalloc((unsigned) nbytes)))
- goto badmem;
+ /* nFontProps is a CARD16 */
nbytes = reply.nFontProps * SIZEOF(xFontProp);
+ if ((nbytes >> 2) <= reply_left) {
+ size_t pbytes = reply.nFontProps * sizeof(XFontProp);
+ fs->properties = Xmalloc (pbytes);
+ }
+ if (! fs->properties)
+ goto badmem;
_XRead32 (dpy, (long *)fs->properties, nbytes);
+ reply_left -= (nbytes >> 2);
+ }
- } else
- fs->properties = NULL;
-
- j = reply.nameLength + 1;
+ /* nameLength is a CARD8 */
+ nbytes = reply.nameLength + 1;
if (!i)
- j++; /* make first string 1 byte longer, to match XListFonts */
- flist[i] = (char *) Xmalloc ((unsigned int) j);
+ nbytes++; /* make first string 1 byte longer, to match XListFonts */
+ flist[i] = Xmalloc (nbytes);
if (! flist[i]) {
if (finfo[i].properties) Xfree((char *) finfo[i].properties);
- nbytes = (reply.nameLength + 3) & ~3;
- _XEatData(dpy, (unsigned long) nbytes);
goto badmem;
}
if (!i) {
@@ -177,27 +174,25 @@ XFontStruct **info) /* RETURN */
badmem:
/* Free all memory allocated by this function. */
for (j=(i-1); (j >= 0); j--) {
- Xfree(flist[j]);
- if (finfo[j].properties) Xfree((char *) finfo[j].properties);
+ if (j == 0)
+ flist[j]--; /* was incremented above */
+ Xfree(flist[j]);
+ if (finfo[j].properties) Xfree((char *) finfo[j].properties);
}
if (flist) Xfree((char *) flist);
if (finfo) Xfree((char *) finfo);
clearwire:
/* Clear the wire. */
- do {
- if (reply.nFontProps)
- _XEatData(dpy, (unsigned long)
- (reply.nFontProps * SIZEOF(xFontProp)));
- nbytes = (reply.nameLength + 3) & ~3;
- _XEatData(dpy, (unsigned long) nbytes);
- }
- while (_XReply(dpy,(xReply *) &reply, ((SIZEOF(xListFontsWithInfoReply) -
- SIZEOF(xGenericReply)) >> 2),
- xFalse) && (reply.nameLength != 0));
-
+ _XEatDataWords(dpy, reply_left);
+ while ((reply.nameLength != 0) &&
+ _XReply(dpy, (xReply *) &reply,
+ ((SIZEOF(xListFontsWithInfoReply) - SIZEOF(xGenericReply))
+ >> 2), xTrue));
UnlockDisplay(dpy);
SyncHandle();
+ *info = NULL;
+ *actualCount = 0;
return (char **) NULL;
}
diff --git a/libX11/src/FontNames.c b/libX11/src/FontNames.c
index 3018cf2cf..b5bc7b4ba 100644
--- a/libX11/src/FontNames.c
+++ b/libX11/src/FontNames.c
@@ -29,6 +29,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
char **
XListFonts(
@@ -40,11 +41,13 @@ int *actualCount) /* RETURN */
register long nbytes;
register unsigned i;
register int length;
- char **flist;
- char *ch;
+ char **flist = NULL;
+ char *ch = NULL;
+ char *chend;
+ int count = 0;
xListFontsReply rep;
register xListFontsReq *req;
- register long rlen;
+ unsigned long rlen;
LockDisplay(dpy);
GetReq(ListFonts, req);
@@ -62,15 +65,17 @@ int *actualCount) /* RETURN */
}
if (rep.nFonts) {
- flist = (char **)Xmalloc ((unsigned)rep.nFonts * sizeof(char *));
- rlen = rep.length << 2;
- ch = (char *) Xmalloc((unsigned) (rlen + 1));
+ flist = Xmalloc (rep.nFonts * sizeof(char *));
+ if (rep.length < (LONG_MAX >> 2)) {
+ rlen = rep.length << 2;
+ ch = Xmalloc(rlen + 1);
/* +1 to leave room for last null-terminator */
+ }
if ((! flist) || (! ch)) {
if (flist) Xfree((char *) flist);
if (ch) Xfree(ch);
- _XEatData(dpy, (unsigned long) rlen);
+ _XEatDataWords(dpy, rep.length);
*actualCount = 0;
UnlockDisplay(dpy);
SyncHandle();
@@ -81,17 +86,21 @@ int *actualCount) /* RETURN */
/*
* unpack into null terminated strings.
*/
+ chend = ch + (rlen + 1);
length = *(unsigned char *)ch;
*ch = 1; /* make sure it is non-zero for XFreeFontNames */
for (i = 0; i < rep.nFonts; i++) {
- flist[i] = ch + 1; /* skip over length */
- ch += length + 1; /* find next length ... */
- length = *(unsigned char *)ch;
- *ch = '\0'; /* and replace with null-termination */
+ if (ch + length < chend) {
+ flist[i] = ch + 1; /* skip over length */
+ ch += length + 1; /* find next length ... */
+ length = *(unsigned char *)ch;
+ *ch = '\0'; /* and replace with null-termination */
+ count++;
+ } else
+ flist[i] = NULL;
}
}
- else flist = (char **) NULL;
- *actualCount = rep.nFonts;
+ *actualCount = count;
UnlockDisplay(dpy);
SyncHandle();
return (flist);
diff --git a/libX11/src/GetAtomNm.c b/libX11/src/GetAtomNm.c
index 9823c690c..32de50d23 100644
--- a/libX11/src/GetAtomNm.c
+++ b/libX11/src/GetAtomNm.c
@@ -46,7 +46,7 @@ char *_XGetAtomName(
for (idx = TABLESIZE; --idx >= 0; ) {
if ((e = *table++) && (e->atom == atom)) {
idx = strlen(EntryName(e)) + 1;
- if ((name = (char *)Xmalloc(idx)))
+ if ((name = Xmalloc(idx)))
strcpy(name, EntryName(e));
return name;
}
@@ -73,12 +73,12 @@ char *XGetAtomName(
SyncHandle();
return(NULL);
}
- if ((name = (char *) Xmalloc(rep.nameLength+1))) {
+ if ((name = Xmalloc(rep.nameLength + 1))) {
_XReadPad(dpy, name, (long)rep.nameLength);
name[rep.nameLength] = '\0';
_XUpdateAtomCache(dpy, name, atom, 0, -1, 0);
} else {
- _XEatData(dpy, (unsigned long) (rep.nameLength + 3) & ~3);
+ _XEatDataWords(dpy, rep.length);
name = (char *) NULL;
}
UnlockDisplay(dpy);
@@ -124,7 +124,7 @@ Bool _XGetAtomNameHandler(
_XGetAsyncReply(dpy, (char *)&replbuf, rep, buf, len,
(SIZEOF(xGetAtomNameReply) - SIZEOF(xReply)) >> 2,
False);
- state->names[state->idx] = (char *) Xmalloc(repl->nameLength+1);
+ state->names[state->idx] = Xmalloc(repl->nameLength + 1);
_XGetAsyncData(dpy, state->names[state->idx], buf, len,
SIZEOF(xGetAtomNameReply), repl->nameLength,
repl->length << 2);
@@ -170,13 +170,13 @@ XGetAtomNames (
}
if (missed >= 0) {
if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
- if ((names_return[missed] = (char *) Xmalloc(rep.nameLength+1))) {
+ if ((names_return[missed] = Xmalloc(rep.nameLength + 1))) {
_XReadPad(dpy, names_return[missed], (long)rep.nameLength);
names_return[missed][rep.nameLength] = '\0';
_XUpdateAtomCache(dpy, names_return[missed], atoms[missed],
0, -1, 0);
} else {
- _XEatData(dpy, (unsigned long) (rep.nameLength + 3) & ~3);
+ _XEatDataWords(dpy, rep.length);
async_state.status = 0;
}
}
diff --git a/libX11/src/GetDflt.c b/libX11/src/GetDflt.c
index 6f62cd820..496253065 100644
--- a/libX11/src/GetDflt.c
+++ b/libX11/src/GetDflt.c
@@ -52,30 +52,7 @@ SOFTWARE.
#include "Xlibint.h"
#include <X11/Xos.h>
#include <X11/Xresource.h>
-
-#ifndef X_NOT_POSIX
-#ifdef _POSIX_SOURCE
-#include <limits.h>
-#else
-#define _POSIX_SOURCE
-#include <limits.h>
-#undef _POSIX_SOURCE
-#endif
-#endif
-#ifndef PATH_MAX
-#ifdef WIN32
-#define PATH_MAX 512
-#else
-#include <sys/param.h>
-#endif
-#ifndef PATH_MAX
-#ifdef MAXPATHLEN
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
-#endif
-#endif
+#include "pathmax.h"
#ifdef XTHREADS
#include <X11/Xthreads.h>
diff --git a/libX11/src/GetFPath.c b/libX11/src/GetFPath.c
index 7d497c92e..abd4a5dbd 100644
--- a/libX11/src/GetFPath.c
+++ b/libX11/src/GetFPath.c
@@ -28,15 +28,18 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
char **XGetFontPath(
register Display *dpy,
int *npaths) /* RETURN */
{
xGetFontPathReply rep;
- register long nbytes;
- char **flist;
- char *ch;
+ unsigned long nbytes;
+ char **flist = NULL;
+ char *ch = NULL;
+ char *chend;
+ int count = 0;
register unsigned i;
register int length;
register xReq *req;
@@ -46,16 +49,17 @@ char **XGetFontPath(
(void) _XReply (dpy, (xReply *) &rep, 0, xFalse);
if (rep.nPaths) {
- flist = (char **)
- Xmalloc((unsigned) rep.nPaths * sizeof (char *));
- nbytes = (long)rep.length << 2;
- ch = (char *) Xmalloc ((unsigned) (nbytes + 1));
+ flist = Xmalloc(rep.nPaths * sizeof (char *));
+ if (rep.length < (LONG_MAX >> 2)) {
+ nbytes = (unsigned long) rep.length << 2;
+ ch = Xmalloc (nbytes + 1);
/* +1 to leave room for last null-terminator */
+ }
if ((! flist) || (! ch)) {
if (flist) Xfree((char *) flist);
if (ch) Xfree(ch);
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (char **) NULL;
@@ -65,16 +69,20 @@ char **XGetFontPath(
/*
* unpack into null terminated strings.
*/
+ chend = ch + (nbytes + 1);
length = *ch;
for (i = 0; i < rep.nPaths; i++) {
- flist[i] = ch+1; /* skip over length */
- ch += length + 1; /* find next length ... */
- length = *ch;
- *ch = '\0'; /* and replace with null-termination */
+ if (ch + length < chend) {
+ flist[i] = ch+1; /* skip over length */
+ ch += length + 1; /* find next length ... */
+ length = *ch;
+ *ch = '\0'; /* and replace with null-termination */
+ count++;
+ } else
+ flist[i] = NULL;
}
}
- else flist = NULL;
- *npaths = rep.nPaths;
+ *npaths = count;
UnlockDisplay(dpy);
SyncHandle();
return (flist);
diff --git a/libX11/src/GetHints.c b/libX11/src/GetHints.c
index 4800fe793..3c410d33d 100644
--- a/libX11/src/GetHints.c
+++ b/libX11/src/GetHints.c
@@ -128,7 +128,7 @@ XWMHints *XGetWMHints (
return(NULL);
}
/* static copies not allowed in library, due to reentrancy constraint*/
- if ((hints = (XWMHints *) Xcalloc (1, (unsigned) sizeof(XWMHints)))) {
+ if ((hints = Xcalloc (1, sizeof(XWMHints)))) {
hints->flags = prop->flags;
hints->input = (prop->input ? True : False);
hints->initial_state = cvtINT32toInt (prop->initialState);
@@ -203,8 +203,7 @@ Status XGetIconSizes (
/* static copies not allowed in library, due to reentrancy constraint*/
nitems /= NumPropIconSizeElements;
- if (! (hp = hints = (XIconSize *)
- Xcalloc ((unsigned) nitems, (unsigned) sizeof(XIconSize)))) {
+ if (! (hp = hints = Xcalloc (nitems, sizeof(XIconSize)))) {
if (prop) Xfree ((char *) prop);
return 0;
}
@@ -317,14 +316,14 @@ XGetClassHint(
if ( (actual_type == XA_STRING) && (actual_format == 8) ) {
len_name = strlen((char *) data);
- if (! (classhint->res_name = Xmalloc((unsigned) (len_name+1)))) {
+ if (! (classhint->res_name = Xmalloc(len_name + 1))) {
Xfree((char *) data);
return (0);
}
strcpy(classhint->res_name, (char *) data);
if (len_name == nitems) len_name--;
len_class = strlen((char *) (data+len_name+1));
- if (! (classhint->res_class = Xmalloc((unsigned) (len_class+1)))) {
+ if (! (classhint->res_class = Xmalloc(len_class + 1))) {
Xfree(classhint->res_name);
classhint->res_name = (char *) NULL;
Xfree((char *) data);
diff --git a/libX11/src/GetImage.c b/libX11/src/GetImage.c
index e8f1b0309..c461abc09 100644
--- a/libX11/src/GetImage.c
+++ b/libX11/src/GetImage.c
@@ -30,6 +30,7 @@ in this Software without prior written authorization from The Open Group.
#include "Xlibint.h"
#include <X11/Xutil.h> /* for XDestroyImage */
#include "ImUtil.h"
+#include <limits.h>
#define ROUNDUP(nbytes, pad) (((((nbytes) - 1) + (pad)) / (pad)) * (pad))
@@ -56,7 +57,7 @@ XImage *XGetImage (
xGetImageReply rep;
register xGetImageReq *req;
char *data;
- long nbytes;
+ unsigned long nbytes;
XImage *image;
LockDisplay(dpy);
GetReq (GetImage, req);
@@ -78,10 +79,13 @@ XImage *XGetImage (
return (XImage *)NULL;
}
- nbytes = (long)rep.length << 2;
- data = (char *) Xmalloc((unsigned) nbytes);
+ if (rep.length < (INT_MAX >> 2)) {
+ nbytes = (unsigned long)rep.length << 2;
+ data = Xmalloc(nbytes);
+ } else
+ data = NULL;
if (! data) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (XImage *) NULL;
diff --git a/libX11/src/GetMoEv.c b/libX11/src/GetMoEv.c
index 3db176feb..ad9c77277 100644
--- a/libX11/src/GetMoEv.c
+++ b/libX11/src/GetMoEv.c
@@ -28,6 +28,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
XTimeCoord *XGetMotionEvents(
register Display *dpy,
@@ -39,7 +40,6 @@ XTimeCoord *XGetMotionEvents(
xGetMotionEventsReply rep;
register xGetMotionEventsReq *req;
XTimeCoord *tc = NULL;
- long nbytes;
LockDisplay(dpy);
GetReq(GetMotionEvents, req);
req->window = w;
@@ -52,26 +52,22 @@ XTimeCoord *XGetMotionEvents(
return (NULL);
}
- if (rep.nEvents) {
- if (! (tc = (XTimeCoord *)
- Xmalloc( (unsigned)
- (nbytes = (long) rep.nEvents * sizeof(XTimeCoord))))) {
- _XEatData (dpy, (unsigned long) nbytes);
- UnlockDisplay(dpy);
- SyncHandle();
- return (NULL);
- }
+ if (rep.nEvents && (rep.nEvents < (INT_MAX / sizeof(XTimeCoord))))
+ tc = Xmalloc(rep.nEvents * sizeof(XTimeCoord));
+ if (tc == NULL) {
+ /* server returned either no events or a bad event count */
+ *nEvents = 0;
+ _XEatDataWords (dpy, rep.length);
}
-
- *nEvents = rep.nEvents;
- nbytes = SIZEOF (xTimecoord);
+ else
{
register XTimeCoord *tcptr;
- register int i;
+ unsigned int i;
xTimecoord xtc;
+ *nEvents = (int) rep.nEvents;
for (i = rep.nEvents, tcptr = tc; i > 0; i--, tcptr++) {
- _XRead (dpy, (char *) &xtc, nbytes);
+ _XRead (dpy, (char *) &xtc, SIZEOF (xTimecoord));
tcptr->time = xtc.time;
tcptr->x = cvtINT16toShort (xtc.x);
tcptr->y = cvtINT16toShort (xtc.y);
diff --git a/libX11/src/GetPntMap.c b/libX11/src/GetPntMap.c
index 0fcdb6696..29fdf21f0 100644
--- a/libX11/src/GetPntMap.c
+++ b/libX11/src/GetPntMap.c
@@ -29,6 +29,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
#ifdef MIN /* some systems define this in <sys/param.h> */
#undef MIN
@@ -42,7 +43,7 @@ int XGetPointerMapping (
{
unsigned char mapping[256]; /* known fixed size */
- long nbytes, remainder = 0;
+ unsigned long nbytes, remainder = 0;
xGetPointerMappingReply rep;
register xReq *req;
@@ -54,9 +55,15 @@ int XGetPointerMapping (
return 0;
}
- nbytes = (long)rep.length << 2;
-
/* Don't count on the server returning a valid value */
+ if (rep.length >= (INT_MAX >> 2)) {
+ _XEatDataWords(dpy, rep.length);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return 0;
+ }
+
+ nbytes = (unsigned long) rep.length << 2;
if (nbytes > sizeof mapping) {
remainder = nbytes - sizeof mapping;
nbytes = sizeof mapping;
@@ -69,7 +76,7 @@ int XGetPointerMapping (
}
if (remainder)
- _XEatData(dpy, (unsigned long)remainder);
+ _XEatData(dpy, remainder);
UnlockDisplay(dpy);
SyncHandle();
@@ -86,8 +93,8 @@ XGetKeyboardMapping (Display *dpy,
int count,
int *keysyms_per_keycode)
{
- long nbytes;
- unsigned long nkeysyms;
+ unsigned long nbytes;
+ CARD32 nkeysyms;
register KeySym *mapping = NULL;
xGetKeyboardMappingReply rep;
register xGetKeyboardMappingReq *req;
@@ -102,17 +109,19 @@ XGetKeyboardMapping (Display *dpy,
return (KeySym *) NULL;
}
- nkeysyms = (unsigned long) rep.length;
+ nkeysyms = rep.length;
if (nkeysyms > 0) {
- nbytes = nkeysyms * sizeof (KeySym);
- mapping = (KeySym *) Xmalloc ((unsigned) nbytes);
- nbytes = nkeysyms << 2;
+ if (nkeysyms < (INT_MAX / sizeof (KeySym))) {
+ nbytes = nkeysyms * sizeof (KeySym);
+ mapping = Xmalloc (nbytes);
+ }
if (! mapping) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (KeySym *) NULL;
}
+ nbytes = nkeysyms << 2;
_XRead32 (dpy, (long *) mapping, nbytes);
}
*keysyms_per_keycode = rep.keySymsPerKeyCode;
diff --git a/libX11/src/GetProp.c b/libX11/src/GetProp.c
index 5d6e0b8c4..9eb422ee3 100644
--- a/libX11/src/GetProp.c
+++ b/libX11/src/GetProp.c
@@ -28,6 +28,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
int
XGetWindowProperty(
@@ -48,6 +49,13 @@ XGetWindowProperty(
register xGetPropertyReq *req;
xError error = {0};
+ /* Always initialize return values, in case callers fail to initialize
+ them and fail to check the return code for an error. */
+ *actual_type = None;
+ *actual_format = 0;
+ *nitems = *bytesafter = 0L;
+ *prop = (unsigned char *) NULL;
+
LockDisplay(dpy);
GetReq (GetProperty, req);
req->window = w;
@@ -64,10 +72,18 @@ XGetWindowProperty(
return (1); /* not Success */
}
- *prop = (unsigned char *) NULL;
if (reply.propertyType != None) {
- long nbytes, netbytes;
- switch (reply.format) {
+ unsigned long nbytes, netbytes;
+ int format = reply.format;
+
+ /*
+ * Protect against both integer overflow and just plain oversized
+ * memory allocation - no server should ever return this many props.
+ */
+ if (reply.nItems >= (INT_MAX >> 4))
+ format = -1; /* fall through to default error case */
+
+ switch (format) {
/*
* One extra byte is malloced than is needed to contain the property
* data, but this last byte is null terminated and convenient for
@@ -76,24 +92,21 @@ XGetWindowProperty(
*/
case 8:
nbytes = netbytes = reply.nItems;
- if (nbytes + 1 > 0 &&
- (*prop = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
+ if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1)))
_XReadPad (dpy, (char *) *prop, netbytes);
break;
case 16:
nbytes = reply.nItems * sizeof (short);
netbytes = reply.nItems << 1;
- if (nbytes + 1 > 0 &&
- (*prop = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
+ if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1)))
_XRead16Pad (dpy, (short *) *prop, netbytes);
break;
case 32:
nbytes = reply.nItems * sizeof (long);
netbytes = reply.nItems << 2;
- if (nbytes + 1 > 0 &&
- (*prop = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
+ if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1)))
_XRead32 (dpy, (long *) *prop, netbytes);
break;
@@ -115,7 +128,7 @@ XGetWindowProperty(
break;
}
if (! *prop) {
- _XEatData(dpy, (unsigned long) netbytes);
+ _XEatDataWords(dpy, reply.length);
UnlockDisplay(dpy);
SyncHandle();
return(BadAlloc); /* not Success */
diff --git a/libX11/src/GetRGBCMap.c b/libX11/src/GetRGBCMap.c
index 9e227a263..2f0b752a8 100644
--- a/libX11/src/GetRGBCMap.c
+++ b/libX11/src/GetRGBCMap.c
@@ -99,8 +99,7 @@ Status XGetRGBColormaps (
/*
* allocate array
*/
- cmaps = (XStandardColormap *) Xmalloc (ncmaps *
- sizeof (XStandardColormap));
+ cmaps = Xmalloc (ncmaps * sizeof (XStandardColormap));
if (!cmaps) {
if (data) Xfree ((char *) data);
return False;
diff --git a/libX11/src/ImUtil.c b/libX11/src/ImUtil.c
index fa8d464aa..240a26181 100644
--- a/libX11/src/ImUtil.c
+++ b/libX11/src/ImUtil.c
@@ -332,7 +332,7 @@ XImage *XCreateImage (
(xpad != 8 && xpad != 16 && xpad != 32) ||
offset < 0)
return (XImage *) NULL;
- if ((image = (XImage *) Xcalloc(1, (unsigned) sizeof(XImage))) == NULL)
+ if ((image = Xcalloc(1, sizeof(XImage))) == NULL)
return (XImage *) NULL;
image->width = width;
@@ -842,7 +842,7 @@ static XImage *_XSubImage (
register unsigned long pixel;
char *data;
- if ((subimage = (XImage *) Xcalloc (1, sizeof (XImage))) == NULL)
+ if ((subimage = Xcalloc (1, sizeof (XImage))) == NULL)
return (XImage *) NULL;
subimage->width = width;
subimage->height = height;
@@ -868,7 +868,7 @@ static XImage *_XSubImage (
_XInitImageFuncPtrs (subimage);
dsize = subimage->bytes_per_line * height;
if (subimage->format == XYPixmap) dsize = dsize * subimage->depth;
- if (((data = Xcalloc (1, (unsigned) dsize)) == NULL) && (dsize > 0)) {
+ if (((data = Xcalloc (1, dsize)) == NULL) && (dsize > 0)) {
Xfree((char *) subimage);
return (XImage *) NULL;
}
diff --git a/libX11/src/InitExt.c b/libX11/src/InitExt.c
index 19515ccd0..75991bd6d 100644
--- a/libX11/src/InitExt.c
+++ b/libX11/src/InitExt.c
@@ -49,7 +49,7 @@ XExtCodes *XInitExtension (
&codes.first_error)) return (NULL);
LockDisplay (dpy);
- if (! (ext = (_XExtension *) Xcalloc (1, sizeof (_XExtension))) ||
+ if (! (ext = Xcalloc (1, sizeof (_XExtension))) ||
! (ext->name = strdup(name))) {
if (ext) Xfree((char *) ext);
UnlockDisplay(dpy);
@@ -71,7 +71,7 @@ XExtCodes *XAddExtension (Display *dpy)
register _XExtension *ext;
LockDisplay (dpy);
- if (! (ext = (_XExtension *) Xcalloc (1, sizeof (_XExtension)))) {
+ if (! (ext = Xcalloc (1, sizeof (_XExtension)))) {
UnlockDisplay(dpy);
return (XExtCodes *) NULL;
}
diff --git a/libX11/src/IntAtom.c b/libX11/src/IntAtom.c
index 7a5625840..25466ca20 100644
--- a/libX11/src/IntAtom.c
+++ b/libX11/src/IntAtom.c
@@ -72,7 +72,7 @@ Atom _XInternAtom(
/* look in the cache first */
if (!(atoms = dpy->atoms)) {
- dpy->atoms = atoms = (AtomTable *)Xcalloc(1, sizeof(AtomTable));
+ dpy->atoms = atoms = Xcalloc(1, sizeof(AtomTable));
dpy->free_funcs->atoms = _XFreeAtomTable;
}
sig = 0;
@@ -127,7 +127,7 @@ _XUpdateAtomCache(
if (!dpy->atoms) {
if (idx < 0) {
- dpy->atoms = (AtomTable *)Xcalloc(1, sizeof(AtomTable));
+ dpy->atoms = Xcalloc(1, sizeof(AtomTable));
dpy->free_funcs->atoms = _XFreeAtomTable;
}
if (!dpy->atoms)
@@ -147,7 +147,7 @@ _XUpdateAtomCache(
}
}
}
- e = (Entry)Xmalloc(sizeof(EntryRec) + n + 1);
+ e = Xmalloc(sizeof(EntryRec) + n + 1);
if (e) {
e->sig = sig;
e->atom = atom;
diff --git a/libX11/src/Key.h b/libX11/src/Key.h
index 0fe89ba37..bb254393c 100644
--- a/libX11/src/Key.h
+++ b/libX11/src/Key.h
@@ -2,6 +2,9 @@
#ifndef _KEY_H_
#define _KEY_H_
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
+
#ifndef NEEDKTABLE
extern const unsigned char _XkeyTable[];
#endif
diff --git a/libX11/src/KeyBind.c b/libX11/src/KeyBind.c
index f22feca59..2110772ce 100644
--- a/libX11/src/KeyBind.c
+++ b/libX11/src/KeyBind.c
@@ -997,11 +997,9 @@ XRebindKeysym (
tmp = dpy->key_bindings;
nb = sizeof(KeySym) * nm;
- if ((! (p = (struct _XKeytrans *) Xcalloc( 1, sizeof(struct _XKeytrans)))) ||
- ((! (p->string = (char *) Xmalloc( (unsigned) nbytes))) &&
- (nbytes > 0)) ||
- ((! (p->modifiers = (KeySym *) Xmalloc( (unsigned) nb))) &&
- (nb > 0))) {
+ if ((! (p = Xcalloc( 1, sizeof(struct _XKeytrans)))) ||
+ ((! (p->string = Xmalloc(nbytes))) && (nbytes > 0)) ||
+ ((! (p->modifiers = Xmalloc(nb))) && (nb > 0))) {
if (p) {
if (p->string) Xfree(p->string);
if (p->modifiers) Xfree((char *) p->modifiers);
diff --git a/libX11/src/LiHosts.c b/libX11/src/LiHosts.c
index 0f5e837d1..83cf3c791 100644
--- a/libX11/src/LiHosts.c
+++ b/libX11/src/LiHosts.c
@@ -62,6 +62,8 @@ X Window System is a trademark of The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
+
/*
* can be freed using XFree.
*/
@@ -73,7 +75,6 @@ XHostAddress *XListHosts (
{
register XHostAddress *outbuf = NULL, *op;
xListHostsReply reply;
- long nbytes;
unsigned char *buf, *bp;
register unsigned i;
register xListHostsReq *req;
@@ -90,19 +91,26 @@ XHostAddress *XListHosts (
}
if (reply.nHosts) {
- nbytes = reply.length << 2; /* compute number of bytes in reply */
+ unsigned long nbytes = reply.length << 2; /* number of bytes in reply */
+ const unsigned long max_hosts = INT_MAX /
+ (sizeof(XHostAddress) + sizeof(XServerInterpretedAddress));
+
+ if (reply.nHosts < max_hosts) {
+ unsigned long hostbytes = reply.nHosts *
+ (sizeof(XHostAddress) + sizeof(XServerInterpretedAddress));
- op = outbuf = (XHostAddress *)
- Xmalloc((unsigned) (nbytes +
- (reply.nHosts * sizeof(XHostAddress)) +
- (reply.nHosts * sizeof(XServerInterpretedAddress))));
+ if (reply.length < (INT_MAX >> 2) &&
+ (hostbytes >> 2) < ((INT_MAX >> 2) - reply.length))
+ outbuf = Xmalloc(nbytes + hostbytes);
+ }
if (! outbuf) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, reply.length);
UnlockDisplay(dpy);
SyncHandle();
return (XHostAddress *) NULL;
}
+ op = outbuf;
sip = (XServerInterpretedAddress *)
(((unsigned char *) outbuf) + (reply.nHosts * sizeof(XHostAddress)));
bp = buf = ((unsigned char *) sip)
diff --git a/libX11/src/LiICmaps.c b/libX11/src/LiICmaps.c
index e98161916..45a2f2fd3 100644
--- a/libX11/src/LiICmaps.c
+++ b/libX11/src/LiICmaps.c
@@ -34,7 +34,7 @@ Colormap *XListInstalledColormaps(
Window win,
int *n) /* RETURN */
{
- long nbytes;
+ unsigned long nbytes;
Colormap *cmaps;
xListInstalledColormapsReply rep;
register xResourceReq *req;
@@ -51,14 +51,14 @@ Colormap *XListInstalledColormaps(
if (rep.nColormaps) {
nbytes = rep.nColormaps * sizeof(Colormap);
- cmaps = (Colormap *) Xmalloc((unsigned) nbytes);
- nbytes = rep.nColormaps << 2;
+ cmaps = Xmalloc(nbytes);
if (! cmaps) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return((Colormap *) NULL);
}
+ nbytes = rep.nColormaps << 2;
_XRead32 (dpy, (long *) cmaps, nbytes);
}
else cmaps = (Colormap *) NULL;
diff --git a/libX11/src/LiProps.c b/libX11/src/LiProps.c
index 72560aba7..d9c746563 100644
--- a/libX11/src/LiProps.c
+++ b/libX11/src/LiProps.c
@@ -34,7 +34,7 @@ Atom *XListProperties(
Window window,
int *n_props) /* RETURN */
{
- long nbytes;
+ unsigned long nbytes;
xListPropertiesReply rep;
Atom *properties;
register xResourceReq *req;
@@ -50,14 +50,14 @@ Atom *XListProperties(
if (rep.nProperties) {
nbytes = rep.nProperties * sizeof(Atom);
- properties = (Atom *) Xmalloc ((unsigned) nbytes);
- nbytes = rep.nProperties << 2;
+ properties = Xmalloc (nbytes);
if (! properties) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (Atom *) NULL;
}
+ nbytes = rep.nProperties << 2;
_XRead32 (dpy, (long *) properties, nbytes);
}
else properties = (Atom *) NULL;
diff --git a/libX11/src/ListExt.c b/libX11/src/ListExt.c
index 16b522e88..e925c4773 100644
--- a/libX11/src/ListExt.c
+++ b/libX11/src/ListExt.c
@@ -28,18 +28,21 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
char **XListExtensions(
register Display *dpy,
int *nextensions) /* RETURN */
{
xListExtensionsReply rep;
- char **list;
- char *ch;
+ char **list = NULL;
+ char *ch = NULL;
+ char *chend;
+ int count = 0;
register unsigned i;
register int length;
register xReq *req;
- register long rlen;
+ unsigned long rlen;
LockDisplay(dpy);
GetEmptyReq (ListExtensions, req);
@@ -51,16 +54,17 @@ char **XListExtensions(
}
if (rep.nExtensions) {
- list = (char **) Xmalloc (
- (unsigned)(rep.nExtensions * sizeof (char *)));
- rlen = rep.length << 2;
- ch = (char *) Xmalloc ((unsigned) rlen + 1);
+ list = Xmalloc (rep.nExtensions * sizeof (char *));
+ if (rep.length < (LONG_MAX >> 2)) {
+ rlen = rep.length << 2;
+ ch = Xmalloc (rlen + 1);
/* +1 to leave room for last null-terminator */
+ }
if ((!list) || (!ch)) {
if (list) Xfree((char *) list);
if (ch) Xfree((char *) ch);
- _XEatData(dpy, (unsigned long) rlen);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (char **) NULL;
@@ -70,17 +74,21 @@ char **XListExtensions(
/*
* unpack into null terminated strings.
*/
+ chend = ch + (rlen + 1);
length = *ch;
for (i = 0; i < rep.nExtensions; i++) {
- list[i] = ch+1; /* skip over length */
- ch += length + 1; /* find next length ... */
- length = *ch;
- *ch = '\0'; /* and replace with null-termination */
+ if (ch + length < chend) {
+ list[i] = ch+1; /* skip over length */
+ ch += length + 1; /* find next length ... */
+ length = *ch;
+ *ch = '\0'; /* and replace with null-termination */
+ count++;
+ } else
+ list[i] = NULL;
}
}
- else list = (char **) NULL;
- *nextensions = rep.nExtensions;
+ *nextensions = count;
UnlockDisplay(dpy);
SyncHandle();
return (list);
diff --git a/libX11/src/Makefile.am b/libX11/src/Makefile.am
index 71e02e71b..27b74b014 100644
--- a/libX11/src/Makefile.am
+++ b/libX11/src/Makefile.am
@@ -210,6 +210,7 @@ libX11_la_SOURCES = \
ParseCmd.c \
ParseCol.c \
ParseGeom.c \
+ pathmax.h \
PeekEvent.c \
PeekIfEv.c \
Pending.c \
diff --git a/libX11/src/ModMap.c b/libX11/src/ModMap.c
index c99bfdd5f..5c5b42612 100644
--- a/libX11/src/ModMap.c
+++ b/libX11/src/ModMap.c
@@ -28,6 +28,7 @@ in this Software without prior written authorization from The Open Group.
#include <config.h>
#endif
#include "Xlibint.h"
+#include <limits.h>
XModifierKeymap *
XGetModifierMapping(register Display *dpy)
@@ -41,13 +42,17 @@ XGetModifierMapping(register Display *dpy)
GetEmptyReq(GetModifierMapping, req);
(void) _XReply (dpy, (xReply *)&rep, 0, xFalse);
- nbytes = (unsigned long)rep.length << 2;
- res = (XModifierKeymap *) Xmalloc(sizeof (XModifierKeymap));
- if (res) res->modifiermap = (KeyCode *) Xmalloc ((unsigned) nbytes);
+ if (rep.length < (LONG_MAX >> 2)) {
+ nbytes = (unsigned long)rep.length << 2;
+ res = Xmalloc(sizeof (XModifierKeymap));
+ if (res)
+ res->modifiermap = Xmalloc (nbytes);
+ } else
+ res = NULL;
if ((! res) || (! res->modifiermap)) {
if (res) Xfree((char *) res);
res = (XModifierKeymap *) NULL;
- _XEatData(dpy, nbytes);
+ _XEatDataWords(dpy, rep.length);
} else {
_XReadPad(dpy, (char *) res->modifiermap, (long) nbytes);
res->max_keypermod = rep.numKeyPerModifier;
@@ -92,11 +97,11 @@ XSetModifierMapping(
XModifierKeymap *
XNewModifiermap(int keyspermodifier)
{
- XModifierKeymap *res = (XModifierKeymap *) Xmalloc((sizeof (XModifierKeymap)));
+ XModifierKeymap *res = Xmalloc((sizeof (XModifierKeymap)));
if (res) {
res->max_keypermod = keyspermodifier;
res->modifiermap = (keyspermodifier > 0 ?
- (KeyCode *) Xmalloc((unsigned) (8 * keyspermodifier))
+ Xmalloc(8 * keyspermodifier)
: (KeyCode *) NULL);
if (keyspermodifier && (res->modifiermap == NULL)) {
Xfree((char *) res);
diff --git a/libX11/src/OpenDis.c b/libX11/src/OpenDis.c
index f6d8c701b..fc67d1a66 100644
--- a/libX11/src/OpenDis.c
+++ b/libX11/src/OpenDis.c
@@ -112,7 +112,7 @@ XOpenDisplay (
/*
* Attempt to allocate a display structure. Return NULL if allocation fails.
*/
- if ((dpy = (Display *)Xcalloc(1, sizeof(Display))) == NULL) {
+ if ((dpy = Xcalloc(1, sizeof(Display))) == NULL) {
return(NULL);
}
@@ -246,9 +246,7 @@ XOpenDisplay (
dpy->qlen = 0;
/* Set up free-function record */
- if ((dpy->free_funcs = (_XFreeFuncRec *)Xcalloc(1,
- sizeof(_XFreeFuncRec)))
- == NULL) {
+ if ((dpy->free_funcs = Xcalloc(1, sizeof(_XFreeFuncRec))) == NULL) {
OutOfMemory (dpy);
return(NULL);
}
@@ -316,7 +314,7 @@ XOpenDisplay (
return (NULL);
}
- dpy->vendor = (char *) Xmalloc((unsigned) (u.setup->nbytesVendor + 1));
+ dpy->vendor = Xmalloc(u.setup->nbytesVendor + 1);
if (dpy->vendor == NULL) {
OutOfMemory(dpy);
return (NULL);
@@ -342,9 +340,7 @@ XOpenDisplay (
/*
* Now iterate down setup information.....
*/
- dpy->pixmap_format =
- (ScreenFormat *)Xmalloc(
- (unsigned) (dpy->nformats *sizeof(ScreenFormat)));
+ dpy->pixmap_format = Xcalloc(dpy->nformats, sizeof(ScreenFormat));
if (dpy->pixmap_format == NULL) {
OutOfMemory (dpy);
return(NULL);
@@ -372,8 +368,7 @@ XOpenDisplay (
/*
* next the Screen structures.
*/
- dpy->screens =
- (Screen *)Xmalloc((unsigned) dpy->nscreens*sizeof(Screen));
+ dpy->screens = Xcalloc(dpy->nscreens, sizeof(Screen));
if (dpy->screens == NULL) {
OutOfMemory (dpy);
return(NULL);
@@ -415,8 +410,7 @@ XOpenDisplay (
/*
* lets set up the depth structures.
*/
- sp->depths = (Depth *)Xmalloc(
- (unsigned)sp->ndepths*sizeof(Depth));
+ sp->depths = Xcalloc(sp->ndepths, sizeof(Depth));
if (sp->depths == NULL) {
OutOfMemory (dpy);
return(NULL);
@@ -438,8 +432,7 @@ XOpenDisplay (
dp->nvisuals = u.dp->nVisuals;
u.dp = (xDepth *) (((char *) u.dp) + sz_xDepth);
if (dp->nvisuals > 0) {
- dp->visuals =
- (Visual *)Xmalloc((unsigned)dp->nvisuals*sizeof(Visual));
+ dp->visuals = Xcalloc(dp->nvisuals, sizeof(Visual));
if (dp->visuals == NULL) {
OutOfMemory (dpy);
return(NULL);
@@ -552,7 +545,7 @@ XOpenDisplay (
dpy->xdefaults[reply.nItems] = '\0';
}
else if (reply.propertyType != None)
- _XEatData(dpy, reply.nItems * (reply.format >> 3));
+ _XEatDataWords(dpy, reply.length);
}
}
UnlockDisplay(dpy);
diff --git a/libX11/src/PixFormats.c b/libX11/src/PixFormats.c
index 8e4a10027..6d9f64d2c 100644
--- a/libX11/src/PixFormats.c
+++ b/libX11/src/PixFormats.c
@@ -38,8 +38,8 @@ XPixmapFormatValues *XListPixmapFormats (
Display *dpy,
int *count) /* RETURN */
{
- XPixmapFormatValues *formats = (XPixmapFormatValues *)
- Xmalloc((unsigned) (dpy->nformats * sizeof (XPixmapFormatValues)));
+ XPixmapFormatValues *formats =
+ Xmalloc(dpy->nformats * sizeof (XPixmapFormatValues));
if (formats) {
register int i;
diff --git a/libX11/src/PolyReg.c b/libX11/src/PolyReg.c
index 74c8765fe..6d0277332 100644
--- a/libX11/src/PolyReg.c
+++ b/libX11/src/PolyReg.c
@@ -95,8 +95,7 @@ InsertEdgeInET(
{
if (*iSLLBlock > SLLSPERBLOCK-1)
{
- tmpSLLBlock =
- (ScanLineListBlock *)Xmalloc(sizeof(ScanLineListBlock));
+ tmpSLLBlock = Xmalloc(sizeof(ScanLineListBlock));
(*SLLBlock)->next = tmpSLLBlock;
tmpSLLBlock->next = (ScanLineListBlock *)NULL;
*SLLBlock = tmpSLLBlock;
@@ -410,8 +409,7 @@ static int PtsToRegion(
numRects = ((numFullPtBlocks * NUMPTSTOBUFFER) + iCurPtBlock) >> 1;
- if (!(reg->rects = (BOX *)Xrealloc((char *)reg->rects,
- (unsigned) (sizeof(BOX) * numRects)))) {
+ if (!(reg->rects = Xrealloc(reg->rects, sizeof(BOX) * numRects))) {
Xfree(prevRects);
return(0);
}
@@ -521,8 +519,7 @@ XPolygonRegion(
if (Count < 2) return region;
- if (! (pETEs = (EdgeTableEntry *)
- Xmalloc((unsigned) (sizeof(EdgeTableEntry) * Count)))) {
+ if (! (pETEs = Xmalloc(sizeof(EdgeTableEntry) * Count))) {
XDestroyRegion(region);
return (Region) NULL;
}
@@ -559,7 +556,7 @@ XPolygonRegion(
* send out the buffer
*/
if (iPts == NUMPTSTOBUFFER) {
- tmpPtBlock = (POINTBLOCK *)Xmalloc(sizeof(POINTBLOCK));
+ tmpPtBlock = Xmalloc(sizeof(POINTBLOCK));
curPtBlock->next = tmpPtBlock;
curPtBlock = tmpPtBlock;
pts = curPtBlock->pts;
@@ -605,7 +602,7 @@ XPolygonRegion(
* send out the buffer
*/
if (iPts == NUMPTSTOBUFFER) {
- tmpPtBlock = (POINTBLOCK *)Xmalloc(sizeof(POINTBLOCK));
+ tmpPtBlock = Xmalloc(sizeof(POINTBLOCK));
curPtBlock->next = tmpPtBlock;
curPtBlock = tmpPtBlock;
pts = curPtBlock->pts;
diff --git a/libX11/src/PropAlloc.c b/libX11/src/PropAlloc.c
index 516283080..87817d88a 100644
--- a/libX11/src/PropAlloc.c
+++ b/libX11/src/PropAlloc.c
@@ -39,20 +39,19 @@ in this Software without prior written authorization from The Open Group.
XSizeHints *XAllocSizeHints (void)
{
- return ((XSizeHints *) Xcalloc (1, (unsigned) sizeof (XSizeHints)));
+ return Xcalloc (1, sizeof (XSizeHints));
}
XStandardColormap *XAllocStandardColormap (void)
{
- return ((XStandardColormap *)
- Xcalloc (1, (unsigned) sizeof (XStandardColormap)));
+ return Xcalloc (1, sizeof (XStandardColormap));
}
XWMHints *XAllocWMHints (void)
{
- return ((XWMHints *) Xcalloc (1, (unsigned) sizeof (XWMHints)));
+ return Xcalloc (1, sizeof (XWMHints));
}
@@ -64,7 +63,7 @@ XClassHint *XAllocClassHint (void)
XIconSize *XAllocIconSize (void)
{
- return ((XIconSize *) Xcalloc (1, (unsigned) sizeof (XIconSize)));
+ return Xcalloc (1, sizeof (XIconSize));
}
diff --git a/libX11/src/PutBEvent.c b/libX11/src/PutBEvent.c
index f9d4c29bd..1768e032c 100644
--- a/libX11/src/PutBEvent.c
+++ b/libX11/src/PutBEvent.c
@@ -41,7 +41,7 @@ _XPutBackEvent (
XEvent store = *event;
if (!dpy->qfree) {
- if ((dpy->qfree = (_XQEvent *) Xmalloc (sizeof (_XQEvent))) == NULL) {
+ if ((dpy->qfree = Xmalloc (sizeof (_XQEvent))) == NULL) {
return 0;
}
dpy->qfree->next = NULL;
diff --git a/libX11/src/PutImage.c b/libX11/src/PutImage.c
index 6dad4f13a..2a694f099 100644
--- a/libX11/src/PutImage.c
+++ b/libX11/src/PutImage.c
@@ -680,7 +680,7 @@ SendXYImage(
length = ROUNDUP(length, 4);
if ((dpy->bufptr + length) > dpy->bufmax) {
- if ((buf = _XAllocScratch(dpy, (unsigned long) (length))) == NULL) {
+ if ((buf = _XAllocScratch(dpy, length)) == NULL) {
UnGetReq(PutImage);
return;
}
@@ -703,13 +703,13 @@ SendXYImage(
bytes_per_temp_plane = bytes_per_line * req->height;
temp_length = ROUNDUP(bytes_per_temp_plane * image->depth, 4);
if (buf == dpy->bufptr) {
- if (! (temp = _XAllocScratch(dpy, (unsigned long) temp_length))) {
+ if (! (temp = _XAllocScratch(dpy, temp_length))) {
UnGetReq(PutImage);
return;
}
}
else
- if ((extra = temp = Xmalloc((unsigned) temp_length)) == NULL) {
+ if ((extra = temp = Xmalloc(temp_length)) == NULL) {
UnGetReq(PutImage);
return;
}
@@ -778,8 +778,7 @@ SendZImage(
(req_yoffset * image->bytes_per_line) +
((req_xoffset * image->bits_per_pixel) >> 3);
if ((image->bits_per_pixel == 4) && ((unsigned int) req_xoffset & 0x01)) {
- if (! (shifted_src = (unsigned char *)
- Xmalloc((unsigned) (req->height * image->bytes_per_line)))) {
+ if (! (shifted_src = Xmalloc(req->height * image->bytes_per_line))) {
UnGetReq(PutImage);
return;
}
@@ -810,7 +809,7 @@ SendZImage(
dest = (unsigned char *)dpy->bufptr;
else
if ((dest = (unsigned char *)
- _XAllocScratch(dpy, (unsigned long)(length))) == NULL) {
+ _XAllocScratch(dpy, length)) == NULL) {
if (shifted_src) Xfree((char *) shifted_src);
UnGetReq(PutImage);
return;
@@ -1001,7 +1000,7 @@ XPutImage (
img.bits_per_pixel = dest_bits_per_pixel;
img.bytes_per_line = ROUNDUP((dest_bits_per_pixel * width),
dest_scanline_pad) >> 3;
- img.data = Xmalloc((unsigned) (img.bytes_per_line * height));
+ img.data = Xmalloc(img.bytes_per_line * height);
if (img.data == NULL)
return 0;
_XInitImageFuncPtrs(&img);
diff --git a/libX11/src/QuColors.c b/libX11/src/QuColors.c
index 237b8bf03..13a63eb25 100644
--- a/libX11/src/QuColors.c
+++ b/libX11/src/QuColors.c
@@ -37,9 +37,7 @@ _XQueryColors(
int ncolors)
{
register int i;
- xrgb *color;
xQueryColorsReply rep;
- long nbytes;
register xQueryColorsReq *req;
GetReq(QueryColors, req);
@@ -52,8 +50,9 @@ _XQueryColors(
/* XXX this isn't very efficient */
if (_XReply(dpy, (xReply *) &rep, 0, xFalse) != 0) {
- if ((color = (xrgb *)
- Xmalloc((unsigned) (nbytes = (long) ncolors * SIZEOF(xrgb))))) {
+ unsigned long nbytes = (long) ncolors * SIZEOF(xrgb);
+ xrgb *color = Xmalloc(nbytes);
+ if (color != NULL) {
_XRead(dpy, (char *) color, nbytes);
@@ -67,7 +66,8 @@ _XQueryColors(
}
Xfree((char *)color);
}
- else _XEatData(dpy, (unsigned long) nbytes);
+ else
+ _XEatDataWords(dpy, rep.length);
}
}
diff --git a/libX11/src/QuTree.c b/libX11/src/QuTree.c
index 3cea282fa..8da2ae261 100644
--- a/libX11/src/QuTree.c
+++ b/libX11/src/QuTree.c
@@ -37,7 +37,7 @@ Status XQueryTree (
Window **children, /* RETURN */
unsigned int *nchildren) /* RETURN */
{
- long nbytes;
+ unsigned long nbytes;
xQueryTreeReply rep;
register xResourceReq *req;
@@ -52,14 +52,14 @@ Status XQueryTree (
*children = (Window *) NULL;
if (rep.nChildren != 0) {
nbytes = rep.nChildren * sizeof(Window);
- *children = (Window *) Xmalloc((unsigned) nbytes);
- nbytes = rep.nChildren << 2;
+ *children = Xmalloc(nbytes);
if (! *children) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (0);
}
+ nbytes = rep.nChildren << 2;
_XRead32 (dpy, (long *) *children, nbytes);
}
*parent = rep.parent;
diff --git a/libX11/src/Quarks.c b/libX11/src/Quarks.c
index 4eb90c51d..60fe127bd 100644
--- a/libX11/src/Quarks.c
+++ b/libX11/src/Quarks.c
@@ -186,15 +186,14 @@ ExpandQuarkTable(void)
newmask = (oldmask << 1) + 1;
else {
if (!stringTable) {
- stringTable = (XrmString **)Xmalloc(sizeof(XrmString *) *
- CHUNKPER);
+ stringTable = Xmalloc(sizeof(XrmString *) * CHUNKPER);
if (!stringTable)
return False;
stringTable[0] = (XrmString *)NULL;
}
#ifdef PERMQ
if (!permTable)
- permTable = (Bits **)Xmalloc(sizeof(Bits *) * CHUNKPER);
+ permTable = Xmalloc(sizeof(Bits *) * CHUNKPER);
if (!permTable)
return False;
#endif
@@ -289,13 +288,13 @@ nomatch: if (!rehash)
q = nextQuark;
if (!(q & QUANTUMMASK)) {
if (!(q & CHUNKMASK)) {
- if (!(new = Xrealloc((char *)stringTable,
+ if (!(new = Xrealloc(stringTable,
sizeof(XrmString *) *
((q >> QUANTUMSHIFT) + CHUNKPER))))
goto fail;
stringTable = (XrmString **)new;
#ifdef PERMQ
- if (!(new = Xrealloc((char *)permTable,
+ if (!(new = Xrealloc(permTable,
sizeof(Bits *) *
((q >> QUANTUMSHIFT) + CHUNKPER))))
goto fail;
diff --git a/libX11/src/RdBitF.c b/libX11/src/RdBitF.c
index ab7d800d3..727204fca 100644
--- a/libX11/src/RdBitF.c
+++ b/libX11/src/RdBitF.c
@@ -191,7 +191,7 @@ XReadBitmapFileData (
bytes_per_line = (ww+7)/8 + padding;
size = bytes_per_line * hh;
- bits = (unsigned char *) Xmalloc ((unsigned int) size);
+ bits = Xmalloc (size);
if (!bits)
RETURN (BitmapNoMemory);
diff --git a/libX11/src/Region.c b/libX11/src/Region.c
index 41047b242..d3d431a64 100644
--- a/libX11/src/Region.c
+++ b/libX11/src/Region.c
@@ -139,9 +139,9 @@ XCreateRegion(void)
{
Region temp;
- if (! (temp = ( Region )Xmalloc( (unsigned) sizeof( REGION ))))
+ if (! (temp = Xmalloc(sizeof( REGION ))))
return (Region) NULL;
- if (! (temp->rects = ( BOX * )Xmalloc( (unsigned) sizeof( BOX )))) {
+ if (! (temp->rects = Xmalloc(sizeof( BOX )))) {
Xfree((char *) temp);
return (Region) NULL;
}
@@ -521,9 +521,9 @@ miRegionCopy(
{
BOX *prevRects = dstrgn->rects;
- if (! (dstrgn->rects = (BOX *)
- Xrealloc((char *) dstrgn->rects,
- (unsigned) rgn->numRects * (sizeof(BOX))))) {
+ dstrgn->rects = Xrealloc(dstrgn->rects,
+ rgn->numRects * (sizeof(BOX)));
+ if (! dstrgn->rects) {
Xfree(prevRects);
return;
}
@@ -788,8 +788,7 @@ miRegionOp(
*/
newReg->size = max(reg1->numRects,reg2->numRects) * 2;
- if (! (newReg->rects = (BoxPtr)
- Xmalloc ((unsigned) (sizeof(BoxRec) * newReg->size)))) {
+ if (! (newReg->rects = Xmalloc (sizeof(BoxRec) * newReg->size))) {
newReg->size = 0;
return;
}
@@ -980,8 +979,8 @@ miRegionOp(
{
BoxPtr prev_rects = newReg->rects;
newReg->size = newReg->numRects;
- newReg->rects = (BoxPtr) Xrealloc ((char *) newReg->rects,
- (unsigned) (sizeof(BoxRec) * newReg->size));
+ newReg->rects = Xrealloc (newReg->rects,
+ sizeof(BoxRec) * newReg->size);
if (! newReg->rects)
newReg->rects = prev_rects;
}
@@ -993,7 +992,7 @@ miRegionOp(
*/
newReg->size = 1;
Xfree((char *) newReg->rects);
- newReg->rects = (BoxPtr) Xmalloc(sizeof(BoxRec));
+ newReg->rects = Xmalloc(sizeof(BoxRec));
}
}
Xfree ((char *) oldRects);
diff --git a/libX11/src/RegstFlt.c b/libX11/src/RegstFlt.c
index 9a560e794..5a1faa7e9 100644
--- a/libX11/src/RegstFlt.c
+++ b/libX11/src/RegstFlt.c
@@ -85,7 +85,7 @@ _XRegisterFilterByMask(
{
XFilterEventRec *rec;
- rec = (XFilterEventList)Xmalloc(sizeof(XFilterEventRec));
+ rec = Xmalloc(sizeof(XFilterEventRec));
if (!rec)
return;
rec->window = window;
@@ -117,7 +117,7 @@ _XRegisterFilterByType(
{
XFilterEventRec *rec;
- rec = (XFilterEventList)Xmalloc(sizeof(XFilterEventRec));
+ rec = Xmalloc(sizeof(XFilterEventRec));
if (!rec)
return;
rec->window = window;
diff --git a/libX11/src/SetFPath.c b/libX11/src/SetFPath.c
index 89955c23e..b1afd8201 100644
--- a/libX11/src/SetFPath.c
+++ b/libX11/src/SetFPath.c
@@ -52,7 +52,7 @@ XSetFontPath (
}
nbytes = (n + 3) & ~3;
req->length += nbytes >> 2;
- if ((p = (char *) Xmalloc ((unsigned) nbytes))) {
+ if ((p = Xmalloc (nbytes))) {
/*
* pack into counted strings.
*/
diff --git a/libX11/src/SetHints.c b/libX11/src/SetHints.c
index 1cde48f85..0ae076438 100644
--- a/libX11/src/SetHints.c
+++ b/libX11/src/SetHints.c
@@ -184,7 +184,7 @@ XSetIconSizes (
#define size_of_the_real_thing sizeof /* avoid grepping screwups */
unsigned nbytes = count * size_of_the_real_thing(xPropIconSize);
#undef size_of_the_real_thing
- if ((prop = pp = (xPropIconSize *) Xmalloc (nbytes))) {
+ if ((prop = pp = Xmalloc (nbytes))) {
for (i = 0; i < count; i++) {
pp->minWidth = list->min_width;
pp->minHeight = list->min_height;
@@ -216,7 +216,7 @@ XSetCommand (
for (i = 0, nbytes = 0; i < argc; i++) {
nbytes += safestrlen(argv[i]) + 1;
}
- if ((bp = buf = Xmalloc((unsigned) nbytes))) {
+ if ((bp = buf = Xmalloc(nbytes))) {
/* copy arguments into single buffer */
for (i = 0; i < argc; i++) {
if (argv[i]) {
@@ -299,7 +299,7 @@ XSetClassHint(
len_nm = safestrlen(classhint->res_name);
len_cl = safestrlen(classhint->res_class);
- if ((class_string = s = Xmalloc((unsigned) (len_nm + len_cl + 2)))) {
+ if ((class_string = s = Xmalloc(len_nm + len_cl + 2))) {
if (len_nm) {
strcpy(s, classhint->res_name);
s += len_nm + 1;
diff --git a/libX11/src/StrToText.c b/libX11/src/StrToText.c
index b5327e8fc..ef927f3d9 100644
--- a/libX11/src/StrToText.c
+++ b/libX11/src/StrToText.c
@@ -78,7 +78,7 @@ Status XStringListToTextProperty (
}
}
} else {
- proto.value = (unsigned char *) Xmalloc (1); /* easier for client */
+ proto.value = Xmalloc (1); /* easier for client */
if (!proto.value) return False;
proto.value[0] = '\0';
diff --git a/libX11/src/TextToStr.c b/libX11/src/TextToStr.c
index 216391c2e..36d9f0706 100644
--- a/libX11/src/TextToStr.c
+++ b/libX11/src/TextToStr.c
@@ -72,10 +72,10 @@ Status XTextPropertyToStringList (
/*
* allocate list and duplicate
*/
- list = (char **) Xmalloc (nelements * sizeof (char *));
+ list = Xmalloc (nelements * sizeof (char *));
if (!list) return False;
- start = (char *) Xmalloc ((datalen + 1) * sizeof (char)); /* for <NUL> */
+ start = Xmalloc ((datalen + 1) * sizeof (char)); /* for <NUL> */
if (!start) {
Xfree ((char *) list);
return False;
diff --git a/libX11/src/VisUtil.c b/libX11/src/VisUtil.c
index 3434c0161..aa679928a 100644
--- a/libX11/src/VisUtil.c
+++ b/libX11/src/VisUtil.c
@@ -75,8 +75,7 @@ XVisualInfo *XGetVisualInfo(
count = 0;
total = 10;
- if (! (vip_base = vip = (XVisualInfo *)
- Xmalloc((unsigned) (sizeof(XVisualInfo) * total)))) {
+ if (! (vip_base = vip = Xmalloc(sizeof(XVisualInfo) * total))) {
UnlockDisplay(dpy);
return (XVisualInfo *) NULL;
}
@@ -132,9 +131,8 @@ XVisualInfo *XGetVisualInfo(
{
XVisualInfo *old_vip_base = vip_base;
total += 10;
- if (! (vip_base = (XVisualInfo *)
- Xrealloc((char *) vip_base,
- (unsigned) (sizeof(XVisualInfo) * total)))) {
+ if (! (vip_base = Xrealloc(vip_base,
+ sizeof(XVisualInfo) * total))) {
Xfree((char *) old_vip_base);
UnlockDisplay(dpy);
return (XVisualInfo *) NULL;
diff --git a/libX11/src/WrBitF.c b/libX11/src/WrBitF.c
index 1ec6280fb..75a93a79d 100644
--- a/libX11/src/WrBitF.c
+++ b/libX11/src/WrBitF.c
@@ -53,7 +53,7 @@ static char *Format_Image(
bytes_per_line = (width+7)/8;
*resultsize = bytes_per_line * height; /* Calculate size of data */
- data = (char *) Xmalloc( *resultsize ); /* Get space for data */
+ data = Xmalloc( *resultsize ); /* Get space for data */
if (!data)
return(ERR_RETURN);
diff --git a/libX11/src/Xintatom.h b/libX11/src/Xintatom.h
index 82dba36e1..516a72b1d 100644
--- a/libX11/src/Xintatom.h
+++ b/libX11/src/Xintatom.h
@@ -2,6 +2,7 @@
#ifndef _XINTATOM_H_
#define _XINTATOM_H_ 1
+#include <X11/Xlib.h>
#include <X11/Xfuncproto.h>
/* IntAtom.c */
diff --git a/libX11/src/Xintconn.h b/libX11/src/Xintconn.h
index db59061a0..cd9aee32e 100644
--- a/libX11/src/Xintconn.h
+++ b/libX11/src/Xintconn.h
@@ -3,6 +3,7 @@
#define _XINTCONN_H_ 1
#include <X11/Xfuncproto.h>
+#include <X11/Xlib.h>
_XFUNCPROTOBEGIN
diff --git a/libX11/src/XlibInt.c b/libX11/src/XlibInt.c
index 1c964fdea..b06e57baa 100644
--- a/libX11/src/XlibInt.c
+++ b/libX11/src/XlibInt.c
@@ -152,7 +152,7 @@ Bool _XPollfdCacheInit(
#ifdef USE_POLL
struct pollfd *pfp;
- pfp = (struct pollfd *)Xmalloc(POLLFD_CACHE_SIZE * sizeof(struct pollfd));
+ pfp = Xmalloc(POLLFD_CACHE_SIZE * sizeof(struct pollfd));
if (!pfp)
return False;
pfp[0].fd = dpy->fd;
@@ -374,10 +374,10 @@ _XRegisterInternalConnection(
struct _XConnWatchInfo *watchers;
XPointer *wd;
- new_conni = (struct _XConnectionInfo*)Xmalloc(sizeof(struct _XConnectionInfo));
+ new_conni = Xmalloc(sizeof(struct _XConnectionInfo));
if (!new_conni)
return 0;
- new_conni->watch_data = (XPointer *)Xmalloc(dpy->watcher_count * sizeof(XPointer));
+ new_conni->watch_data = Xmalloc(dpy->watcher_count * sizeof(XPointer));
if (!new_conni->watch_data) {
Xfree(new_conni);
return 0;
@@ -464,7 +464,7 @@ XInternalConnectionNumbers(
count = 0;
for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next)
count++;
- fd_list = (int*) Xmalloc (count * sizeof(int));
+ fd_list = Xmalloc (count * sizeof(int));
if (!fd_list) {
UnlockDisplay(dpy);
return 0;
@@ -537,9 +537,8 @@ XAddConnectionWatch(
/* allocate new watch data */
for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) {
- wd_array = (XPointer *)Xrealloc((char *)info_list->watch_data,
- (dpy->watcher_count + 1) *
- sizeof(XPointer));
+ wd_array = Xrealloc(info_list->watch_data,
+ (dpy->watcher_count + 1) * sizeof(XPointer));
if (!wd_array) {
UnlockDisplay(dpy);
return 0;
@@ -548,7 +547,7 @@ XAddConnectionWatch(
wd_array[dpy->watcher_count] = NULL; /* for cleanliness */
}
- new_watcher = (struct _XConnWatchInfo*)Xmalloc(sizeof(struct _XConnWatchInfo));
+ new_watcher = Xmalloc(sizeof(struct _XConnWatchInfo));
if (!new_watcher) {
UnlockDisplay(dpy);
return 0;
@@ -756,8 +755,7 @@ void _XEnq(
/* If dpy->qfree is non-NULL do this, else malloc a new one. */
dpy->qfree = qelt->next;
}
- else if ((qelt =
- (_XQEvent *) Xmalloc((unsigned)sizeof(_XQEvent))) == NULL) {
+ else if ((qelt = Xmalloc(sizeof(_XQEvent))) == NULL) {
/* Malloc call failed! */
ESET(ENOMEM);
_XIOError(dpy);
@@ -1518,7 +1516,7 @@ char *_XAllocScratch(
{
if (nbytes > dpy->scratch_length) {
if (dpy->scratch_buffer) Xfree (dpy->scratch_buffer);
- if ((dpy->scratch_buffer = Xmalloc((unsigned) nbytes)))
+ if ((dpy->scratch_buffer = Xmalloc(nbytes)))
dpy->scratch_length = nbytes;
else dpy->scratch_length = 0;
}
diff --git a/libX11/src/Xprivate.h b/libX11/src/Xprivate.h
index 006b1705e..6bfe70baa 100644
--- a/libX11/src/Xprivate.h
+++ b/libX11/src/Xprivate.h
@@ -8,6 +8,8 @@
#ifndef XPRIVATE_H
#define XPRIVATE_H
+#include <X11/Xlib.h>
+
extern _X_HIDDEN void _XIDHandler(Display *dpy);
extern _X_HIDDEN void _XSeqSyncFunction(Display *dpy);
extern _X_HIDDEN void _XSetPrivSyncFunction(Display *dpy);
diff --git a/libX11/src/Xresinternal.h b/libX11/src/Xresinternal.h
index c2f355fe6..b5cc7ffc4 100644
--- a/libX11/src/Xresinternal.h
+++ b/libX11/src/Xresinternal.h
@@ -2,6 +2,8 @@
#ifndef _XRESINTERNAL_H_
#define _XRESINTERNAL_H_
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
#include <inttypes.h>
/* type defines */
diff --git a/libX11/src/Xrm.c b/libX11/src/Xrm.c
index d6899d970..d8272ee78 100644
--- a/libX11/src/Xrm.c
+++ b/libX11/src/Xrm.c
@@ -62,6 +62,7 @@ from The Open Group.
#endif
#include <X11/Xos.h>
#include <sys/stat.h>
+#include <limits.h>
#include "Xresinternal.h"
#include "Xresource.h"
@@ -494,7 +495,7 @@ static XrmDatabase NewDatabase(void)
{
register XrmDatabase db;
- db = (XrmDatabase) Xmalloc(sizeof(XrmHashBucketRec));
+ db = Xmalloc(sizeof(XrmHashBucketRec));
if (db) {
_XCreateMutex(&db->linfo);
db->table = (NTable)NULL;
@@ -827,7 +828,7 @@ static void PutEntry(
NTable *nprev, *firstpprev;
#define NEWTABLE(q,i) \
- table = (NTable)Xmalloc(sizeof(LTableRec)); \
+ table = Xmalloc(sizeof(LTableRec)); \
if (!table) \
return; \
table->name = q; \
@@ -840,7 +841,7 @@ static void PutEntry(
nprev = NodeBuckets(table); \
} else { \
table->leaf = 1; \
- if (!(nprev = (NTable *)Xmalloc(sizeof(VEntry *)))) {\
+ if (!(nprev = Xmalloc(sizeof(VEntry *)))) {\
Xfree(table); \
return; \
} \
@@ -954,9 +955,8 @@ static void PutEntry(
prev = nprev;
}
/* now allocate the value entry */
- entry = (VEntry)Xmalloc(((type == XrmQString) ?
- sizeof(VEntryRec) : sizeof(DEntryRec)) +
- value->size);
+ entry = Xmalloc(((type == XrmQString) ?
+ sizeof(VEntryRec) : sizeof(DEntryRec)) + value->size);
if (!entry)
return;
entry->name = q = *quarks;
@@ -986,13 +986,12 @@ static void PutEntry(
if (resourceQuarks) {
unsigned char *prevQuarks = resourceQuarks;
- resourceQuarks = (unsigned char *)Xrealloc((char *)resourceQuarks,
- size);
+ resourceQuarks = Xrealloc(resourceQuarks, size);
if (!resourceQuarks) {
Xfree(prevQuarks);
}
} else
- resourceQuarks = (unsigned char *)Xmalloc(size);
+ resourceQuarks = Xmalloc(size);
if (resourceQuarks) {
bzero((char *)&resourceQuarks[oldsize], size - oldsize);
maxResourceQuark = (size << 3) - 1;
@@ -1087,13 +1086,15 @@ static void GetIncludeFile(
XrmDatabase db,
_Xconst char *base,
_Xconst char *fname,
- int fnamelen);
+ int fnamelen,
+ int depth);
static void GetDatabase(
XrmDatabase db,
_Xconst char *str,
_Xconst char *filename,
- Bool doall)
+ Bool doall,
+ int depth)
{
char *rhs;
char *lhs, lhs_s[DEF_BUFF_SIZE];
@@ -1135,11 +1136,11 @@ static void GetDatabase(
str_len = strlen (str);
if (DEF_BUFF_SIZE > str_len) lhs = lhs_s;
- else if ((lhs = (char*) Xmalloc (str_len)) == NULL)
+ else if ((lhs = Xmalloc (str_len)) == NULL)
return;
alloc_chars = DEF_BUFF_SIZE < str_len ? str_len : DEF_BUFF_SIZE;
- if ((rhs = (char*) Xmalloc (alloc_chars)) == NULL) {
+ if ((rhs = Xmalloc (alloc_chars)) == NULL) {
if (lhs != lhs_s) Xfree (lhs);
return;
}
@@ -1203,7 +1204,8 @@ static void GetDatabase(
} while (c != '"' && !is_EOL(bits));
/* must have an ending " */
if (c == '"')
- GetIncludeFile(db, filename, fname, str - len - fname);
+ GetIncludeFile(db, filename, fname, str - len - fname,
+ depth);
}
}
/* spin to next newline */
@@ -1544,7 +1546,7 @@ XrmPutLineResource(
{
if (!*pdb) *pdb = NewDatabase();
_XLockMutex(&(*pdb)->linfo);
- GetDatabase(*pdb, line, (char *)NULL, False);
+ GetDatabase(*pdb, line, (char *)NULL, False, 0);
_XUnlockMutex(&(*pdb)->linfo);
}
@@ -1556,7 +1558,7 @@ XrmGetStringDatabase(
db = NewDatabase();
_XLockMutex(&db->linfo);
- GetDatabase(db, data, (char *)NULL, True);
+ GetDatabase(db, data, (char *)NULL, True, 0);
_XUnlockMutex(&db->linfo);
return db;
}
@@ -1594,11 +1596,12 @@ ReadInFile(_Xconst char *filename)
*/
{
struct stat status_buffer;
- if ( (fstat(fd, &status_buffer)) == -1 ) {
+ if ( ((fstat(fd, &status_buffer)) == -1 ) ||
+ (status_buffer.st_size >= INT_MAX) ) {
close (fd);
return (char *)NULL;
} else
- size = status_buffer.st_size;
+ size = (int) status_buffer.st_size;
}
if (!(filebuf = Xmalloc(size + 1))) { /* leave room for '\0' */
@@ -1634,7 +1637,8 @@ GetIncludeFile(
XrmDatabase db,
_Xconst char *base,
_Xconst char *fname,
- int fnamelen)
+ int fnamelen,
+ int depth)
{
int len;
char *str;
@@ -1642,6 +1646,8 @@ GetIncludeFile(
if (fnamelen <= 0 || fnamelen >= BUFSIZ)
return;
+ if (depth >= MAXDBDEPTH)
+ return;
if (*fname != '/' && base && (str = strrchr(base, '/'))) {
len = str - base + 1;
if (len + fnamelen >= BUFSIZ)
@@ -1655,7 +1661,7 @@ GetIncludeFile(
}
if (!(str = ReadInFile(realfname)))
return;
- GetDatabase(db, str, realfname, True);
+ GetDatabase(db, str, realfname, True, depth + 1);
Xfree(str);
}
@@ -1671,7 +1677,7 @@ XrmGetFileDatabase(
db = NewDatabase();
_XLockMutex(&db->linfo);
- GetDatabase(db, str, filename, True);
+ GetDatabase(db, str, filename, True, 0);
_XUnlockMutex(&db->linfo);
Xfree(str);
return db;
@@ -1695,7 +1701,7 @@ XrmCombineFileDatabase(
} else
db = NewDatabase();
_XLockMutex(&db->linfo);
- GetDatabase(db, str, filename, True);
+ GetDatabase(db, str, filename, True, 0);
_XUnlockMutex(&db->linfo);
Xfree(str);
if (!override)
diff --git a/libX11/src/locking.c b/libX11/src/locking.c
index b3dfb3b01..7c09c44d2 100644
--- a/libX11/src/locking.c
+++ b/libX11/src/locking.c
@@ -82,7 +82,7 @@ _Xthread_waiter(void)
struct _xthread_waiter *me;
if (!(me = TlsGetValue(_X_TlsIndex))) {
- me = (struct _xthread_waiter *)xmalloc(sizeof(struct _xthread_waiter));
+ me = xmalloc(sizeof(struct _xthread_waiter));
me->sem = CreateSemaphore(NULL, 0, 1, NULL);
me->next = NULL;
TlsSetValue(_X_TlsIndex, me);
@@ -249,7 +249,7 @@ static struct _XCVList *_XCreateCVL(
dpy->lock->free_cvls = cvl->next;
dpy->lock->num_free_cvls--;
} else {
- cvl = (struct _XCVList *)Xmalloc(sizeof(struct _XCVList));
+ cvl = Xmalloc(sizeof(struct _XCVList));
if (!cvl)
return NULL;
cvl->cv = xcondition_malloc();
@@ -512,10 +512,10 @@ void _XUserUnlockDisplay(
static int _XInitDisplayLock(
Display *dpy)
{
- dpy->lock_fns = (struct _XLockPtrs*)Xmalloc(sizeof(struct _XLockPtrs));
+ dpy->lock_fns = Xmalloc(sizeof(struct _XLockPtrs));
if (dpy->lock_fns == NULL)
return -1;
- dpy->lock = (struct _XLockInfo *)Xmalloc(sizeof(struct _XLockInfo));
+ dpy->lock = Xmalloc(sizeof(struct _XLockInfo));
if (dpy->lock == NULL) {
_XFreeDisplayLock(dpy);
return -1;
diff --git a/libX11/src/locking.h b/libX11/src/locking.h
index 96019fc91..5251a60c1 100644
--- a/libX11/src/locking.h
+++ b/libX11/src/locking.h
@@ -36,6 +36,8 @@ in this Software without prior written authorization from The Open Group.
#define xmalloc(s) Xmalloc(s)
#define xfree(s) Xfree(s)
+#include <X11/Xlib.h>
+#include <X11/Xlibint.h>
#include <X11/Xthreads.h>
struct _XCVList {
diff --git a/libX11/src/pathmax.h b/libX11/src/pathmax.h
new file mode 100644
index 000000000..3aa3d5097
--- /dev/null
+++ b/libX11/src/pathmax.h
@@ -0,0 +1,81 @@
+
+/***********************************************************
+
+Copyright 1987, 1988, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+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 THE
+OPEN GROUP 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.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+/*
+ * Provides a single definition of PATH_MAX instead of replicating this mess
+ * in multiple files
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/Xos.h>
+
+#ifndef X_NOT_POSIX
+#ifdef _POSIX_SOURCE
+#include <limits.h>
+#else
+#define _POSIX_SOURCE
+#include <limits.h>
+#undef _POSIX_SOURCE
+#endif
+#endif
+#ifndef PATH_MAX
+#ifdef WIN32
+#define PATH_MAX 512
+#else
+#include <sys/param.h>
+#endif
+#ifndef PATH_MAX
+#ifdef MAXPATHLEN
+#define PATH_MAX MAXPATHLEN
+#else
+#define PATH_MAX 1024
+#endif
+#endif
+#endif
diff --git a/libX11/src/udcInf.c b/libX11/src/udcInf.c
index b7577ac96..9ecf1566e 100644
--- a/libX11/src/udcInf.c
+++ b/libX11/src/udcInf.c
@@ -145,12 +145,11 @@ int *num_codeset;
if(!_XlcCompareISOLatin1(charset_str,buf)){
num_ret += 1;
if(num_ret == 1){
- ret = (int *)Xmalloc(sizeof(int));
+ ret = Xmalloc(sizeof(int));
} else {
int *prev_ret = ret;
- ret =
- (int *)Xrealloc(ret,num_ret*sizeof(int));
+ ret = Xrealloc(ret, num_ret * sizeof(int));
if (ret == NULL){
Xfree(prev_ret);
}
@@ -272,7 +271,7 @@ int *num_gr;
sprintf(buf, "fs%d.charset.udc_area", codeset-1);
_XlcGetLocaleDataBase(lcd, "XLC_FONTSET", buf, &value, &count);
if(count > 0){
- udc = (_XUDCGlyphRegion *)Xmalloc(count * sizeof(_XUDCGlyphRegion));
+ udc = Xmalloc(count * sizeof(_XUDCGlyphRegion));
if(udc == NULL){
_xudc_utyerrno = 0x03 ;
_xudc_utyerrno |= (0x0b<<8) ;
@@ -524,7 +523,7 @@ int *num_cr;
return(ret);
}
- crr = (_XUDCCodeRegion *)Xmalloc(num_gr*sizeof(_XUDCCodeRegion));
+ crr = Xmalloc(num_gr * sizeof(_XUDCCodeRegion));
if(crr == NULL){
Xfree(gr);
_xudc_utyerrno = 0x03 ;
diff --git a/libX11/src/xcb_io.c b/libX11/src/xcb_io.c
index 300ef571f..727c6c79f 100644
--- a/libX11/src/xcb_io.c
+++ b/libX11/src/xcb_io.c
@@ -19,6 +19,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
@@ -757,3 +758,19 @@ void _XEatData(Display *dpy, unsigned long n)
dpy->xcb->reply_consumed += n;
_XFreeReplyData(dpy, False);
}
+
+/*
+ * Read and discard "n" 32-bit words of data
+ * Matches the units of the length field in X protocol replies, and provides
+ * a single implementation of overflow checking to avoid having to replicate
+ * those checks in every caller.
+ */
+void _XEatDataWords(Display *dpy, unsigned long n)
+{
+ if (n < ((INT_MAX - dpy->xcb->reply_consumed) >> 2))
+ dpy->xcb->reply_consumed += (n << 2);
+ else
+ /* Overflow would happen, so just eat the rest of the reply */
+ dpy->xcb->reply_consumed = dpy->xcb->reply_length;
+ _XFreeReplyData(dpy, False);
+}
diff --git a/libX11/src/xcms/cmsColNm.c b/libX11/src/xcms/cmsColNm.c
index a6749c02e..8d0d4a771 100644
--- a/libX11/src/xcms/cmsColNm.c
+++ b/libX11/src/xcms/cmsColNm.c
@@ -40,6 +40,7 @@
#include <sys/stat.h>
#include <stdio.h>
#include <ctype.h>
+#include <limits.h>
#define XK_LATIN1
#include <X11/keysymdef.h>
#include "Cv.h"
@@ -542,7 +543,10 @@ stringSectionSize(
char *pBuf;
char *f1;
char *f2;
- int i;
+ size_t i;
+
+ unsigned int numEntries = 0;
+ unsigned int sectionSize = 0;
*pNumEntries = 0;
*pSectionSize = 0;
@@ -576,26 +580,37 @@ stringSectionSize(
return(XcmsFailure);
}
- (*pNumEntries)++;
+ numEntries++;
+ if (numEntries >= INT_MAX)
+ return(XcmsFailure);
- (*pSectionSize) += (i = strlen(f1)) + 1;
+ i = strlen(f1);
+ if (i >= INT_MAX - sectionSize)
+ return(XcmsFailure);
+ sectionSize += i + 1;
for (; i; i--, f1++) {
/* REMOVE SPACES FROM COUNT */
if (isspace(*f1)) {
- (*pSectionSize)--;
+ sectionSize--;
}
}
- (*pSectionSize) += (i = strlen(f2)) + 1;
+ i = strlen(f2);
+ if (i >= INT_MAX - sectionSize)
+ return(XcmsFailure);
+ sectionSize += i + 1;
for (; i; i--, f2++) {
/* REMOVE SPACES FROM COUNT */
if (isspace(*f2)) {
- (*pSectionSize)--;
+ sectionSize--;
}
}
}
+ *pNumEntries = (int) numEntries;
+ *pSectionSize = (int) sectionSize;
+
return(XcmsSuccess);
}
diff --git a/libX11/src/xcms/cmsMath.c b/libX11/src/xcms/cmsMath.c
index 70b067587..487eb3f9c 100644
--- a/libX11/src/xcms/cmsMath.c
+++ b/libX11/src/xcms/cmsMath.c
@@ -35,6 +35,10 @@ in this Software without prior written authorization from The Open Group.
#include "Xlibint.h"
#include "Xcmsint.h"
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
#include <float.h>
#ifndef DBL_EPSILON
#define DBL_EPSILON 1e-6
diff --git a/libX11/src/xkb/XKBExtDev.c b/libX11/src/xkb/XKBExtDev.c
index 353e769bf..dd383bc10 100644
--- a/libX11/src/xkb/XKBExtDev.c
+++ b/libX11/src/xkb/XKBExtDev.c
@@ -181,6 +181,9 @@ int tmp;
return tmp;
}
if (rep->nBtnsWanted>0) {
+ if (((unsigned short) rep->firstBtnWanted + rep->nBtnsWanted)
+ >= devi->num_btns)
+ goto BAILOUT;
act= &devi->btn_acts[rep->firstBtnWanted];
bzero((char *)act,(rep->nBtnsWanted*sizeof(XkbAction)));
}
@@ -190,6 +193,9 @@ int tmp;
goto BAILOUT;
if (rep->nBtnsRtrn>0) {
int size;
+ if (((unsigned short) rep->firstBtnRtrn + rep->nBtnsRtrn)
+ >= devi->num_btns)
+ goto BAILOUT;
act= &devi->btn_acts[rep->firstBtnRtrn];
size= rep->nBtnsRtrn*SIZEOF(xkbActionWireDesc);
if (!_XkbCopyFromReadBuffer(&buf,(char *)act,size))
diff --git a/libX11/src/xkb/XKBGeom.c b/libX11/src/xkb/XKBGeom.c
index 7594a3de4..7140a7247 100644
--- a/libX11/src/xkb/XKBGeom.c
+++ b/libX11/src/xkb/XKBGeom.c
@@ -364,12 +364,16 @@ Status rtrn;
}
ol->num_points= olWire->nPoints;
}
- if (shapeWire->primaryNdx!=XkbNoShape)
+ if ((shapeWire->primaryNdx!=XkbNoShape) &&
+ (shapeWire->primaryNdx < shapeWire->nOutlines))
shape->primary= &shape->outlines[shapeWire->primaryNdx];
- else shape->primary= NULL;
- if (shapeWire->approxNdx!=XkbNoShape)
+ else
+ shape->primary= NULL;
+ if ((shapeWire->approxNdx!=XkbNoShape) &&
+ (shapeWire->approxNdx < shapeWire->nOutlines))
shape->approx= &shape->outlines[shapeWire->approxNdx];
- else shape->approx= NULL;
+ else
+ shape->approx= NULL;
XkbComputeShapeBounds(shape);
}
return Success;
@@ -615,6 +619,9 @@ XkbGeometryPtr geom;
if (status==Success)
status= _XkbReadGeomKeyAliases(&buf,geom,rep);
left= _XkbFreeReadBuffer(&buf);
+ if ((rep->baseColorNdx > geom->num_colors) ||
+ (rep->labelColorNdx > geom->num_colors))
+ status = BadLength;
if ((status!=Success) || left || buf.error) {
if (status==Success)
status= BadLength;
diff --git a/libX11/src/xkb/XKBGetMap.c b/libX11/src/xkb/XKBGetMap.c
index 30fb62971..c73e655ae 100644
--- a/libX11/src/xkb/XKBGetMap.c
+++ b/libX11/src/xkb/XKBGetMap.c
@@ -151,9 +151,12 @@ XkbClientMapPtr map;
map= xkb->map;
if (map->key_sym_map==NULL) {
register int offset;
+ int size = xkb->max_key_code + 1;
XkbSymMapPtr oldMap;
xkbSymMapWireDesc *newMap;
- map->key_sym_map= _XkbTypedCalloc((xkb->max_key_code+1),XkbSymMapRec);
+ if (((unsigned short)rep->firstKeySym + rep->nKeySyms) > size)
+ return BadLength;
+ map->key_sym_map= _XkbTypedCalloc(size,XkbSymMapRec);
if (map->key_sym_map==NULL)
return BadAlloc;
if (map->syms==NULL) {
@@ -209,6 +212,8 @@ XkbClientMapPtr map;
KeySym * newSyms;
int tmp;
+ if (((unsigned short)rep->firstKeySym + rep->nKeySyms) > map->num_syms)
+ return BadLength;
oldMap = &map->key_sym_map[rep->firstKeySym];
for (i=0;i<(int)rep->nKeySyms;i++,oldMap++) {
newMap= (xkbSymMapWireDesc *)
@@ -264,6 +269,10 @@ Status ret = Success;
symMap = &info->map->key_sym_map[rep->firstKeyAct];
for (i=0;i<(int)rep->nKeyActs;i++,symMap++) {
if (numDesc[i]==0) {
+ if ((i + rep->firstKeyAct) > (info->max_key_code + 1)) {
+ ret = BadLength;
+ goto done;
+ }
info->server->key_acts[i+rep->firstKeyAct]= 0;
}
else {
@@ -296,8 +305,10 @@ register int i;
xkbBehaviorWireDesc *wire;
if ( rep->totalKeyBehaviors>0 ) {
+ int size = xkb->max_key_code + 1;
+ if ( ((int) rep->firstKeyBehavior + rep->nKeyBehaviors) > size)
+ return BadLength;
if ( xkb->server->behaviors == NULL ) {
- int size = xkb->max_key_code+1;
xkb->server->behaviors = _XkbTypedCalloc(size,XkbBehavior);
if (xkb->server->behaviors==NULL)
return BadAlloc;
@@ -309,7 +320,7 @@ xkbBehaviorWireDesc *wire;
for (i=0;i<rep->totalKeyBehaviors;i++) {
wire= (xkbBehaviorWireDesc *)_XkbGetReadBufferPtr(buf,
SIZEOF(xkbBehaviorWireDesc));
- if (wire==NULL)
+ if (wire==NULL || wire->key >= size)
return BadLength;
xkb->server->behaviors[wire->key].type= wire->type;
xkb->server->behaviors[wire->key].data= wire->data;
@@ -351,8 +362,10 @@ register int i;
unsigned char *wire;
if ( rep->totalKeyExplicit>0 ) {
+ int size = xkb->max_key_code + 1;
+ if ( ((int) rep->firstKeyExplicit + rep->nKeyExplicit) > size)
+ return BadLength;
if ( xkb->server->explicit == NULL ) {
- int size = xkb->max_key_code+1;
xkb->server->explicit = _XkbTypedCalloc(size,unsigned char);
if (xkb->server->explicit==NULL)
return BadAlloc;
@@ -366,6 +379,8 @@ unsigned char *wire;
if (!wire)
return BadLength;
for (i=0;i<rep->totalKeyExplicit;i++,wire+=2) {
+ if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code)
+ return BadLength;
xkb->server->explicit[wire[0]]= wire[1];
}
}
@@ -379,6 +394,9 @@ register int i;
unsigned char *wire;
if ( rep->totalModMapKeys>0 ) {
+ if ( ((int)rep->firstModMapKey + rep->nModMapKeys) >
+ (xkb->max_key_code + 1))
+ return BadLength;
if ((xkb->map->modmap==NULL)&&
(XkbAllocClientMap(xkb,XkbModifierMapMask,0)!=Success)) {
return BadAlloc;
@@ -391,6 +409,8 @@ unsigned char *wire;
if (!wire)
return BadLength;
for (i=0;i<rep->totalModMapKeys;i++,wire+=2) {
+ if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code)
+ return BadLength;
xkb->map->modmap[wire[0]]= wire[1];
}
}
@@ -405,6 +425,9 @@ xkbVModMapWireDesc * wire;
XkbServerMapPtr srv;
if ( rep->totalVModMapKeys>0 ) {
+ if (((int) rep->firstVModMapKey + rep->nVModMapKeys)
+ > xkb->max_key_code + 1)
+ return BadLength;
if (((xkb->server==NULL)||(xkb->server->vmodmap==NULL))&&
(XkbAllocServerMap(xkb,XkbVirtualModMapMask,0)!=Success)) {
return BadAlloc;
@@ -461,6 +484,8 @@ unsigned mask;
if ( xkb->device_spec == XkbUseCoreKbd )
xkb->device_spec= rep->deviceID;
+ if ( rep->maxKeyCode < rep->minKeyCode )
+ return BadImplementation;
xkb->min_key_code = rep->minKeyCode;
xkb->max_key_code = rep->maxKeyCode;
diff --git a/libX11/src/xkb/XKBNames.c b/libX11/src/xkb/XKBNames.c
index 0276c05b3..3a8860be7 100644
--- a/libX11/src/xkb/XKBNames.c
+++ b/libX11/src/xkb/XKBNames.c
@@ -180,6 +180,8 @@ _XkbReadGetNamesReply( Display * dpy,
nKeys= xkb->max_key_code+1;
names->keys= _XkbTypedCalloc(nKeys,XkbKeyNameRec);
}
+ if ( ((int)rep->firstKey + rep->nKeys) > xkb->max_key_code + 1)
+ goto BAILOUT;
if (names->keys!=NULL) {
if (!_XkbCopyFromReadBuffer(&buf,
(char *)&names->keys[rep->firstKey],
diff --git a/libX11/src/xlibi18n/lcFile.c b/libX11/src/xlibi18n/lcFile.c
index 2c06fa2d7..61a14e764 100644
--- a/libX11/src/xlibi18n/lcFile.c
+++ b/libX11/src/xlibi18n/lcFile.c
@@ -54,29 +54,7 @@
#define XLC_BUFSIZE 256
-#ifndef X_NOT_POSIX
-#ifdef _POSIX_SOURCE
-#include <limits.h>
-#else
-#define _POSIX_SOURCE
-#include <limits.h>
-#undef _POSIX_SOURCE
-#endif
-#endif
-#ifndef PATH_MAX
-#ifdef WIN32
-#define PATH_MAX 512
-#else
-#include <sys/param.h>
-#endif
-#ifndef PATH_MAX
-#ifdef MAXPATHLEN
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
-#endif
-#endif
+#include "pathmax.h"
#define NUM_LOCALEDIR 64
diff --git a/libXau/configure.ac b/libXau/configure.ac
index e55cfceb6..7f914ea1b 100644
--- a/libXau/configure.ac
+++ b/libXau/configure.ac
@@ -22,7 +22,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libXau], [1.0.7],
+AC_INIT([libXau], [1.0.8],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXau])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
diff --git a/libXdmcp/Array.c b/libXdmcp/Array.c
index 8862773b9..f529781db 100644
--- a/libXdmcp/Array.c
+++ b/libXdmcp/Array.c
@@ -62,8 +62,11 @@ XdmcpAllocARRAY8 (ARRAY8Ptr array, int length)
return FALSE;
newData = (CARD8Ptr) xmalloc(length * sizeof (CARD8));
- if (!newData)
+ if (!newData) {
+ array->length = 0;
+ array->data = NULL;
return FALSE;
+ }
array->length = (CARD16) length;
array->data = newData;
return TRUE;
@@ -79,8 +82,11 @@ XdmcpAllocARRAY16 (ARRAY16Ptr array, int length)
return FALSE;
newData = (CARD16Ptr) xmalloc(length * sizeof (CARD16));
- if (!newData)
+ if (!newData) {
+ array->length = 0;
+ array->data = NULL;
return FALSE;
+ }
array->length = (CARD8) length;
array->data = newData;
return TRUE;
@@ -96,8 +102,11 @@ XdmcpAllocARRAY32 (ARRAY32Ptr array, int length)
return FALSE;
newData = (CARD32Ptr) xmalloc(length * sizeof (CARD32));
- if (!newData)
+ if (!newData) {
+ array->length = 0;
+ array->data = NULL;
return FALSE;
+ }
array->length = (CARD8) length;
array->data = newData;
return TRUE;
@@ -113,8 +122,11 @@ XdmcpAllocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length)
return FALSE;
newData = (ARRAY8Ptr) xmalloc(length * sizeof (ARRAY8));
- if (!newData)
+ if (!newData) {
+ array->length = 0;
+ array->data = NULL;
return FALSE;
+ }
array->length = (CARD8) length;
array->data = newData;
return TRUE;
@@ -133,9 +145,7 @@ XdmcpARRAY8Equal (const ARRAY8Ptr array1, const ARRAY8Ptr array2)
int
XdmcpCopyARRAY8 (const ARRAY8Ptr src, ARRAY8Ptr dst)
{
- dst->length = src->length;
- dst->data = (CARD8 *) xmalloc(dst->length * sizeof (CARD8));
- if (!dst->data)
+ if (!XdmcpAllocARRAY8(dst, src->length))
return FALSE;
memmove (dst->data, src->data, src->length * sizeof (CARD8));
return TRUE;
diff --git a/libXext/COPYING b/libXext/COPYING
index 80622a057..e3a63ef7c 100644
--- a/libXext/COPYING
+++ b/libXext/COPYING
@@ -160,7 +160,8 @@ makes no representations about the suitability for any purpose
of the information in this document. This documentation is
provided ``as is'' without express or implied warranty.
-Copyright (c) 1999, 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 1999, 2005, 2006, 2013, Oracle and/or its affiliates.
+All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
diff --git a/libXext/configure.ac b/libXext/configure.ac
index 63775de77..9a1e0c2c6 100644
--- a/libXext/configure.ac
+++ b/libXext/configure.ac
@@ -1,7 +1,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libXext], [1.3.1],
+AC_INIT([libXext], [1.3.2],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXext])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
@@ -38,6 +38,12 @@ AC_SUBST(XEXT_SOREV)
# Obtain compiler/linker options for depedencies
PKG_CHECK_MODULES(XEXT, [xproto >= 7.0.13] [x11 >= 1.1.99.1] [xextproto >= 7.1.99])
+# Check for _XEatDataWords function that may be patched into older Xlib releases
+SAVE_LIBS="$LIBS"
+LIBS="$XEXT_LIBS"
+AC_CHECK_FUNCS([_XEatDataWords])
+LIBS="$SAVE_LIBS"
+
# Allow checking code with lint, sparse, etc.
XORG_WITH_LINT
XORG_LINT_LIBRARY([Xext])
diff --git a/libXext/src/Makefile.am b/libXext/src/Makefile.am
index e236c3345..b8285470a 100644
--- a/libXext/src/Makefile.am
+++ b/libXext/src/Makefile.am
@@ -12,6 +12,7 @@ libXext_la_LDFLAGS = -version-number $(XEXT_SOREV) -no-undefined
libXext_la_LIBADD = $(XEXT_LIBS)
libXext_la_SOURCES = \
+ eat.h \
DPMS.c \
MITMisc.c \
XAppgroup.c \
diff --git a/libXext/src/XEVI.c b/libXext/src/XEVI.c
index eb09daa9a..5a9558364 100644
--- a/libXext/src/XEVI.c
+++ b/libXext/src/XEVI.c
@@ -30,6 +30,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <X11/extensions/Xext.h>
#include <X11/extensions/extutil.h>
#include <X11/Xutil.h>
+#include <limits.h>
+#include "eat.h"
+
static XExtensionInfo *xevi_info;/* needs to move to globals.c */
static const char *xevi_extension_name = EVINAME;
#define XeviCheckExtension(dpy,i,val) \
@@ -163,15 +166,22 @@ Status XeviGetVisualInfo(
return BadAccess;
}
Xfree(temp_visual);
- sz_info = rep.n_info * sizeof(ExtendedVisualInfo);
- sz_xInfo = rep.n_info * sz_xExtendedVisualInfo;
- sz_conflict = rep.n_conflicts * sizeof(VisualID);
- sz_xConflict = rep.n_conflicts * sz_VisualID32;
- infoPtr = *evi_return = (ExtendedVisualInfo *)Xmalloc(sz_info + sz_conflict);
- xInfoPtr = temp_xInfo = (xExtendedVisualInfo *)Xmalloc(sz_xInfo);
- xConflictPtr = temp_conflict = (VisualID32 *)Xmalloc(sz_xConflict);
+ if ((rep.n_info < 65536) && (rep.n_conflicts < 65536)) {
+ sz_info = rep.n_info * sizeof(ExtendedVisualInfo);
+ sz_xInfo = rep.n_info * sz_xExtendedVisualInfo;
+ sz_conflict = rep.n_conflicts * sizeof(VisualID);
+ sz_xConflict = rep.n_conflicts * sz_VisualID32;
+ *evi_return = Xmalloc(sz_info + sz_conflict);
+ temp_xInfo = Xmalloc(sz_xInfo);
+ temp_conflict = Xmalloc(sz_xConflict);
+ } else {
+ sz_xInfo = sz_xConflict = 0;
+ *evi_return = NULL;
+ temp_xInfo = NULL;
+ temp_conflict = NULL;
+ }
if (!*evi_return || !temp_xInfo || !temp_conflict) {
- _XEatData(dpy, (sz_xInfo + sz_xConflict + 3) & ~3);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
if (evi_return)
@@ -186,6 +196,9 @@ Status XeviGetVisualInfo(
_XRead(dpy, (char *)temp_conflict, sz_xConflict);
UnlockDisplay(dpy);
SyncHandle();
+ infoPtr = *evi_return;
+ xInfoPtr = temp_xInfo;
+ xConflictPtr = temp_conflict;
n_data = rep.n_info;
conflict = (VisualID *)(infoPtr + n_data);
while (n_data-- > 0) {
diff --git a/libXext/src/XMultibuf.c b/libXext/src/XMultibuf.c
index 7a746bac5..43d56d3eb 100644
--- a/libXext/src/XMultibuf.c
+++ b/libXext/src/XMultibuf.c
@@ -34,6 +34,7 @@ in this Software without prior written authorization from The Open Group.
#include <X11/extensions/extutil.h>
#include <X11/extensions/multibufproto.h>
#include <X11/extensions/multibuf.h>
+#include "eat.h"
static XExtensionInfo _multibuf_info_data;
static XExtensionInfo *multibuf_info = &_multibuf_info_data;
@@ -408,7 +409,7 @@ Status XmbufGetWindowAttributes (
attr->buffers = (Multibuffer *) Xmalloc((unsigned) nbytes);
nbytes = rep.length << 2;
if (! attr->buffers) {
- _XEatData(dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
return (0);
diff --git a/libXext/src/XSecurity.c b/libXext/src/XSecurity.c
index f8c7da13b..ab17755c8 100644
--- a/libXext/src/XSecurity.c
+++ b/libXext/src/XSecurity.c
@@ -33,6 +33,7 @@ in this Software without prior written authorization from The Open Group.
#include <X11/extensions/extutil.h>
#include <X11/extensions/securproto.h>
#include <X11/extensions/security.h>
+#include "eat.h"
static XExtensionInfo _Security_info_data;
static XExtensionInfo *Security_info = &_Security_info_data;
@@ -282,7 +283,7 @@ XSecurityGenerateAuthorization(
}
else
{
- _XEatData(dpy, (unsigned long) (rep.dataLength + 3) & ~3);
+ _XEatDataWords(dpy, rep.length);
}
UnlockDisplay (dpy);
diff --git a/libXext/src/XShape.c b/libXext/src/XShape.c
index 6e8fbae9f..d02502004 100644
--- a/libXext/src/XShape.c
+++ b/libXext/src/XShape.c
@@ -35,6 +35,8 @@ in this Software without prior written authorization from The Open Group.
#include <X11/extensions/extutil.h>
#include <X11/extensions/shape.h>
#include <X11/extensions/shapeproto.h>
+#include <limits.h>
+#include "eat.h"
static XExtensionInfo _shape_info_data;
static XExtensionInfo *shape_info = &_shape_info_data;
@@ -442,7 +444,7 @@ XRectangle *XShapeGetRectangles (
xShapeGetRectanglesReply rep;
XRectangle *rects;
xRectangle *xrects;
- int i;
+ unsigned int i;
ShapeCheckExtension (dpy, info, (XRectangle *)NULL);
@@ -460,20 +462,23 @@ XRectangle *XShapeGetRectangles (
*count = rep.nrects;
*ordering = rep.ordering;
rects = NULL;
- if (*count) {
- xrects = (xRectangle *) Xmalloc (*count * sizeof (xRectangle));
- rects = (XRectangle *) Xmalloc (*count * sizeof (XRectangle));
+ if (rep.nrects) {
+ if (rep.nrects < (INT_MAX / sizeof (XRectangle))) {
+ xrects = Xmalloc (rep.nrects * sizeof (xRectangle));
+ rects = Xmalloc (rep.nrects * sizeof (XRectangle));
+ } else {
+ xrects = NULL;
+ rects = NULL;
+ }
if (!xrects || !rects) {
- if (xrects)
- Xfree (xrects);
- if (rects)
- Xfree (rects);
- _XEatData (dpy, *count * sizeof (xRectangle));
+ Xfree (xrects);
+ Xfree (rects);
+ _XEatDataWords (dpy, rep.length);
rects = NULL;
*count = 0;
} else {
- _XRead (dpy, (char *) xrects, *count * sizeof (xRectangle));
- for (i = 0; i < *count; i++) {
+ _XRead (dpy, (char *) xrects, rep.nrects * sizeof (xRectangle));
+ for (i = 0; i < rep.nrects; i++) {
rects[i].x = (short) cvtINT16toInt (xrects[i].x);
rects[i].y = (short) cvtINT16toInt (xrects[i].y);
rects[i].width = xrects[i].width;
diff --git a/libXext/src/XSync.c b/libXext/src/XSync.c
index 577529388..ce4ab44d9 100644
--- a/libXext/src/XSync.c
+++ b/libXext/src/XSync.c
@@ -59,6 +59,8 @@ PERFORMANCE OF THIS SOFTWARE.
#include <X11/extensions/extutil.h>
#include <X11/extensions/sync.h>
#include <X11/extensions/syncproto.h>
+#include <limits.h>
+#include "eat.h"
static XExtensionInfo _sync_info_data;
static XExtensionInfo *sync_info = &_sync_info_data;
@@ -351,20 +353,29 @@ XSyncListSystemCounters(Display *dpy, int *n_counters_return)
if (rep.nCounters > 0)
{
xSyncSystemCounter *pWireSysCounter, *pNextWireSysCounter;
+ xSyncSystemCounter *pLastWireSysCounter;
XSyncCounter counter;
- int replylen;
+ unsigned int replylen;
int i;
- list = Xmalloc(rep.nCounters * sizeof(XSyncSystemCounter));
- replylen = rep.length << 2;
- pWireSysCounter = Xmalloc ((unsigned) replylen + sizeof(XSyncCounter));
- /* +1 to leave room for last counter read-ahead */
+ if (rep.nCounters < (INT_MAX / sizeof(XSyncSystemCounter)))
+ list = Xmalloc(rep.nCounters * sizeof(XSyncSystemCounter));
+ if (rep.length < (INT_MAX >> 2)) {
+ replylen = rep.length << 2;
+ pWireSysCounter = Xmalloc (replylen + sizeof(XSyncCounter));
+ /* +1 to leave room for last counter read-ahead */
+ pLastWireSysCounter = (xSyncSystemCounter *)
+ ((char *)pWireSysCounter) + replylen;
+ } else {
+ replylen = 0;
+ pWireSysCounter = NULL;
+ }
if ((!list) || (!pWireSysCounter))
{
- if (list) Xfree((char *) list);
- if (pWireSysCounter) Xfree((char *) pWireSysCounter);
- _XEatData(dpy, (unsigned long) replylen);
+ Xfree(list);
+ Xfree(pWireSysCounter);
+ _XEatDataWords(dpy, rep.length);
list = NULL;
goto bail;
}
@@ -387,6 +398,14 @@ XSyncListSystemCounters(Display *dpy, int *n_counters_return)
pNextWireSysCounter = (xSyncSystemCounter *)
(((char *)pWireSysCounter) + ((SIZEOF(xSyncSystemCounter) +
pWireSysCounter->name_length + 3) & ~3));
+ /* Make sure we haven't gone too far */
+ if (pNextWireSysCounter > pLastWireSysCounter) {
+ Xfree(list);
+ Xfree(pWireSysCounter);
+ list = NULL;
+ goto bail;
+ }
+
counter = pNextWireSysCounter->counter;
list[i].name = ((char *)pWireSysCounter) +
diff --git a/libXext/src/Xcup.c b/libXext/src/Xcup.c
index bb9e90f7e..cdc64c2a3 100644
--- a/libXext/src/Xcup.c
+++ b/libXext/src/Xcup.c
@@ -36,6 +36,8 @@ in this Software without prior written authorization from The Open Group.
#include <X11/extensions/cupproto.h>
#include <X11/extensions/Xext.h>
#include <X11/extensions/extutil.h>
+#include <limits.h>
+#include "eat.h"
static XExtensionInfo _xcup_info_data;
static XExtensionInfo *xcup_info = &_xcup_info_data;
@@ -133,18 +135,22 @@ XcupGetReservedColormapEntries(
req->xcupReqType = X_XcupGetReservedColormapEntries;
req->screen = screen;
if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
- long nbytes;
+ unsigned long nbytes;
xColorItem* rbufp;
- int nentries = rep.length / 3;
+ unsigned int nentries = rep.length / 3;
- nbytes = nentries * SIZEOF (xColorItem);
- if (nentries > TYP_RESERVED_ENTRIES)
- rbufp = (xColorItem*) Xmalloc (nbytes);
- else
- rbufp = rbuf;
+ if (nentries < (INT_MAX / SIZEOF (xColorItem))) {
+ nbytes = nentries * SIZEOF (xColorItem);
+
+ if (nentries > TYP_RESERVED_ENTRIES)
+ rbufp = Xmalloc (nbytes);
+ else
+ rbufp = rbuf;
+ } else
+ rbufp = NULL;
if (rbufp == NULL) {
- _XEatData (dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay (dpy);
SyncHandle ();
return False;
@@ -213,27 +219,24 @@ XcupStoreColors(
}
if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
- long nbytes;
+ unsigned long nbytes;
xColorItem* rbufp;
xColorItem* cs;
- int nentries = rep.length / 3;
-
- nbytes = nentries * SIZEOF (xColorItem);
+ unsigned int nentries = rep.length / 3;
- if (nentries != ncolors) {
- _XEatData (dpy, (unsigned long) nbytes);
- UnlockDisplay (dpy);
- SyncHandle ();
- return False;
- }
+ if ((nentries == ncolors) &&
+ (nentries < (INT_MAX / SIZEOF (xColorItem)))) {
+ nbytes = nentries * SIZEOF (xColorItem);
- if (ncolors > 256)
- rbufp = (xColorItem*) Xmalloc (nbytes);
- else
- rbufp = rbuf;
+ if (ncolors > 256)
+ rbufp = Xmalloc (nbytes);
+ else
+ rbufp = rbuf;
+ } else
+ rbufp = NULL;
if (rbufp == NULL) {
- _XEatData (dpy, (unsigned long) nbytes);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay (dpy);
SyncHandle ();
return False;
diff --git a/libXext/src/Xdbe.c b/libXext/src/Xdbe.c
index 4b5fa186c..016886c58 100644
--- a/libXext/src/Xdbe.c
+++ b/libXext/src/Xdbe.c
@@ -39,6 +39,8 @@
#include <X11/extensions/extutil.h>
#include <X11/extensions/Xdbe.h>
#include <X11/extensions/dbeproto.h>
+#include <limits.h>
+#include "eat.h"
static XExtensionInfo _dbe_info_data;
static XExtensionInfo *dbe_info = &_dbe_info_data;
@@ -352,9 +354,12 @@ XdbeScreenVisualInfo *XdbeGetVisualInfo (
*num_screens = rep.m;
/* allocate list of visual information to be returned */
- if (!(scrVisInfo =
- (XdbeScreenVisualInfo *)Xmalloc(
- (unsigned)(*num_screens * sizeof(XdbeScreenVisualInfo))))) {
+ if ((*num_screens > 0) && (*num_screens < 65536))
+ scrVisInfo = Xmalloc(*num_screens * sizeof(XdbeScreenVisualInfo));
+ else
+ scrVisInfo = NULL;
+ if (scrVisInfo == NULL) {
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay (dpy);
SyncHandle ();
return NULL;
@@ -362,25 +367,27 @@ XdbeScreenVisualInfo *XdbeGetVisualInfo (
for (i = 0; i < *num_screens; i++)
{
- int nbytes;
int j;
- long c;
+ unsigned long c;
- _XRead32 (dpy, &c, sizeof(CARD32));
- scrVisInfo[i].count = c;
+ _XRead32 (dpy, (long *) &c, sizeof(CARD32));
- nbytes = scrVisInfo[i].count * sizeof(XdbeVisualInfo);
+ if (c < 65536) {
+ scrVisInfo[i].count = c;
+ scrVisInfo[i].visinfo = Xmalloc(c * sizeof(XdbeVisualInfo));
+ } else
+ scrVisInfo[i].visinfo = NULL;
/* if we can not allocate the list of visual/depth info
* then free the lists that we already allocate as well
* as the visual info list itself
*/
- if (!(scrVisInfo[i].visinfo = (XdbeVisualInfo *)Xmalloc(
- (unsigned)nbytes))) {
+ if (scrVisInfo[i].visinfo == NULL) {
for (j = 0; j < i; j++) {
Xfree ((char *)scrVisInfo[j].visinfo);
}
Xfree ((char *)scrVisInfo);
+ _XEatDataWords(dpy, rep.length);
UnlockDisplay (dpy);
SyncHandle ();
return NULL;
diff --git a/libXext/src/eat.h b/libXext/src/eat.h
new file mode 100644
index 000000000..239532b6d
--- /dev/null
+++ b/libXext/src/eat.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifndef HAVE__XEATDATAWORDS
+#include <X11/Xmd.h> /* for LONG64 on 64-bit platforms */
+#include <limits.h>
+
+static inline void _XEatDataWords(Display *dpy, unsigned long n)
+{
+# ifndef LONG64
+ if (n >= (ULONG_MAX >> 2))
+ _XIOError(dpy);
+# endif
+ _XEatData (dpy, n << 2);
+}
+#endif
diff --git a/libXinerama/configure.ac b/libXinerama/configure.ac
index e3355083b..17c5cb1fd 100644
--- a/libXinerama/configure.ac
+++ b/libXinerama/configure.ac
@@ -21,7 +21,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libXinerama], [1.1.2],
+AC_INIT([libXinerama], [1.1.3],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXinerama])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
@@ -42,6 +42,12 @@ XORG_CHECK_MALLOC_ZERO
# Obtain compiler/linker options for depedencies
PKG_CHECK_MODULES(XINERAMA, x11 xext xextproto [xineramaproto >= 1.1.99.1])
+# Check for _XEatDataWords function that may be patched into older Xlib releases
+SAVE_LIBS="$LIBS"
+LIBS="$XINERAMA_LIBS"
+AC_CHECK_FUNCS([_XEatDataWords])
+LIBS="$SAVE_LIBS"
+
# Allow checking code with lint, sparse, etc.
XORG_WITH_LINT
LINT_FLAGS="${LINT_FLAGS} ${XINERAMA_CFLAGS}"
diff --git a/libXinerama/src/Xinerama.c b/libXinerama/src/Xinerama.c
index 7d7e4d856..67a35b578 100644
--- a/libXinerama/src/Xinerama.c
+++ b/libXinerama/src/Xinerama.c
@@ -23,6 +23,10 @@ dealings in this Software without prior written authorization from Digital
Equipment Corporation.
******************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <X11/Xlibint.h>
#include <X11/Xutil.h>
#include <X11/extensions/Xext.h>
@@ -31,6 +35,19 @@ Equipment Corporation.
#include <X11/extensions/panoramiXproto.h>
#include <X11/extensions/Xinerama.h>
+#ifndef HAVE__XEATDATAWORDS
+#include <X11/Xmd.h> /* for LONG64 on 64-bit platforms */
+#include <limits.h>
+
+static inline void _XEatDataWords(Display *dpy, unsigned long n)
+{
+# ifndef LONG64
+ if (n >= (ULONG_MAX >> 2))
+ _XIOError(dpy);
+# endif
+ _XEatData (dpy, n << 2);
+}
+#endif
static XExtensionInfo _panoramiX_ext_info_data;
static XExtensionInfo *panoramiX_ext_info = &_panoramiX_ext_info_data;
@@ -286,24 +303,36 @@ XineramaQueryScreens(
return NULL;
}
- if(rep.number) {
- if((scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * rep.number))) {
+ /*
+ * rep.number is a CARD32 so could be as large as 2^32
+ * The X11 protocol limits the total screen size to 64k x 64k,
+ * and no screen can be smaller than a pixel. While technically
+ * that means we could theoretically reach 2^32 screens, and that's
+ * not even taking overlap into account, Xorg is currently limited
+ * to 16 screens, and few known servers have a much higher limit,
+ * so 1024 seems more than enough to prevent both integer overflow
+ * and insane X server responses causing massive memory allocation.
+ */
+ if ((rep.number > 0) && (rep.number <= 1024))
+ scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * rep.number);
+ if (scrnInfo != NULL) {
+ int i;
+
+ for (i = 0; i < rep.number; i++) {
xXineramaScreenInfo scratch;
- int i;
-
- for(i = 0; i < rep.number; i++) {
- _XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo);
- scrnInfo[i].screen_number = i;
- scrnInfo[i].x_org = scratch.x_org;
- scrnInfo[i].y_org = scratch.y_org;
- scrnInfo[i].width = scratch.width;
- scrnInfo[i].height = scratch.height;
- }
-
- *number = rep.number;
- } else
- _XEatData(dpy, rep.length << 2);
+
+ _XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo);
+
+ scrnInfo[i].screen_number = i;
+ scrnInfo[i].x_org = scratch.x_org;
+ scrnInfo[i].y_org = scratch.y_org;
+ scrnInfo[i].width = scratch.width;
+ scrnInfo[i].height = scratch.height;
+ }
+
+ *number = rep.number;
} else {
+ _XEatDataWords(dpy, rep.length);
*number = 0;
}
diff --git a/libfontenc/configure.ac b/libfontenc/configure.ac
index 953a81f86..62a959304 100644
--- a/libfontenc/configure.ac
+++ b/libfontenc/configure.ac
@@ -21,7 +21,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libfontenc], [1.1.1],
+AC_INIT([libfontenc], [1.1.2],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libfontenc])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py
index ec66223f1..942e78a61 100644
--- a/libxcb/src/c_client.py
+++ b/libxcb/src/c_client.py
@@ -687,10 +687,20 @@ def _c_serialize_helper_switch(context, self, complex_name,
switch_expr = _c_accessor_get_expr(self.expr, None)
for b in self.bitcases:
- bitcase_expr = _c_accessor_get_expr(b.type.expr, None)
- code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr))
-# code_lines.append(' printf("switch %s: entering bitcase section %s (mask=%%%%d)...\\n", %s);' %
-# (self.name[-1], b.type.name[-1], bitcase_expr))
+ len_expr = len(b.type.expr)
+ for n, expr in enumerate(b.type.expr):
+ bitcase_expr = _c_accessor_get_expr(expr, None)
+ # only one <enumref> in the <bitcase>
+ if len_expr == 1:
+ code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr))
+ # multiple <enumref> in the <bitcase>
+ elif n == 0: # first
+ code_lines.append(' if((%s & %s) ||' % (switch_expr, bitcase_expr))
+ elif len_expr == (n + 1): # last
+ code_lines.append(' (%s & %s)) {' % (switch_expr, bitcase_expr))
+ else: # between first and last
+ code_lines.append(' (%s & %s) ||' % (switch_expr, bitcase_expr))
+
b_prefix = prefix
if b.type.has_name:
b_prefix = prefix + [(b.c_field_name, '.', b.type)]
diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c
index b8107834c..8a7af920b 100644
--- a/libxcb/src/xcb_in.c
+++ b/libxcb/src/xcb_in.c
@@ -93,8 +93,9 @@ static void remove_finished_readers(reader_list **prev_reader, uint64_t complete
static int read_packet(xcb_connection_t *c)
{
xcb_generic_reply_t genrep;
- int length = 32;
- int eventlength = 0; /* length after first 32 bytes for GenericEvents */
+ uint64_t length = 32;
+ uint64_t eventlength = 0; /* length after first 32 bytes for GenericEvents */
+ uint64_t bufsize;
void *buf;
pending_reply *pend = 0;
struct event_list *event;
@@ -169,8 +170,12 @@ static int read_packet(xcb_connection_t *c)
if ((genrep.response_type & 0x7f) == XCB_XGE_EVENT)
eventlength = genrep.length * 4;
- buf = malloc(length + eventlength +
- (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t)));
+ bufsize = length + eventlength +
+ (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t));
+ if (bufsize < INT32_MAX)
+ buf = malloc((size_t) bufsize);
+ else
+ buf = NULL;
if(!buf)
{
_xcb_conn_shutdown(c, XCB_CONN_CLOSED_MEM_INSUFFICIENT);
diff --git a/libxcb/src/xcb_out.c b/libxcb/src/xcb_out.c
index 405f963de..429fa99d3 100644
--- a/libxcb/src/xcb_out.c
+++ b/libxcb/src/xcb_out.c
@@ -86,21 +86,24 @@ static void send_sync(xcb_connection_t *c)
static void get_socket_back(xcb_connection_t *c)
{
- while(c->out.return_socket && c->out.socket_moving)
- pthread_cond_wait(&c->out.socket_cond, &c->iolock);
- if(!c->out.return_socket)
- return;
-
- c->out.socket_moving = 1;
- pthread_mutex_unlock(&c->iolock);
- c->out.return_socket(c->out.socket_closure);
- pthread_mutex_lock(&c->iolock);
- c->out.socket_moving = 0;
-
- pthread_cond_broadcast(&c->out.socket_cond);
- c->out.return_socket = 0;
- c->out.socket_closure = 0;
- _xcb_in_replies_done(c);
+ while (c->out.return_socket) {
+ /* we are about to release the lock,
+ so make a copy of the current status */
+ xcb_return_socket_func_t return_socket = c->out.return_socket;
+ void *socket_closure = c->out.socket_closure;
+ int socket_seq = c->out.socket_seq;
+
+ pthread_mutex_unlock(&c->iolock);
+ return_socket(socket_closure);
+ pthread_mutex_lock(&c->iolock);
+
+ /* make sure nobody else has acquired the socket */
+ if (socket_seq == c->out.socket_seq) {
+ c->out.return_socket = 0;
+ c->out.socket_closure = 0;
+ _xcb_in_replies_done(c);
+ }
+ }
}
/* Public interface */
@@ -272,12 +275,13 @@ int xcb_take_socket(xcb_connection_t *c, void (*return_socket)(void *closure), v
* write requests, so keep flushing until we're done
*/
do
- ret = _xcb_out_flush_to(c, c->out.request);
+ ret = _xcb_out_flush_to(c, c->out.request);
while (ret && c->out.request != c->out.request_written);
if(ret)
{
c->out.return_socket = return_socket;
c->out.socket_closure = closure;
+ ++c->out.socket_seq;
if(flags)
_xcb_in_expect_reply(c, c->out.request, WORKAROUND_EXTERNAL_SOCKET_OWNER, flags);
assert(c->out.request == c->out.request_written);
@@ -314,11 +318,9 @@ int xcb_flush(xcb_connection_t *c)
int _xcb_out_init(_xcb_out *out)
{
- if(pthread_cond_init(&out->socket_cond, 0))
- return 0;
out->return_socket = 0;
out->socket_closure = 0;
- out->socket_moving = 0;
+ out->socket_seq = 0;
if(pthread_cond_init(&out->cond, 0))
return 0;
diff --git a/libxcb/src/xcbext.h b/libxcb/src/xcbext.h
index 98b3c93c1..4e1f2f73d 100644
--- a/libxcb/src/xcbext.h
+++ b/libxcb/src/xcbext.h
@@ -66,6 +66,7 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
* callback which XCB can call when it wants the write side of the
* socket back to make a request. This callback synchronizes with the
* external socket owner and flushes any output queues if appropriate.
+ * The callback might be called from different threads at the same time.
* If you are sending requests which won't cause a reply, please note the
* comment for xcb_writev which explains some sequence number wrap issues.
* */
diff --git a/libxcb/src/xcbint.h b/libxcb/src/xcbint.h
index f9e5a52f7..7f9ab2838 100644
--- a/libxcb/src/xcbint.h
+++ b/libxcb/src/xcbint.h
@@ -79,14 +79,15 @@ void *_xcb_map_remove(_xcb_map *q, unsigned int key);
/* xcb_out.c */
+typedef void (*xcb_return_socket_func_t)(void *closure);
+
typedef struct _xcb_out {
pthread_cond_t cond;
int writing;
- pthread_cond_t socket_cond;
- void (*return_socket)(void *closure);
+ xcb_return_socket_func_t return_socket;
void *socket_closure;
- int socket_moving;
+ unsigned int socket_seq;
char queue[XCB_QUEUE_BUFFER_SIZE];
int queue_len;
diff --git a/libxcb/xcb-proto/doc/xml-xcb.txt b/libxcb/xcb-proto/doc/xml-xcb.txt
index 705772736..cf6d14e46 100644
--- a/libxcb/xcb-proto/doc/xml-xcb.txt
+++ b/libxcb/xcb-proto/doc/xml-xcb.txt
@@ -229,13 +229,18 @@ enum; the value is restricted to one of the constants named in the enum.
<switch> instead for new protocol definitions.
<switch name="identifier"> switch expression
- <bitcase> bitcase expression, fields </bitcase> </switch>
+ <bitcase> bitcase expression(s), fields </bitcase> </switch>
This element represents conditional inclusion of fields. It can be viewed
as sequence of multiple ifs: if ( switch expression & bitcase expression )
- is equal to bitcase expression, bitcase fields are included in structure.
- It can be used only as the last field of structure. New protocol definitions
- should prefer to use this instead of <valueparam>.
+ is non-zero, bitcase fields are included in structure. It can be used only
+ as the last field of a structure.
+
+ When a bitcase includes multiple <enumref> clauses, the contents of the
+ bitcase are only present once regardless of the number of bitcase expressions
+ that match.
+
+ New protocol definitions should prefer to use this instead of <valueparam>.
Expressions
-----------
diff --git a/libxcb/xcb-proto/src/res.xml b/libxcb/xcb-proto/src/res.xml
index d758d893b..1dd3bd196 100644
--- a/libxcb/xcb-proto/src/res.xml
+++ b/libxcb/xcb-proto/src/res.xml
@@ -26,9 +26,10 @@ sale, use or other dealings in this Software without prior written
authorization from the authors.
-->
<xcb header="res" extension-xname="X-Resource" extension-name="Res"
- major-version="1" minor-version="0">
+ major-version="1" minor-version="2">
<import>xproto</import>
+ <!-- v1.0 -->
<struct name="Client">
<field type="CARD32" name="resource_base" />
<field type="CARD32" name="resource_mask" />
@@ -39,6 +40,41 @@ authorization from the authors.
<field type="CARD32" name="count" />
</struct>
+ <!-- v1.2 -->
+ <struct name="ClientIdSpec">
+ <field type="CARD32" name="client" />
+ <field type="CARD32" name="mask" />
+ </struct>
+
+ <struct name="ClientIdValue">
+ <field type="ClientIdSpec" name="spec" />
+ <field type="CARD32" name="length" />
+ <list type="CARD8" name="client_ids">
+ <fieldref>length</fieldref>
+ </list>
+ </struct>
+
+ <struct name="ResourceIdSpec">
+ <field type="CARD32" name="resource" />
+ <field type="CARD32" name="type" />
+ </struct>
+
+ <struct name="ResourceSizeSpec">
+ <field type="ResourceIdSpec" name="spec" />
+ <field type="CARD32" name="bytes" />
+ <field type="CARD32" name="ref_count" />
+ <field type="CARD32" name="use_count" />
+ </struct>
+
+ <struct name="ResourceSizeValue">
+ <field type="ResourceSizeSpec" name="size" />
+ <field type="CARD32" name="num_cross_references" />
+ <list type="ResourceSizeSpec" name="cross_references">
+ <fieldref>num_cross_references</fieldref>
+ </list>
+ </struct>
+
+ <!-- v1.0 -->
<request name="QueryVersion" opcode="0">
<field type="CARD8" name="client_major" />
<field type="CARD8" name="client_minor" />
@@ -80,4 +116,36 @@ authorization from the authors.
<field type="CARD32" name="bytes_overflow" />
</reply>
</request>
+
+ <!-- v1.2 -->
+ <request name="QueryClientIds" opcode="4">
+ <field type="CARD32" name="num_specs" />
+ <list type="ClientIdSpec" name="specs">
+ <fieldref>num_specs</fieldref>
+ </list>
+ <reply>
+ <pad bytes="1" />
+ <field type="CARD32" name="num_ids" />
+ <pad bytes="20" />
+ <list type="ClientIdValue" name="ids">
+ <fieldref>num_ids</fieldref>
+ </list>
+ </reply>
+ </request>
+
+ <request name="QueryResourceBytes" opcode="5">
+ <field type="CARD32" name="client" />
+ <field type="CARD32" name="num_specs" />
+ <list type="ResourceIdSpec" name="specs">
+ <fieldref>num_specs</fieldref>
+ </list>
+ <reply>
+ <pad bytes="1" />
+ <field type="CARD32" name="num_sizes" />
+ <pad bytes="20" />
+ <list type="ResourceSizeValue" name="sizes">
+ <fieldref>num_sizes</fieldref>
+ </list>
+ </reply>
+ </request>
</xcb>
diff --git a/libxcb/xcb-proto/src/screensaver.xml b/libxcb/xcb-proto/src/screensaver.xml
index 9c7bccb08..7449c0a0b 100644
--- a/libxcb/xcb-proto/src/screensaver.xml
+++ b/libxcb/xcb-proto/src/screensaver.xml
@@ -75,14 +75,14 @@ Draft Standard Version 1.1
<field type="CARD32" name="ms_until_server"/>
<field type="CARD32" name="ms_since_user_input"/>
<field type="CARD32" name="event_mask" />
- <field type="BYTE" name="kind"/> <!-- enum Kind -->
+ <field type="BYTE" name="kind" enum="Kind"/>
<pad bytes="7"/>
</reply>
</request>
<request name="SelectInput" opcode="2">
<field type="DRAWABLE" name="drawable"/>
- <field type="CARD32" name="event_mask" /> <!-- enum Event -->
+ <field type="CARD32" name="event_mask" mask="Event"/>
</request>
<request name="SetAttributes" opcode="3">
@@ -92,7 +92,7 @@ Draft Standard Version 1.1
<field type="CARD16" name="width"/>
<field type="CARD16" name="height"/>
<field type="CARD16" name="border_width"/>
- <field type="BYTE" name="class"/> <!-- enum XCBWindowClass -->
+ <field type="BYTE" name="class" enum="WindowClass"/>
<field type="CARD8" name="depth"/>
<field type="VISUALID" name="visual"/>
<valueparam value-mask-type="CARD32"
@@ -113,14 +113,11 @@ Draft Standard Version 1.1
<!-- Events -->
<event name="Notify" number="0">
- <field type="CARD8" name="code"/>
- <field type="BYTE" name="state"/> <!-- enum State -->
- <pad bytes="1" />
- <field type="CARD16" name="sequence_number"/>
+ <field type="BYTE" name="state" enum="State"/>
<field type="TIMESTAMP" name="time"/>
<field type="WINDOW" name="root"/>
<field type="WINDOW" name="window"/>
- <field type="BYTE" name="kind"/> <!-- enum Kind -->
+ <field type="BYTE" name="kind" enum="Kind"/>
<field type="BOOL" name="forced"/>
<pad bytes="14"/>
</event>
diff --git a/libxcb/xcb-proto/src/xcb.xsd b/libxcb/xcb-proto/src/xcb.xsd
index cfa90c9c2..4ef269e10 100644
--- a/libxcb/xcb-proto/src/xcb.xsd
+++ b/libxcb/xcb-proto/src/xcb.xsd
@@ -59,7 +59,7 @@ authorization from the authors.
<xsd:complexType name="caseexpr">
<xsd:sequence>
<!-- case expression: -->
- <xsd:group ref="expression" minOccurs="1" maxOccurs="1" />
+ <xsd:group ref="expression" minOccurs="1" maxOccurs="unbounded" />
<!-- match -->
<xsd:group ref="fields" minOccurs="1" maxOccurs="unbounded" />
<xsd:choice>
diff --git a/libxcb/xcb-proto/src/xkb.xml b/libxcb/xcb-proto/src/xkb.xml
index a6ef37490..0e263c4fb 100644
--- a/libxcb/xcb-proto/src/xkb.xml
+++ b/libxcb/xcb-proto/src/xkb.xml
@@ -268,7 +268,7 @@ authorization from the authors.
<item name="KeyType1"> <bit>0</bit> </item>
</enum>
- <enum name="SymInterpret">
+ <enum name="SymInterpretMatch">
<item name="NoneOf"> <value>0</value> </item>
<item name="AnyOfOrNone"> <value>1</value> </item>
<item name="AnyOf"> <value>2</value> </item>
@@ -311,7 +311,7 @@ authorization from the authors.
<field name="mods" type="CARD8" mask="ModMask" />
<field name="realMods" type="CARD8" mask="ModMask" />
<field name="vmods" type="CARD16" mask="VMod" />
- <field name="ctrls" type="CARD32" enum="BoolCtrl" />
+ <field name="ctrls" type="CARD32" mask="BoolCtrl" />
</struct>
<enum name="CMDetail">
@@ -370,33 +370,42 @@ authorization from the authors.
</struct>
<struct name="KeyName">
- <list name="name" type="CARD8">
+ <list name="name" type="char">
<value>4</value>
</list>
</struct>
<struct name="KeyAlias">
- <list name="real" type="CARD8">
+ <list name="real" type="char">
<value>4</value>
</list>
- <list name="alias" type="CARD8">
+ <list name="alias" type="char">
<value>4</value>
</list>
</struct>
- <struct name="CountedString8">
- <field name="length" type="CARD8" />
- <list name="string" type="CARD8">
- <fieldref>length</fieldref>
- </list>
- </struct>
-
<struct name="CountedString16">
<field name="length" type="CARD16" />
- <list name="string" type="CARD8">
+ <list name="string" type="char">
<fieldref>length</fieldref>
</list>
- <pad bytes="1" />
+ <list type="void" name="alignment_pad">
+ <op op="-">
+ <op op="&amp;">
+ <op op="+">
+ <fieldref>length</fieldref>
+ <value>5</value>
+ </op>
+ <unop op="~">
+ <value>3</value>
+ </unop>
+ </op>
+ <op op="+">
+ <fieldref>length</fieldref>
+ <value>2</value>
+ </op>
+ </op>
+ </list>
</struct>
<struct name="KTMapEntry">
@@ -1020,6 +1029,23 @@ authorization from the authors.
<field name="val2value" type="CARD8" />
</struct>
+ <struct name="SIAction">
+ <field name="type" type="CARD8" enum="SAType" />
+ <list name="data" type="CARD8">
+ <value>7</value>
+ </list>
+ </struct>
+
+ <struct name="SymInterpret">
+ <field name="sym" type="KEYSYM" />
+ <field name="mods" type="CARD8" mask="ModMask" />
+ <!-- "match" may also have XkbSI_LevelOneOnly (0x80) or'd into it -->
+ <field name="match" type="CARD8" altenum="SymInterpretMatch" />
+ <field name="virtualMod" type="CARD8" mask="VModsLow" />
+ <field name="flags" type="CARD8" />
+ <field name="action" type="SIAction" />
+ </struct>
+
<union name="Action">
<field name="noaction" type="SANoAction" />
<field name="setmods" type="SASetMods" />
@@ -1060,11 +1086,11 @@ authorization from the authors.
<request name="SelectEvents" opcode="1">
<field name="deviceSpec" type="DeviceSpec" />
- <field name="affectWhich" type="CARD16" enum="EventType" />
- <field name="clear" type="CARD16" enum="EventType" />
- <field name="selectAll" type="CARD16" enum="EventType" />
- <field name="affectMap" type="CARD16" enum="MapPart" />
- <field name="map" type="CARD16" enum="MapPart" />
+ <field name="affectWhich" type="CARD16" mask="EventType" />
+ <field name="clear" type="CARD16" mask="EventType" />
+ <field name="selectAll" type="CARD16" mask="EventType" />
+ <field name="affectMap" type="CARD16" mask="MapPart" />
+ <field name="map" type="CARD16" mask="MapPart" />
<switch name="details">
<op op="&amp;">
<fieldref>affectWhich</fieldref>
@@ -1211,9 +1237,9 @@ authorization from the authors.
<field name="accessXTimeoutOptionsMask" type="AXOption" />
<field name="accessXTimeoutOptionsValues" type="AXOption" />
<pad bytes="2" />
- <field name="accessXTimeoutMask" type="CARD32" enum="BoolCtrl" />
- <field name="accessXTimeoutValues" type="CARD32" enum="BoolCtrl" />
- <field name="enabledControls" type="CARD32" enum="BoolCtrl" />
+ <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" />
+ <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" />
+ <field name="enabledControls" type="CARD32" mask="BoolCtrl" />
<list name="perKeyRepeat" type="CARD8">
<value>32</value>
</list>
@@ -1234,8 +1260,8 @@ authorization from the authors.
<field name="groupsWrap" type="CARD8" />
<field name="accessXOptions" type="AXOption" />
<pad bytes="2" />
- <field name="affectEnabledControls" type="CARD32" enum="BoolCtrl" />
- <field name="enabledControls" type="CARD32" enum="BoolCtrl" />
+ <field name="affectEnabledControls" type="CARD32" mask="BoolCtrl" />
+ <field name="enabledControls" type="CARD32" mask="BoolCtrl" />
<field name="changeControls" type="CARD32" mask="Control" />
<field name="repeatDelay" type="CARD16" />
<field name="repeatInterval" type="CARD16" />
@@ -1247,8 +1273,8 @@ authorization from the authors.
<field name="mouseKeysMaxSpeed" type="CARD16" />
<field name="mouseKeysCurve" type="INT16" />
<field name="accessXTimeout" type="CARD16" />
- <field name="accessXTimeoutMask" type="CARD32" enum="BoolCtrl" />
- <field name="accessXTimeoutValues" type="CARD32" enum="BoolCtrl" />
+ <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" />
+ <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" />
<field name="accessXTimeoutOptionsMask" type="AXOption" />
<field name="accessXTimeoutOptionsValues" type="AXOption" />
<list name="perKeyRepeat" type="CARD8">
@@ -1258,8 +1284,8 @@ authorization from the authors.
<request name="GetMap" opcode="8">
<field name="deviceSpec" type="DeviceSpec" />
- <field name="full" type="CARD16" enum="MapPart" />
- <field name="partial" type="CARD16" enum="MapPart" />
+ <field name="full" type="CARD16" mask="MapPart" />
+ <field name="partial" type="CARD16" mask="MapPart" />
<field name="firstType" type="CARD8" />
<field name="nTypes" type="CARD8" />
<field name="firstKeySym" type="KEYCODE" />
@@ -1281,7 +1307,7 @@ authorization from the authors.
<pad bytes="2" />
<field name="minKeyCode" type="KEYCODE" />
<field name="maxKeyCode" type="KEYCODE" />
- <field name="present" type="CARD16" enum="MapPart" />
+ <field name="present" type="CARD16" mask="MapPart" />
<field name="firstType" type="CARD8" />
<field name="nTypes" type="CARD8" />
<field name="totalTypes" type="CARD8" />
@@ -1337,7 +1363,7 @@ authorization from the authors.
<bitcase>
<enumref ref="MapPart">VirtualMods</enumref>
<list name="vmods_rtrn" type="CARD8" mask="ModMask">
- <fieldref>nVModMapKeys</fieldref>
+ <popcount><fieldref>virtualMods</fieldref></popcount>
</list>
</bitcase>
<bitcase>
@@ -1364,7 +1390,7 @@ authorization from the authors.
<request name="SetMap" opcode="9">
<field name="deviceSpec" type="DeviceSpec" />
- <field name="present" type="CARD16" enum="MapPart" />
+ <field name="present" type="CARD16" mask="MapPart" />
<field name="flags" type="CARD16" mask="SetMapFlags" />
<field name="minKeyCode" type="KEYCODE" />
<field name="maxKeyCode" type="KEYCODE" />
@@ -1421,7 +1447,7 @@ authorization from the authors.
<bitcase>
<enumref ref="MapPart">VirtualMods</enumref>
<list name="vmods" type="CARD8">
- <fieldref>nVModMapKeys</fieldref>
+ <popcount><fieldref>virtualMods</fieldref></popcount>
</list>
</bitcase>
<bitcase>
@@ -1459,11 +1485,8 @@ authorization from the authors.
<field name="nSIRtrn" type="CARD16" />
<field name="nTotalSI" type="CARD16" />
<pad bytes="16" />
- <list name="si_rtrn" type="CARD8" mask="SymInterpret">
- <op op="*">
- <value>16</value>
- <fieldref>nSIRtrn</fieldref>
- </op>
+ <list name="si_rtrn" type="SymInterpret">
+ <fieldref>nSIRtrn</fieldref>
</list>
<list name="group_rtrn" type="ModDef">
<popcount>
@@ -1482,11 +1505,8 @@ authorization from the authors.
<field name="firstSI" type="CARD16" />
<field name="nSI" type="CARD16" />
<pad bytes="2"/>
- <list name="si" type="CARD8" mask="SymInterpret">
- <op op="*">
- <value>16</value>
- <fieldref>nSI</fieldref>
- </op>
+ <list name="si" type="SymInterpret">
+ <fieldref>nSI</fieldref>
</list>
<list name="groupMaps" type="ModDef">
<popcount>
@@ -1516,7 +1536,7 @@ authorization from the authors.
<field name="nIndicators" type="CARD8" />
<pad bytes="15" />
<list name="maps" type="IndicatorMap">
- <fieldref>nIndicators</fieldref>
+ <popcount><fieldref>which</fieldref></popcount>
</list>
</reply>
</request>
@@ -1984,6 +2004,8 @@ authorization from the authors.
<fieldref>reported</fieldref>
<bitcase name="types">
<enumref ref="GBNDetail">Types</enumref>
+ <enumref ref="GBNDetail">ClientSymbols</enumref>
+ <enumref ref="GBNDetail">ServerSymbols</enumref>
<!-- from the spec, this has to be a GetMap reply -->
<field name="getmap_type" type="CARD8" />
<!-- done 'emulating' GetMap reply header-->
@@ -1995,7 +2017,7 @@ authorization from the authors.
<pad bytes="2" />
<field name="typeMinKeyCode" type="KEYCODE" />
<field name="typeMaxKeyCode" type="KEYCODE" />
- <field name="present" type="CARD16" enum="MapPart" />
+ <field name="present" type="CARD16" mask="MapPart" />
<field name="firstType" type="CARD8" />
<field name="nTypes" type="CARD8" />
<field name="totalTypes" type="CARD8" />
@@ -2051,7 +2073,7 @@ authorization from the authors.
<bitcase>
<enumref ref="MapPart">VirtualMods</enumref>
<list name="vmods_rtrn" type="CARD8" mask="ModMask">
- <fieldref>nVModMapKeys</fieldref>
+ <popcount><fieldref>virtualMods</fieldref></popcount>
</list>
</bitcase>
<bitcase>
@@ -2076,18 +2098,20 @@ authorization from the authors.
</bitcase>
<bitcase name="compat_map">
<enumref ref="GBNDetail">CompatMap</enumref>
+ <!-- from the spec, this has to include a reply header -->
+ <field name="compatmap_type" type="CARD8" />
<field name="compatDeviceID" type="CARD8" />
+ <field name="compatmap_sequence" type="CARD16" />
+ <field name="compatmap_length" type="CARD32" />
+ <!-- done 'emulating' reply header -->
<field name="groupsRtrn" type="CARD8" mask="SetOfGroup" />
<pad bytes="1" />
<field name="firstSIRtrn" type="CARD16" />
<field name="nSIRtrn" type="CARD16" />
<field name="nTotalSI" type="CARD16" />
<pad bytes="16" />
- <list name="si_rtrn" type="CARD8" mask="SymInterpret">
- <op op="*">
- <value>16</value>
- <fieldref>nSIRtrn</fieldref>
- </op>
+ <list name="si_rtrn" type="SymInterpret">
+ <fieldref>nSIRtrn</fieldref>
</list>
<list name="group_rtrn" type="ModDef">
<popcount>
@@ -2095,179 +2119,14 @@ authorization from the authors.
</popcount>
</list>
</bitcase>
- <bitcase name="client_symbols">
- <enumref ref="GBNDetail">ClientSymbols</enumref>
- <field name="clientDeviceID" type="CARD8" />
- <pad bytes="2" />
- <field name="clientMinKeyCode" type="KEYCODE" />
- <field name="clientMaxKeyCode" type="KEYCODE" />
- <field name="present" type="CARD16" enum="MapPart" />
- <field name="firstType" type="CARD8" />
- <field name="nTypes" type="CARD8" />
- <field name="totalTypes" type="CARD8" />
- <field name="firstKeySym" type="KEYCODE" />
- <field name="totalSyms" type="CARD16" />
- <field name="nKeySyms" type="CARD8" />
- <field name="firstKeyAction" type="KEYCODE" />
- <field name="totalActions" type="CARD16" />
- <field name="nKeyActions" type="CARD8" />
- <field name="firstKeyBehavior" type="KEYCODE" />
- <field name="nKeyBehaviors" type="CARD8" />
- <field name="totalKeyBehaviors" type="CARD8" />
- <field name="firstKeyExplicit" type="KEYCODE" />
- <field name="nKeyExplicit" type="CARD8" />
- <field name="totalKeyExplicit" type="CARD8" />
- <field name="firstModMapKey" type="KEYCODE" />
- <field name="nModMapKeys" type="CARD8" />
- <field name="totalModMapKeys" type="CARD8" />
- <field name="firstVModMapKey" type="KEYCODE" />
- <field name="nVModMapKeys" type="CARD8" />
- <field name="totalVModMapKeys" type="CARD8" />
- <pad bytes="1" />
- <field name="virtualMods" type="CARD16" mask="VMod" />
- <switch name="map">
- <fieldref>present</fieldref>
- <bitcase>
- <enumref ref="MapPart">KeyTypes</enumref>
- <list name="types_rtrn" type="KeyType">
- <fieldref>nTypes</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeySyms</enumref>
- <list name="syms_rtrn" type="KeySymMap">
- <fieldref>nKeySyms</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeyActions</enumref>
- <list name="acts_rtrn_count" type="CARD8">
- <fieldref>nKeyActions</fieldref>
- </list>
- <list name="acts_rtrn_acts" type="Action">
- <fieldref>totalActions</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeyBehaviors</enumref>
- <list name="behaviors_rtrn" type="SetBehavior">
- <fieldref>totalKeyBehaviors</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">VirtualMods</enumref>
- <list name="vmods_rtrn" type="CARD8" mask="ModMask">
- <fieldref>nVModMapKeys</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">ExplicitComponents</enumref>
- <list name="explicit_rtrn" type="SetExplicit">
- <fieldref>totalKeyExplicit</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">ModifierMap</enumref>
- <list name="modmap_rtrn" type="KeyModMap">
- <fieldref>totalModMapKeys</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">VirtualModMap</enumref>
- <list name="vmodmap_rtrn" type="KeyVModMap">
- <fieldref>totalVModMapKeys</fieldref>
- </list>
- </bitcase>
- </switch>
- </bitcase>
- <bitcase name="server_symbols">
- <enumref ref="GBNDetail">ServerSymbols</enumref>
- <field name="serverDeviceID" type="CARD8" />
- <pad bytes="2" />
- <field name="serverMinKeyCode" type="KEYCODE" />
- <field name="serverMaxKeyCode" type="KEYCODE" />
- <field name="present" type="CARD16" enum="MapPart" />
- <field name="firstType" type="CARD8" />
- <field name="nTypes" type="CARD8" />
- <field name="totalTypes" type="CARD8" />
- <field name="firstKeySym" type="KEYCODE" />
- <field name="totalSyms" type="CARD16" />
- <field name="nKeySyms" type="CARD8" />
- <field name="firstKeyAction" type="KEYCODE" />
- <field name="totalActions" type="CARD16" />
- <field name="nKeyActions" type="CARD8" />
- <field name="firstKeyBehavior" type="KEYCODE" />
- <field name="nKeyBehaviors" type="CARD8" />
- <field name="totalKeyBehaviors" type="CARD8" />
- <field name="firstKeyExplicit" type="KEYCODE" />
- <field name="nKeyExplicit" type="CARD8" />
- <field name="totalKeyExplicit" type="CARD8" />
- <field name="firstModMapKey" type="KEYCODE" />
- <field name="nModMapKeys" type="CARD8" />
- <field name="totalModMapKeys" type="CARD8" />
- <field name="firstVModMapKey" type="KEYCODE" />
- <field name="nVModMapKeys" type="CARD8" />
- <field name="totalVModMapKeys" type="CARD8" />
- <pad bytes="1" />
- <field name="virtualMods" type="CARD16" mask="VMod" />
- <switch name="map">
- <fieldref>present</fieldref>
- <bitcase>
- <enumref ref="MapPart">KeyTypes</enumref>
- <list name="types_rtrn" type="KeyType">
- <fieldref>nTypes</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeySyms</enumref>
- <list name="syms_rtrn" type="KeySymMap">
- <fieldref>nKeySyms</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeyActions</enumref>
- <list name="acts_rtrn_count" type="CARD8">
- <fieldref>nKeyActions</fieldref>
- </list>
- <list name="acts_rtrn_acts" type="Action">
- <fieldref>totalActions</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">KeyBehaviors</enumref>
- <list name="behaviors_rtrn" type="SetBehavior">
- <fieldref>totalKeyBehaviors</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">VirtualMods</enumref>
- <list name="vmods_rtrn" type="CARD8" mask="ModMask">
- <fieldref>nVModMapKeys</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">ExplicitComponents</enumref>
- <list name="explicit_rtrn" type="SetExplicit">
- <fieldref>totalKeyExplicit</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">ModifierMap</enumref>
- <list name="modmap_rtrn" type="KeyModMap">
- <fieldref>totalModMapKeys</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="MapPart">VirtualModMap</enumref>
- <list name="vmodmap_rtrn" type="KeyVModMap">
- <fieldref>totalVModMapKeys</fieldref>
- </list>
- </bitcase>
- </switch>
- </bitcase>
<bitcase name="indicator_maps">
<enumref ref="GBNDetail">IndicatorMaps</enumref>
+ <!-- from the spec, this has to include a reply header -->
+ <field name="indicatormap_type" type="CARD8" />
<field name="indicatorDeviceID" type="CARD8" />
+ <field name="indicatormap_sequence" type="CARD16" />
+ <field name="indicatormap_length" type="CARD32" />
+ <!-- done 'emulating' reply header -->
<field name="which" type="CARD32" />
<field name="realIndicators" type="CARD32" />
<field name="nIndicators" type="CARD8" />
@@ -2278,7 +2137,13 @@ authorization from the authors.
</bitcase>
<bitcase name="key_names">
<enumref ref="GBNDetail">KeyNames</enumref>
+ <enumref ref="GBNDetail">OtherNames</enumref>
+ <!-- from the spec, this has to include a reply header -->
+ <field name="keyname_type" type="CARD8" />
<field name="keyDeviceID" type="CARD8" />
+ <field name="keyname_sequence" type="CARD16" />
+ <field name="keyname_length" type="CARD32" />
+ <!-- done 'emulating' reply header -->
<field name="which" type="CARD32" mask="NameDetail" />
<field name="keyMinKeyCode" type="KEYCODE" />
<field name="keyMaxKeyCode" type="KEYCODE" />
@@ -2377,110 +2242,14 @@ authorization from the authors.
</bitcase>
</switch>
</bitcase>
- <bitcase name="other_names">
- <enumref ref="GBNDetail">OtherNames</enumref>
- <field name="otherDeviceID" type="CARD8" />
- <field name="which" type="CARD32" mask="NameDetail" />
- <field name="otherMinKeyCode" type="KEYCODE" />
- <field name="otherMaxKeyCode" type="KEYCODE" />
- <field name="nTypes" type="CARD8" />
- <field name="groupNames" type="CARD8" mask="SetOfGroup" />
- <field name="virtualMods" type="CARD16" mask="VMod" />
- <field name="firstKey" type="KEYCODE" />
- <field name="nKeys" type="CARD8" />
- <field name="indicators" type="CARD32" />
- <field name="nRadioGroups" type="CARD8" />
- <field name="nKeyAliases" type="CARD8" />
- <field name="nKTLevels" type="CARD16" />
- <pad bytes="4" />
- <switch name="valueList">
- <fieldref>which</fieldref>
- <bitcase>
- <enumref ref="NameDetail">Keycodes</enumref>
- <field name="keycodesName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">Geometry</enumref>
- <field name="geometryName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">Symbols</enumref>
- <field name="symbolsName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">PhysSymbols</enumref>
- <field name="physSymbolsName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">Types</enumref>
- <field name="typesName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">Compat</enumref>
- <field name="compatName" type="ATOM" />
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">KeyTypeNames</enumref>
- <list name="typeNames" type="ATOM">
- <fieldref>nTypes</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">KTLevelNames</enumref>
- <list name="nLevelsPerType" type="CARD8">
- <fieldref>nKTLevels</fieldref>
- </list>
- <list name="ktLevelNames" type="ATOM">
- <sumof ref="nLevelsPerType" />
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">IndicatorNames</enumref>
- <list name="indicatorNames" type="ATOM">
- <popcount>
- <fieldref>indicators</fieldref>
- </popcount>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">VirtualModNames</enumref>
- <list name="virtualModNames" type="ATOM">
- <popcount>
- <fieldref>virtualMods</fieldref>
- </popcount>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">GroupNames</enumref>
- <list name="groups" type="ATOM">
- <popcount>
- <fieldref>groupNames</fieldref>
- </popcount>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">KeyNames</enumref>
- <list name="keyNames" type="KeyName">
- <fieldref>nKeys</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">KeyAliases</enumref>
- <list name="keyAliases" type="KeyAlias">
- <fieldref>nKeyAliases</fieldref>
- </list>
- </bitcase>
- <bitcase>
- <enumref ref="NameDetail">RGNames</enumref>
- <list name="radioGroupNames" type="ATOM">
- <fieldref>nRadioGroups</fieldref>
- </list>
- </bitcase>
- </switch>
- </bitcase>
<bitcase name="geometry">
<enumref ref="GBNDetail">Geometry</enumref>
+ <!-- from the spec, this has to include a reply header -->
+ <field name="geometry_type" type="CARD8" />
<field name="geometryDeviceID" type="CARD8" />
+ <field name="geometry_sequence" type="CARD16" />
+ <field name="geometry_length" type="CARD32" />
+ <!-- done 'emulating' reply header -->
<field name="name" type="ATOM" />
<field name="geometryFound" type="BOOL" />
<pad bytes="1" />
@@ -2593,9 +2362,8 @@ authorization from the authors.
<!-- Events -->
- <event name="NewKeyboardNotify" number="0" no-sequence-number="true">
+ <event name="NewKeyboardNotify" number="0">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="oldDeviceID" type="CARD8" />
@@ -2609,9 +2377,8 @@ authorization from the authors.
<pad bytes="14" />
</event>
- <event name="MapNotify" number="1" no-sequence-number="true">
+ <event name="MapNotify" number="1">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="ptrBtnActions" type="CARD8" />
@@ -2636,9 +2403,8 @@ authorization from the authors.
<pad bytes="2" />
</event>
- <event name="StateNotify" number="2" no-sequence-number="true">
+ <event name="StateNotify" number="2">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="mods" type="CARD8" mask="ModMask" />
@@ -2662,9 +2428,8 @@ authorization from the authors.
<field name="requestMinor" type="CARD8" />
</event>
- <event name="ControlsNotify" number="3" no-sequence-number="true">
+ <event name="ControlsNotify" number="3">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="numGroups" type="CARD8" />
@@ -2679,9 +2444,8 @@ authorization from the authors.
<pad bytes="4" />
</event>
- <event name="IndicatorStateNotify" number="4" no-sequence-number="true">
+ <event name="IndicatorStateNotify" number="4">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<pad bytes="3" />
@@ -2690,9 +2454,8 @@ authorization from the authors.
<pad bytes="12" />
</event>
- <event name="IndicatorMapNotify" number="5" no-sequence-number="true">
+ <event name="IndicatorMapNotify" number="5">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<pad bytes="3" />
@@ -2701,9 +2464,8 @@ authorization from the authors.
<pad bytes="12" />
</event>
- <event name="NamesNotify" number="6" no-sequence-number="true">
+ <event name="NamesNotify" number="6">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<pad bytes="1" />
@@ -2723,9 +2485,8 @@ authorization from the authors.
<pad bytes="4" />
</event>
- <event name="CompatMapNotify" number="7" no-sequence-number="true">
+ <event name="CompatMapNotify" number="7">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="changedGroups" type="CARD8" mask="SetOfGroup" />
@@ -2735,9 +2496,8 @@ authorization from the authors.
<pad bytes="16" />
</event>
- <event name="BellNotify" number="8" no-sequence-number="true">
+ <event name="BellNotify" number="8">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="bellClass" type="CARD8" enum="BellClassResult" />
@@ -2751,9 +2511,8 @@ authorization from the authors.
<pad bytes="7" />
</event>
- <event name="ActionMessage" number="9" no-sequence-number="true">
+ <event name="ActionMessage" number="9">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="keycode" type="KEYCODE" />
@@ -2767,9 +2526,8 @@ authorization from the authors.
<pad bytes="10" />
</event>
- <event name="AccessXNotify" number="10" no-sequence-number="true">
+ <event name="AccessXNotify" number="10">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<field name="keycode" type="KEYCODE" />
@@ -2779,9 +2537,8 @@ authorization from the authors.
<pad bytes="16" />
</event>
- <event name="ExtensionDeviceNotify" number="11" no-sequence-number="true">
+ <event name="ExtensionDeviceNotify" number="11">
<field name="xkbType" type="CARD8" />
- <field name="sequence" type="CARD16" />
<field name="time" type="TIMESTAMP" />
<field name="deviceID" type="CARD8" />
<pad bytes="1" />
diff --git a/libxcb/xcb-proto/xcbgen/xtypes.py b/libxcb/xcb-proto/xcbgen/xtypes.py
index f6d463445..5469cd961 100644
--- a/libxcb/xcb-proto/xcbgen/xtypes.py
+++ b/libxcb/xcb-proto/xcbgen/xtypes.py
@@ -481,8 +481,14 @@ class BitcaseType(ComplexType):
'''
def __init__(self, index, name, elt, *parent):
elts = list(elt)
- self.expr = Expression(elts[0] if len(elts) else elt, self)
- ComplexType.__init__(self, name, elts[1:])
+ self.expr = []
+ fields = []
+ for elt in elts:
+ if elt.tag == 'enumref':
+ self.expr.append(Expression(elt, self))
+ else:
+ fields.append(elt)
+ ComplexType.__init__(self, name, fields)
self.has_name = True
self.index = 1
self.lenfield_parent = list(parent) + [self]
@@ -510,8 +516,9 @@ class BitcaseType(ComplexType):
def resolve(self, module):
if self.resolved:
return
-
- self.expr.resolve(module, self.parents+[self])
+
+ for e in self.expr:
+ e.resolve(module, self.parents+[self])
# Resolve the bitcase expression
ComplexType.resolve(self, module)
@@ -593,8 +600,7 @@ class Event(ComplexType):
ComplexType.__init__(self, name, elt)
self.opcodes = {}
- tmp = elt.get('no-sequence-number')
- self.has_seq = (tmp == None or tmp.lower() == 'false' or tmp == '0')
+ self.has_seq = not bool(elt.get('no-sequence-number'))
self.doc = None
for item in list(elt):
diff --git a/mesalib/Android.mk b/mesalib/Android.mk
index 80c0e1395..c3c1f08f0 100644
--- a/mesalib/Android.mk
+++ b/mesalib/Android.mk
@@ -24,7 +24,7 @@
# BOARD_GPU_DRIVERS should be defined. The valid values are
#
# classic drivers: i915 i965
-# gallium drivers: swrast i915g nouveau r300g r600g radeonsi vmwgfx
+# gallium drivers: swrast i915g ilo nouveau r300g r600g radeonsi vmwgfx
#
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
# module will also be built. DRI modules will be loaded by libGLES_mesa.
@@ -42,7 +42,7 @@ DRM_TOP := external/drm
DRM_GRALLOC_TOP := hardware/drm_gralloc
classic_drivers := i915 i965
-gallium_drivers := swrast i915g nouveau r300g r600g radeonsi vmwgfx
+gallium_drivers := swrast i915g ilo nouveau r300g r600g radeonsi vmwgfx
MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
diff --git a/mesalib/bin/bugzilla_mesa.sh b/mesalib/bin/bugzilla_mesa.sh
new file mode 100644
index 000000000..491ca0e7c
--- /dev/null
+++ b/mesalib/bin/bugzilla_mesa.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# This script is used to generate the list of fixed bugs that
+# appears in the release notes files, with HTML formatting.
+#
+# Note: This script could take a while until all details have
+# been fetched from bugzilla.
+#
+# Usage examples:
+#
+# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3
+# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 > bugfixes
+# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee bugfixes
+# $ DRYRUN=yes bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3
+# $ DRYRUN=yes bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | wc -l
+
+
+# regex pattern: trim before url
+trim_before='s/.*\(http\)/\1/'
+
+# regex pattern: trim after url
+trim_after='s/\(show_bug.cgi?id=[0-9]*\).*/\1/'
+
+# regex pattern: always use https
+use_https='s/http:/https:/'
+
+# extract fdo urls from commit log
+urls=$(git log $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before -e $trim_after -e $use_https | sort | uniq)
+
+# if DRYRUN is set to "yes", simply print the URLs and don't fetch the
+# details from fdo bugzilla.
+#DRYRUN=yes
+
+if [ "x$DRYRUN" = xyes ]; then
+ for i in $urls
+ do
+ echo $i
+ done
+else
+ echo "<ul>"
+ echo ""
+
+ for i in $urls
+ do
+ id=$(echo $i | cut -d'=' -f2)
+ summary=$(wget --quiet -O - $i | grep -e '<title>.*</title>' | sed -e 's/ *<title>Bug [0-9]\+ &ndash; \(.*\)<\/title>/\1/')
+ echo "<li><a href=\"$i\">Bug $id</a> - $summary</li>"
+ echo ""
+ done
+
+ echo "</ul>"
+fi
diff --git a/mesalib/bin/get-pick-list.sh b/mesalib/bin/get-pick-list.sh
index d3ac511c1..d2b76e7e6 100644
--- a/mesalib/bin/get-pick-list.sh
+++ b/mesalib/bin/get-pick-list.sh
@@ -1,6 +1,12 @@
#!/bin/sh
# Script for generating a list of candidates for cherry-picking to a stable branch
+#
+# Usage examples:
+#
+# $ bin/get-pick-list.sh
+# $ bin/get-pick-list.sh > picklist
+# $ bin/get-pick-list.sh | tee picklist
# Grep for commits with "cherry picked from commit" in the commit message.
git log --reverse --grep="cherry picked from commit" origin/master..HEAD |\
diff --git a/mesalib/bin/perf-annotate-jit b/mesalib/bin/perf-annotate-jit
new file mode 100644
index 000000000..746434008
--- /dev/null
+++ b/mesalib/bin/perf-annotate-jit
@@ -0,0 +1,251 @@
+#!/usr/bin/env python
+#
+# Copyright 2012 VMware Inc
+# Copyright 2008-2009 Jose Fonseca
+#
+# 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 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.
+#
+
+"""Perf annotate for JIT code.
+
+Linux `perf annotate` does not work with JIT code. This script takes the data
+produced by `perf script` command, plus the diassemblies outputed by gallivm
+into /tmp/perf-XXXXX.map.asm and produces output similar to `perf annotate`.
+
+See docs/llvmpipe.html for usage instructions.
+
+The `perf script` output parser was derived from the gprof2dot.py script.
+"""
+
+
+import sys
+import os.path
+import re
+import optparse
+import subprocess
+
+
+class Parser:
+ """Parser interface."""
+
+ def __init__(self):
+ pass
+
+ def parse(self):
+ raise NotImplementedError
+
+
+class LineParser(Parser):
+ """Base class for parsers that read line-based formats."""
+
+ def __init__(self, file):
+ Parser.__init__(self)
+ self._file = file
+ self.__line = None
+ self.__eof = False
+ self.line_no = 0
+
+ def readline(self):
+ line = self._file.readline()
+ if not line:
+ self.__line = ''
+ self.__eof = True
+ else:
+ self.line_no += 1
+ self.__line = line.rstrip('\r\n')
+
+ def lookahead(self):
+ assert self.__line is not None
+ return self.__line
+
+ def consume(self):
+ assert self.__line is not None
+ line = self.__line
+ self.readline()
+ return line
+
+ def eof(self):
+ assert self.__line is not None
+ return self.__eof
+
+
+mapFile = None
+
+def lookupMap(filename, matchSymbol):
+ global mapFile
+ mapFile = filename
+ stream = open(filename, 'rt')
+ for line in stream:
+ start, length, symbol = line.split()
+
+ start = int(start, 16)
+ length = int(length,16)
+
+ if symbol == matchSymbol:
+ return start
+
+ return None
+
+def lookupAsm(filename, desiredFunction):
+ stream = open(filename + '.asm', 'rt')
+ while stream.readline() != desiredFunction + ':\n':
+ pass
+
+ asm = []
+ line = stream.readline().strip()
+ while line:
+ addr, instr = line.split(':', 1)
+ addr = int(addr)
+ asm.append((addr, instr))
+ line = stream.readline().strip()
+
+ return asm
+
+
+
+samples = {}
+
+
+class PerfParser(LineParser):
+ """Parser for linux perf callgraph output.
+
+ It expects output generated with
+
+ perf record -g
+ perf script
+ """
+
+ def __init__(self, infile, symbol):
+ LineParser.__init__(self, infile)
+ self.symbol = symbol
+
+ def readline(self):
+ # Override LineParser.readline to ignore comment lines
+ while True:
+ LineParser.readline(self)
+ if self.eof() or not self.lookahead().startswith('#'):
+ break
+
+ def parse(self):
+ # read lookahead
+ self.readline()
+
+ while not self.eof():
+ self.parse_event()
+
+ asm = lookupAsm(mapFile, self.symbol)
+
+ addresses = samples.keys()
+ addresses.sort()
+ total_samples = 0
+
+ sys.stdout.write('%s:\n' % self.symbol)
+ for address, instr in asm:
+ try:
+ sample = samples.pop(address)
+ except KeyError:
+ sys.stdout.write(6*' ')
+ else:
+ sys.stdout.write('%6u' % (sample))
+ total_samples += sample
+ sys.stdout.write('%6u: %s\n' % (address, instr))
+ print 'total:', total_samples
+ assert len(samples) == 0
+
+ sys.exit(0)
+
+ def parse_event(self):
+ if self.eof():
+ return
+
+ line = self.consume()
+ assert line
+
+ callchain = self.parse_callchain()
+ if not callchain:
+ return
+
+ def parse_callchain(self):
+ callchain = []
+ while self.lookahead():
+ function = self.parse_call(len(callchain) == 0)
+ if function is None:
+ break
+ callchain.append(function)
+ if self.lookahead() == '':
+ self.consume()
+ return callchain
+
+ call_re = re.compile(r'^\s+(?P<address>[0-9a-fA-F]+)\s+(?P<symbol>.*)\s+\((?P<module>[^)]*)\)$')
+
+ def parse_call(self, first):
+ line = self.consume()
+ mo = self.call_re.match(line)
+ assert mo
+ if not mo:
+ return None
+
+ if not first:
+ return None
+
+ function_name = mo.group('symbol')
+ if not function_name:
+ function_name = mo.group('address')
+
+ module = mo.group('module')
+
+ function_id = function_name + ':' + module
+
+ address = mo.group('address')
+ address = int(address, 16)
+
+ if function_name != self.symbol:
+ return None
+
+ start_address = lookupMap(module, function_name)
+ address -= start_address
+
+ #print function_name, module, address
+
+ samples[address] = samples.get(address, 0) + 1
+
+ return True
+
+
+def main():
+ """Main program."""
+
+ optparser = optparse.OptionParser(
+ usage="\n\t%prog [options] symbol_name")
+ (options, args) = optparser.parse_args(sys.argv[1:])
+ if len(args) != 1:
+ optparser.error('wrong number of arguments')
+
+ symbol = args[0]
+
+ p = subprocess.Popen(['perf', 'script'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ parser = PerfParser(p.stdout, symbol)
+ parser.parse()
+
+
+if __name__ == '__main__':
+ main()
+
+
+# vim: set sw=4 et:
diff --git a/mesalib/bin/shortlog_mesa.sh b/mesalib/bin/shortlog_mesa.sh
index b20c52fdd..2ba0815de 100644
--- a/mesalib/bin/shortlog_mesa.sh
+++ b/mesalib/bin/shortlog_mesa.sh
@@ -2,6 +2,12 @@
# This script is used to generate the list of changes that
# appears in the release notes files, with HTML formatting.
+#
+# Usage examples:
+#
+# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3
+# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 > changes
+# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee changes
typeset -i in_log=0
diff --git a/mesalib/configure.ac b/mesalib/configure.ac
index 81d4a3f3e..521331bb4 100644
--- a/mesalib/configure.ac
+++ b/mesalib/configure.ac
@@ -31,7 +31,7 @@ AC_SUBST([OSMESA_VERSION])
dnl Versions for external dependencies
LIBDRM_REQUIRED=2.4.24
-LIBDRM_RADEON_REQUIRED=2.4.42
+LIBDRM_RADEON_REQUIRED=2.4.45
LIBDRM_INTEL_REQUIRED=2.4.38
LIBDRM_NVVIEUX_REQUIRED=2.4.33
LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41"
@@ -652,7 +652,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"
AC_ARG_WITH([gallium-drivers],
[AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
[comma delimited Gallium drivers list, e.g.
- "i915,nouveau,r300,r600,radeonsi,freedreno,svga,swrast"
+ "i915,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast"
@<:@default=r300,r600,svga,swrast@:>@])],
[with_gallium_drivers="$withval"],
[with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
@@ -676,19 +676,23 @@ if test "x$enable_opengl" = xno -a \
AC_MSG_ERROR([at least one API should be enabled])
fi
-API_DEFINES=""
-if test "x$enable_opengl" = xno; then
- API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
-else
- API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
-fi
-if test "x$enable_gles1" = xyes; then
- API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
+# Building OpenGL ES1 and/or ES2 without OpenGL is not supported on mesa 9.0.x
+if test "x$enable_opengl" = xno -a \
+ "x$enable_gles1" = xyes; then
+ AC_MSG_ERROR([Building OpenGL ES1 without OpenGL is not supported])
fi
-if test "x$enable_gles2" = xyes; then
- API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
+
+if test "x$enable_opengl" = xno -a \
+ "x$enable_gles2" = xyes; then
+ AC_MSG_ERROR([Building OpenGL ES2 without OpenGL is not supported])
fi
-AC_SUBST([API_DEFINES])
+
+AM_CONDITIONAL(HAVE_OPENGL, test "x$enable_opengl" = xyes)
+AM_CONDITIONAL(HAVE_OPENGL_ES1, test "x$enable_gles1" = xyes)
+AM_CONDITIONAL(HAVE_OPENGL_ES2, test "x$enable_gles2" = xyes)
+AM_CONDITIONAL(NEED_OPENGL_COMMON, test "x$enable_opengl" = xyes -o \
+ "x$enable_gles1" = xyes -o \
+ "x$enable_gles2" = xyes)
if test "x$enable_glx" = xno; then
AC_MSG_WARN([GLX disabled, disabling Xlib-GLX])
@@ -717,6 +721,8 @@ if test "x$enable_glx" = xyes -a \
enable_glx=no
fi
+AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xyes -a \
+ "x$enable_dri" = xyes)
AM_CONDITIONAL(HAVE_DRI, test "x$enable_dri" = xyes)
AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_xlib_glx" = xyes -o \
"x$enable_osmesa" = xyes)
@@ -733,80 +739,35 @@ if test "x$enable_dri" = xno; then
enable_shared_glapi=no
fi
-if test "x$enable_shared_glapi" = xyes; then
- # libGL will use libglapi for function lookups (IN_DRI_DRIVER means to use
- # the remap table)
- DEFINES="$DEFINES -DIN_DRI_DRIVER"
- CORE_DIRS="mapi/shared-glapi"
-fi
AM_CONDITIONAL(HAVE_SHARED_GLAPI, test "x$enable_shared_glapi" = xyes)
dnl
dnl Driver specific build directories
dnl
-GALLIUM_DIRS="auxiliary drivers state_trackers"
GALLIUM_TARGET_DIRS=""
GALLIUM_WINSYS_DIRS="sw"
GALLIUM_DRIVERS_DIRS="galahad trace rbug noop identity"
GALLIUM_STATE_TRACKERS_DIRS=""
-# build glapi if OpenGL is enabled
-if test "x$enable_opengl" = xyes; then
- CORE_DIRS="$CORE_DIRS mapi/glapi"
-fi
-
-# build es1api if OpenGL ES 1.x is enabled
-if test "x$enable_gles1" = xyes; then
- CORE_DIRS="$CORE_DIRS mapi/es1api"
-fi
-
-# build es2api if OpenGL ES 2.x is enabled
-if test "x$enable_gles2" = xyes; then
- CORE_DIRS="$CORE_DIRS mapi/es2api"
-fi
-
-# build glsl and mesa if OpenGL or OpenGL ES is enabled
-case "x$enable_opengl$enable_gles1$enable_gles2" in
-x*yes*)
- CORE_DIRS="mapi/glapi/gen $CORE_DIRS gtest glsl mesa"
- ;;
-esac
-
case "x$enable_glx$enable_xlib_glx" in
xyesyes)
- DRIVER_DIRS="$DRIVER_DIRS x11"
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS libgl-xlib"
GALLIUM_STATE_TRACKERS_DIRS="glx $GALLIUM_STATE_TRACKERS_DIRS"
- HAVE_WINSYS_XLIB="yes"
- ;;
-xyesno)
- # DRI-based GLX
- SRC_DIRS="$SRC_DIRS glx"
+ NEED_WINSYS_XLIB="yes"
;;
esac
if test "x$enable_dri" = xyes; then
- DRIVER_DIRS="$DRIVER_DIRS dri"
-
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/dri"
GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
- HAVE_ST_DRI="yes"
fi
if test "x$enable_osmesa" = xyes; then
- DRIVER_DIRS="$DRIVER_DIRS osmesa"
GALLIUM_STATE_TRACKERS_DIRS="osmesa $GALLIUM_STATE_TRACKERS_DIRS"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS osmesa"
fi
-AC_SUBST([SRC_DIRS])
-AC_SUBST([DRIVER_DIRS])
-AC_SUBST([GALLIUM_DIRS])
-AC_SUBST([GALLIUM_TARGET_DIRS])
-AC_SUBST([GALLIUM_WINSYS_DIRS])
-AC_SUBST([GALLIUM_DRIVERS_DIRS])
-AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
AC_SUBST([MESA_LLVM])
# Check for libdrm
@@ -977,7 +938,7 @@ DRI_DIRS=""
case "$with_dri_drivers" in
no) ;;
yes)
- # classic DRI drivers require FEATURE_GL to build
+ # classic DRI drivers
if test "x$enable_opengl" = xyes; then
DRI_DIRS="yes"
fi
@@ -1001,7 +962,7 @@ if test "x$enable_dri" = xyes; then
# Platform specific settings and drivers to build
case "$host_os" in
linux*)
- DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+ DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1"
DEFINES="$DEFINES -DHAVE_ALIAS"
case "$host_cpu" in
@@ -1026,21 +987,21 @@ if test "x$enable_dri" = xyes; then
;;
freebsd* | dragonfly* | *netbsd*)
DEFINES="$DEFINES -DHAVE_PTHREAD -DUSE_EXTERNAL_DXTN_LIB=1"
- DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
+ DEFINES="$DEFINES -DHAVE_ALIAS"
if test "x$DRI_DIRS" = "xyes"; then
DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
fi
;;
gnu*)
- DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+ DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1"
DEFINES="$DEFINES -DHAVE_ALIAS"
;;
solaris*)
- DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+ DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1"
;;
cygwin*)
- DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+ DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1"
if test "x$DRI_DIRS" = "xyes"; then
DRI_DIRS="swrast"
fi
@@ -1086,7 +1047,6 @@ if test "x$enable_dri" = xyes; then
GALLIUM_DRI_LIB_DEPS="$GALLIUM_DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm $CLOCK_LIB $PTHREAD_LIBS $DLOPEN_LIBS"
fi
AM_CONDITIONAL(NEED_LIBDRICORE, test -n "$DRI_DIRS")
-AC_SUBST([DRI_DIRS])
AC_SUBST([EXPAT_INCLUDES])
AC_SUBST([DRI_LIB_DEPS])
AC_SUBST([GALLIUM_DRI_LIB_DEPS])
@@ -1197,8 +1157,6 @@ if test "x$enable_gbm" = xauto; then
esac
fi
if test "x$enable_gbm" = xyes; then
- SRC_DIRS="$SRC_DIRS gbm"
-
PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
AC_MSG_ERROR([gbm needs udev]))
@@ -1209,6 +1167,7 @@ if test "x$enable_gbm" = xyes; then
fi
fi
fi
+AM_CONDITIONAL(HAVE_GBM, test "x$enable_gbm" = xyes)
GBM_PC_REQ_PRIV="libudev"
GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
AC_SUBST([GBM_PC_REQ_PRIV])
@@ -1220,7 +1179,6 @@ dnl
EGL_CLIENT_APIS=""
if test "x$enable_egl" = xyes; then
- SRC_DIRS="$SRC_DIRS egl"
EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS $PTHREAD_LIBS"
AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
@@ -1239,6 +1197,7 @@ if test "x$enable_egl" = xyes; then
fi
fi
+AM_CONDITIONAL(HAVE_EGL, test "x$enable_egl" = xyes)
AC_SUBST([EGL_LIB_DEPS])
dnl
@@ -1257,14 +1216,14 @@ if test "x$enable_gallium_egl" = xyes; then
GALLIUM_STATE_TRACKERS_DIRS="egl $GALLIUM_STATE_TRACKERS_DIRS"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS egl-static"
- HAVE_ST_EGL="yes"
fi
+AM_CONDITIONAL(HAVE_GALLIUM_EGL, test "x$enable_gallium_egl" = xyes)
dnl
dnl gbm Gallium configuration
dnl
if test "x$enable_gallium_gbm" = xauto; then
- case "$enable_gbm$HAVE_ST_EGL$enable_dri$with_egl_platforms" in
+ case "$enable_gbm$enable_gallium_egl$enable_dri$with_egl_platforms" in
yesyesyes*drm*)
enable_gallium_gbm=yes ;;
*)
@@ -1285,9 +1244,9 @@ if test "x$enable_gallium_gbm" = xyes; then
GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
- HAVE_ST_GBM="yes"
enable_gallium_loader=yes
fi
+AM_CONDITIONAL(HAVE_GALLIUM_GBM, test "x$enable_gallium_gbm" = xyes)
dnl
dnl X.Org DDX configuration
@@ -1300,8 +1259,8 @@ if test "x$enable_xorg" = xyes; then
HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
HAVE_XEXTPROTO_71="no")
GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
- HAVE_ST_XORG=yes
fi
+AM_CONDITIONAL(HAVE_ST_XORG, test "x$enable_xorg" = xyes)
dnl
dnl XA configuration
@@ -1317,11 +1276,11 @@ fi
fi
if test "x$enable_xa" = xyes; then
GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
- HAVE_ST_XA=yes
AC_SUBST(AWK)
AC_SUBST(GREP)
AC_SUBST(NM)
fi
+AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
dnl
dnl OpenVG configuration
@@ -1341,9 +1300,7 @@ if test "x$enable_openvg" = xyes; then
EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS $PTHREAD_LIBS"
- CORE_DIRS="$CORE_DIRS mapi/vgapi"
GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
- HAVE_ST_VEGA=yes
VG_PC_LIB_PRIV="-lm $CLOCK_LIB $PTHREAD_LIBS $DLOPEN_LIBS"
AC_SUBST([VG_PC_LIB_PRIV])
fi
@@ -1352,16 +1309,7 @@ AM_CONDITIONAL(HAVE_OPENVG, test "x$enable_openvg" = xyes)
dnl
dnl Gallium G3DVL configuration
dnl
-AC_ARG_ENABLE([gallium-g3dvl],
- [AS_HELP_STRING([--enable-gallium-g3dvl],
- [build gallium g3dvl @<:@default=disabled@:>@])],
- [enable_gallium_g3dvl="$enableval"],
- [enable_gallium_g3dvl=no])
-if test "x$enable_gallium_g3dvl" = xyes; then
- if test "x$with_gallium_drivers" = x; then
- AC_MSG_ERROR([cannot enable G3DVL without Gallium])
- fi
-
+if test -n "$with_gallium_drivers"; then
if test "x$enable_xvmc" = xauto; then
PKG_CHECK_EXISTS([xvmc], [enable_xvmc=yes], [enable_xvmc=no])
fi
@@ -1374,14 +1322,14 @@ fi
if test "x$enable_xvmc" = xyes; then
PKG_CHECK_MODULES([XVMC], [xvmc >= 1.0.6 x11-xcb xcb-dri2 >= 1.8])
GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xvmc"
- HAVE_ST_XVMC="yes"
fi
+AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes)
if test "x$enable_vdpau" = xyes; then
PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.4.1 x11-xcb xcb-dri2 >= 1.8])
GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vdpau"
- HAVE_ST_VDPAU="yes"
fi
+AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes)
dnl
dnl OpenCL configuration
@@ -1428,18 +1376,12 @@ if test "x$enable_opencl" = xyes; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS opencl"
enable_gallium_loader=yes
fi
-
-if test "x$enable_gallium_gbm" = xyes || test "x$enable_opencl" = xyes; then
- GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS pipe-loader"
-fi
+AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
dnl
dnl Gallium configuration
dnl
-if test "x$with_gallium_drivers" != x; then
- SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
-fi
-AM_CONDITIONAL(HAVE_GALLIUM, test "x$with_gallium_drivers" != x)
+AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers")
AC_SUBST([LLVM_BINDIR])
AC_SUBST([LLVM_CFLAGS])
@@ -1455,10 +1397,8 @@ AC_SUBST([CLANG_RESOURCE_DIR])
case "x$enable_opengl$enable_gles1$enable_gles2" in
x*yes*)
EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
- HAVE_OPENGL=yes
;;
esac
-AM_CONDITIONAL(HAVE_OPENGL, test "x$HAVE_OPENGL" = xyes)
AC_SUBST([VG_LIB_DEPS])
AC_SUBST([EGL_CLIENT_APIS])
@@ -1487,10 +1427,6 @@ fi
egl_platforms=`IFS=', '; echo $with_egl_platforms`
for plat in $egl_platforms; do
case "$plat" in
- fbdev|null)
- GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/$plat"
- ;;
-
wayland)
PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 1.0.2 wayland-server >= 1.0.2])
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
@@ -1513,7 +1449,7 @@ for plat in $egl_platforms; do
AC_MSG_ERROR([EGL platform drm needs gbm])
;;
- android|gdi)
+ android|fbdev|gdi|null)
;;
*)
@@ -1538,6 +1474,9 @@ fi
EGL_PLATFORMS="$egl_platforms"
+if echo "$egl_platforms" | grep 'x11' >/dev/null 2>&1; then
+ NEED_WINSYS_XLIB=yes
+fi
AM_CONDITIONAL(HAVE_EGL_PLATFORM_X11, echo "$egl_platforms" | grep 'x11' >/dev/null 2>&1)
AM_CONDITIONAL(HAVE_EGL_PLATFORM_WAYLAND, echo "$egl_platforms" | grep 'wayland' >/dev/null 2>&1)
AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep 'drm' >/dev/null 2>&1)
@@ -1644,12 +1583,13 @@ if test "x$enable_gallium_llvm" = xyes; then
if $LLVM_CONFIG --components | grep -q '\<mcjit\>'; then
LLVM_COMPONENTS="${LLVM_COMPONENTS} mcjit"
fi
- if $LLVM_CONFIG --components | grep -q '\<oprofilejit\>'; then
- LLVM_COMPONENTS="${LLVM_COMPONENTS} oprofilejit"
- fi
if test "x$enable_opencl" = xyes; then
LLVM_COMPONENTS="${LLVM_COMPONENTS} ipo linker instrumentation"
+ # LLVM 3.3 >= 177971 requires IRReader
+ if $LLVM_CONFIG --components | grep -q '\<irreader\>'; then
+ LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader"
+ fi
fi
LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
LLVM_BINDIR=`$LLVM_CONFIG --bindir`
@@ -1691,9 +1631,14 @@ dnl
dnl Gallium Tests
dnl
if test "x$enable_gallium_tests" = xyes; then
- SRC_DIRS="$SRC_DIRS gallium/tests/trivial gallium/tests/unit"
enable_gallium_loader=yes
fi
+AM_CONDITIONAL(HAVE_GALLIUM_TESTS, test "x$enable_gallium_tests" = xyes)
+
+if test "x$enable_gallium_loader" = xyes; then
+ GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS pipe-loader"
+fi
+AM_CONDITIONAL(NEED_GALLIUM_LOADER, test "x$enable_gallium_loader" = xyes)
dnl Directory for VDPAU libs
AC_ARG_WITH([vdpau-libdir],
@@ -1715,28 +1660,26 @@ dnl
dnl Gallium helper functions
dnl
gallium_check_st() {
- if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = xyes ||
- test "x$HAVE_ST_XA" = xyes || test "x$HAVE_ST_XVMC" = xyes ||
- test "x$HAVE_ST_VDPAU" = xyes; then
+ if test "x$NEED_NONNULL_WINSYS" = xyes; then
if test "x$have_libdrm" != xyes; then
AC_MSG_ERROR([DRI or Xorg DDX requires libdrm >= $LIBDRM_REQUIRED])
fi
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS $1"
fi
- if test "x$HAVE_ST_DRI" = xyes && test "x$2" != x; then
+ if test "x$enable_dri" = xyes && test "x$2" != x; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $2"
HAVE_COMMON_DRI=yes
fi
- if test "x$HAVE_ST_XORG" = xyes && test "x$3" != x; then
+ if test "x$enable_xorg" = xyes && test "x$3" != x; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $3"
fi
- if test "x$HAVE_ST_XA" = xyes && test "x$4" != x; then
+ if test "x$enable_xa" = xyes && test "x$4" != x; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $4"
fi
- if test "x$HAVE_ST_XVMC" = xyes && test "x$5" != x; then
+ if test "x$enable_xvmc" = xyes && test "x$5" != x; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $5"
fi
- if test "x$HAVE_ST_VDPAU" = xyes && test "x$6" != x; then
+ if test "x$enable_vdpau" = xyes && test "x$6" != x; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $6"
fi
}
@@ -1762,23 +1705,29 @@ gallium_require_drm_loader() {
radeon_llvm_check() {
LLVM_REQUIRED_VERSION_MAJOR="3"
- LLVM_REQUIRED_VERSION_MINOR="2"
+ LLVM_REQUIRED_VERSION_MINOR="3"
if test "$LLVM_VERSION_INT" -lt "${LLVM_REQUIRED_VERSION_MAJOR}0${LLVM_REQUIRED_VERSION_MINOR}"; then
- AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer with R600 target enabled is required.
- To use the r600/radeonsi LLVM backend, you need to fetch the LLVM source from:
- git://people.freedesktop.org/~tstellar/llvm master
- and build with --enable-experimental-targets=R600])
+ AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer is required for r600g and radeonsi.])
fi
if test true && $LLVM_CONFIG --targets-built | grep -qv '\<R600\>' ; then
AC_MSG_ERROR([LLVM R600 Target not enabled. You can enable it when building the LLVM
sources with the --enable-experimental-targets=R600
configure flag])
fi
- AC_MSG_WARN([Please ensure you use the latest llvm tree from git://people.freedesktop.org/~tstellar/llvm master before submitting a bug])
- LLVM_COMPONENTS="${LLVM_COMPONENTS} r600 bitreader"
+ LLVM_COMPONENTS="${LLVM_COMPONENTS} r600 bitreader ipo"
+ NEED_RADEON_LLVM=yes
+ AC_CHECK_LIB([elf], [elf_memory], [ELF_LIB=-lelf],
+ [AC_MSG_ERROR([radeonsi and r600g require libelf when using LLVM])])
}
dnl Gallium drivers
+if test "x$enable_dri" = xyes -o "x$enable_xorg" = xyes -o \
+ "x$enable_xa" = xyes -o "x$enable_xvmc" = xyes -o \
+ "x$enable_vdpau" = xyes; then
+ NEED_NONNULL_WINSYS=yes
+fi
+AM_CONDITIONAL(NEED_NONNULL_WINSYS, test "x$NEED_NONNULL_WINSYS" = xyes)
+
dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
if test "x$with_gallium_drivers" != x; then
gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
@@ -1799,6 +1748,13 @@ if test "x$with_gallium_drivers" != x; then
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
;;
+ xilo)
+ HAVE_GALLIUM_ILO=yes
+ PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
+ gallium_require_drm_loader
+ GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS ilo"
+ gallium_check_st "intel/drm" "dri-ilo"
+ ;;
xr300)
HAVE_GALLIUM_R300=yes
PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
@@ -1813,9 +1769,8 @@ if test "x$with_gallium_drivers" != x; then
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
if test "x$enable_r600_llvm" = xyes -o "x$enable_opencl" = xyes; then
radeon_llvm_check
- NEED_RADEON_GALLIUM=yes;
R600_NEED_RADEON_GALLIUM=yes;
- LLVM_COMPONENTS="${LLVM_COMPONENTS} ipo bitreader asmparser"
+ LLVM_COMPONENTS="${LLVM_COMPONENTS} bitreader asmparser"
fi
if test "x$enable_r600_llvm" = xyes; then
USE_R600_LLVM_COMPILER=yes;
@@ -1831,7 +1786,6 @@ if test "x$with_gallium_drivers" != x; then
gallium_require_drm_loader
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS radeonsi"
radeon_llvm_check
- NEED_RADEON_GALLIUM=yes;
gallium_check_st "radeon/drm" "dri-radeonsi" "xorg-radeonsi" "" "" "vdpau-radeonsi" ""
;;
xnouveau)
@@ -1856,20 +1810,18 @@ if test "x$with_gallium_drivers" != x; then
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
fi
- if test "x$HAVE_ST_DRI" = xyes; then
+ if test "x$enable_dri" = xyes; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
fi
- if test "x$HAVE_ST_VDPAU" = xyes; then
+ if test "x$enable_vdpau" = xyes; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS vdpau-softpipe"
fi
- if test "x$HAVE_ST_XVMC" = xyes; then
+ if test "x$enable_xvmc" = xyes; then
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS xvmc-softpipe"
fi
- if test "x$HAVE_ST_VDPAU" = xyes ||
- test "x$HAVE_ST_XVMC" = xyes; then
- if test "x$HAVE_WINSYS_XLIB" != xyes; then
- GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
- fi
+ if test "x$enable_vdpau" = xyes -o "x$enable_xvmc" = xyes; then
+ NEED_WINSYS_XLIB=yes
+ GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
fi
;;
*)
@@ -1924,6 +1876,7 @@ fi
AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
+AM_CONDITIONAL(HAVE_GALLIUM_ILO, test "x$HAVE_GALLIUM_ILO" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
@@ -1932,23 +1885,22 @@ AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
+AM_CONDITIONAL(NEED_GALLIUM_SOFTPIPE_DRIVER, test "x$HAVE_GALLIUM_SVGA" = xyes -o \
+ "x$HAVE_GALLIUM_I915" = xyes -o \
+ "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
+AM_CONDITIONAL(NEED_GALLIUM_LLVMPIPE_DRIVER, test "x$HAVE_GALLIUM_I915" = xyes -o \
+ "x$HAVE_GALLIUM_SOFTPIPE" = xyes -a \
+ "x$MESA_LLVM" = x1)
+
if test "x$enable_gallium_loader" = xyes; then
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
- GALLIUM_PIPE_LOADER_DEFINES="-DHAVE_PIPE_LOADER_SW"
- GALLIUM_PIPE_LOADER_LIBS="\$(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader.la"
- GALLIUM_PIPE_LOADER_LIBS="$GALLIUM_PIPE_LOADER_LIBS \$(top_builddir)/src/gallium/winsys/sw/null/libws_null.la"
-
- if test "x$HAVE_WINSYS_XLIB" = xyes; then
- GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_XLIB"
- GALLIUM_PIPE_LOADER_LIBS="$GALLIUM_PIPE_LOADER_LIBS \$(top_builddir)/src/gallium/winsys/sw/xlib/libws_xlib.la"
- fi
if test "x$enable_gallium_drm_loader" = xyes; then
GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_DRM"
PKG_CHECK_MODULES([GALLIUM_PIPE_LOADER_XCB], [xcb xcb-dri2],
pipe_loader_have_xcb=yes, pipe_loader_have_xcb=no)
if test "x$pipe_loader_have_xcb" = xyes; then
- GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DPIPE_LOADER_HAVE_XCB"
+ GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_XCB"
GALLIUM_PIPE_LOADER_LIBS="$GALLIUM_PIPE_LOADER_LIBS $GALLIUM_PIPE_LOADER_XCB_LIBS $LIBDRM_LIBS"
fi
fi
@@ -1957,24 +1909,6 @@ if test "x$enable_gallium_loader" = xyes; then
AC_SUBST([GALLIUM_PIPE_LOADER_LIBS])
fi
-dnl Tell Automake which drivers to build
-for driver in $GALLIUM_DRIVERS_DIRS; do
- case "x$driver" in
- xgalahad)
- HAVE_GALAHAD_GALLIUM=yes;
- ;;
- xidentity)
- HAVE_IDENTITY_GALLIUM=yes;
- ;;
- xnoop)
- HAVE_NOOP_GALLIUM=yes;
- ;;
- *)
- GALLIUM_MAKE_DIRS="$GALLIUM_MAKE_DIRS $driver"
- ;;
- esac
-done
-
AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
@@ -1983,10 +1917,14 @@ AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
AM_CONDITIONAL(HAVE_COMMON_DRI, test x$HAVE_COMMON_DRI = xyes)
-AM_CONDITIONAL(HAVE_GALAHAD_GALLIUM, test x$HAVE_GALAHAD_GALLIUM = xyes)
-AM_CONDITIONAL(HAVE_IDENTITY_GALLIUM, test x$HAVE_IDENTITY_GALLIUM = xyes)
-AM_CONDITIONAL(HAVE_NOOP_GALLIUM, test x$HAVE_NOOP_GALLIUM = xyes)
-AM_CONDITIONAL(NEED_RADEON_GALLIUM, test x$NEED_RADEON_GALLIUM = xyes)
+AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$NEED_NONNULL_WINSYS" = xyes -a \
+ "x$HAVE_GALLIUM_R300" = xyes -o \
+ "x$HAVE_GALLIUM_R600" = xyes -o \
+ "x$HAVE_GALLIUM_RADEONSI" = xyes)
+AM_CONDITIONAL(NEED_WINSYS_WRAPPER, test "x$HAVE_GALLIUM_I915" = xyes -o \
+ "x$HAVE_GALLIUM_SVGA" = xyes)
+AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$NEED_WINSYS_XLIB" = xyes)
+AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes)
AM_CONDITIONAL(R600_NEED_RADEON_GALLIUM, test x$R600_NEED_RADEON_GALLIUM = xyes)
AM_CONDITIONAL(USE_R600_LLVM_COMPILER, test x$USE_R600_LLVM_COMPILER = xyes)
AM_CONDITIONAL(HAVE_LOADER_GALLIUM, test x$enable_gallium_loader = xyes)
@@ -1995,12 +1933,13 @@ AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes)
AM_CONDITIONAL(HAVE_MESA_LLVM, test x$MESA_LLVM = x1)
AM_CONDITIONAL(LLVM_NEEDS_FNORTTI, test $LLVM_VERSION_INT -ge 302)
-AC_SUBST([GALLIUM_MAKE_DIRS])
+AC_SUBST([ELF_LIB])
AM_CONDITIONAL(NEED_LIBPROGRAM, test "x$with_gallium_drivers" != x -o \
"x$enable_xlib_glx" = xyes -o \
"x$enable_osmesa" = xyes)
-AM_CONDITIONAL(HAVE_X11_DRIVER, echo "$DRIVER_DIRS" | grep 'x11' >/dev/null 2>&1)
+AM_CONDITIONAL(HAVE_X11_DRIVER, test "x$enable_xlib_glx" = xyes)
+AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
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)
@@ -2019,9 +1958,6 @@ AC_SUBST([XA_MINOR], 0)
AC_SUBST([XA_TINY], 0)
AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
-dnl prepend CORE_DIRS to SRC_DIRS
-SRC_DIRS="$CORE_DIRS $SRC_DIRS"
-
dnl Restore LDFLAGS and CPPFLAGS
LDFLAGS="$_SAVE_LDFLAGS"
CPPFLAGS="$_SAVE_CPPFLAGS"
@@ -2043,12 +1979,12 @@ AC_CONFIG_FILES([Makefile
src/egl/wayland/wayland-drm/Makefile
src/egl/wayland/wayland-egl/Makefile
src/egl/wayland/wayland-egl/wayland-egl.pc
- src/gallium/Makefile
src/gallium/auxiliary/Makefile
src/gallium/auxiliary/pipe-loader/Makefile
src/gallium/drivers/Makefile
src/gallium/drivers/freedreno/Makefile
src/gallium/drivers/i915/Makefile
+ src/gallium/drivers/ilo/Makefile
src/gallium/drivers/llvmpipe/Makefile
src/gallium/drivers/nouveau/Makefile
src/gallium/drivers/nv30/Makefile
@@ -2079,6 +2015,7 @@ AC_CONFIG_FILES([Makefile
src/gallium/targets/Makefile
src/gallium/targets/dri-freedreno/Makefile
src/gallium/targets/dri-i915/Makefile
+ src/gallium/targets/dri-ilo/Makefile
src/gallium/targets/dri-nouveau/Makefile
src/gallium/targets/dri-r300/Makefile
src/gallium/targets/dri-r600/Makefile
@@ -2112,10 +2049,10 @@ AC_CONFIG_FILES([Makefile
src/gallium/winsys/freedreno/drm/Makefile
src/gallium/winsys/i915/drm/Makefile
src/gallium/winsys/i915/sw/Makefile
+ src/gallium/winsys/intel/drm/Makefile
src/gallium/winsys/nouveau/drm/Makefile
src/gallium/winsys/radeon/drm/Makefile
src/gallium/winsys/svga/drm/Makefile
- src/gallium/winsys/sw/Makefile
src/gallium/winsys/sw/dri/Makefile
src/gallium/winsys/sw/fbdev/Makefile
src/gallium/winsys/sw/null/Makefile
@@ -2129,6 +2066,7 @@ AC_CONFIG_FILES([Makefile
src/glx/Makefile
src/glx/tests/Makefile
src/gtest/Makefile
+ src/mapi/Makefile
src/mapi/es1api/Makefile
src/mapi/es1api/glesv1_cm.pc
src/mapi/es2api/Makefile
@@ -2142,7 +2080,6 @@ AC_CONFIG_FILES([Makefile
src/mapi/vgapi/vg.pc
src/mesa/Makefile
src/mesa/gl.pc
- src/mesa/drivers/Makefile
src/mesa/drivers/dri/dri.pc
src/mesa/drivers/dri/common/Makefile
src/mesa/drivers/dri/common/xmlpool/Makefile
@@ -2167,7 +2104,6 @@ dnl Sort the dirs alphabetically
GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
-GALLIUM_MAKE_DIRS=`echo $GALLIUM_MAKE_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
AC_OUTPUT
@@ -2231,7 +2167,7 @@ if test "$enable_egl" = yes; then
egl_drivers="$egl_drivers builtin:egl_dri2"
fi
- if test "x$HAVE_ST_EGL" = xyes; then
+ if test "x$enable_gallium_egl" = xyes; then
echo " EGL drivers: ${egl_drivers} egl_gallium"
echo " EGL Gallium STs:$EGL_CLIENT_APIS"
else
@@ -2249,9 +2185,8 @@ else
fi
echo ""
-if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
+if test -n "$with_gallium_drivers"; then
echo " Gallium: yes"
- echo " Gallium dirs: $GALLIUM_DIRS"
echo " Target dirs: $GALLIUM_TARGET_DIRS"
echo " Winsys dirs: $GALLIUM_WINSYS_DIRS"
echo " Driver dirs: $GALLIUM_DRIVERS_DIRS"
diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt
index d150b0874..f2152a31e 100644
--- a/mesalib/docs/GL3.txt
+++ b/mesalib/docs/GL3.txt
@@ -23,12 +23,12 @@ GL_EXT_texture_shared_exponent DONE (i965, r600, swrast)
Float depth buffers (GL_ARB_depth_buffer_float) DONE (i965, r600)
Framebuffer objects (GL_ARB_framebuffer_object) DONE (i965, r300, r600, swrast)
Half-float DONE
-Non-normalized Integer texture/framebuffer formats DONE (i965, r600)
+Non-normalized Integer texture/framebuffer formats DONE (i965, r600)
1D/2D Texture arrays DONE
Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast)
GL_EXT_texture_compression_rgtc DONE (i965, r300, r600, swrast)
Red and red/green texture formats DONE (i965, swrast, gallium)
-Transform feedback (GL_EXT_transform_feedback) DONE (i965, r600)
+Transform feedback (GL_EXT_transform_feedback) DONE (i965, r600)
Vertex array objects (GL_APPLE_vertex_array_object) DONE (i965, r300, r600, swrast)
sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600)
glClearBuffer commands DONE
@@ -56,8 +56,8 @@ Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r300, r600)
GL 3.2:
Core/compatibility profiles DONE
-GLSL 1.50 not started
-Geometry shaders (GL_ARB_geometry_shader4) partially done (Zack)
+GLSL 1.50 in progress
+Geometry shaders (GL_ARB_geometry_shader4) partially done
BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r300, r600, swrast)
Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, swrast)
Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast)
@@ -79,7 +79,7 @@ GL_ARB_sampler_objects DONE (i965, r300, r600)
GL_ARB_shader_bit_encoding DONE
GL_ARB_texture_rgb10_a2ui DONE (i965, r600)
GL_ARB_texture_swizzle DONE (same as EXT version) (i965, r300, r600, swrast)
-GL_ARB_timer_query DONE (i965, r600)
+GL_ARB_timer_query DONE (i965, r600)
GL_ARB_instanced_arrays DONE (i965, r300, r600)
GL_ARB_vertex_type_2_10_10_10_rev DONE (i965, r600)
@@ -89,15 +89,15 @@ GL 4.0:
GLSL 4.0 not started
GL_ARB_texture_query_lod DONE (i965)
GL_ARB_draw_buffers_blend DONE (i965, r600, softpipe)
-GL_ARB_draw_indirect not started
-GL_ARB_gpu_shader5 not started
+GL_ARB_draw_indirect started (Christoph)
+GL_ARB_gpu_shader5 started
GL_ARB_gpu_shader_fp64 not started
GL_ARB_sample_shading not started
GL_ARB_shader_subroutine not started
GL_ARB_tessellation_shader not started
GL_ARB_texture_buffer_object_rgb32 DONE (i965, softpipe)
GL_ARB_texture_cube_map_array DONE (i965, softpipe)
-GL_ARB_texture_gather not started
+GL_ARB_texture_gather started (Maxence, Chris)
GL_ARB_transform_feedback2 DONE
GL_ARB_transform_feedback3 DONE
@@ -124,7 +124,7 @@ GL_ARB_transform_feedback_instanced DONE
GL_ARB_base_instance DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_shader_image_load_store not started
GL_ARB_conservative_depth DONE (softpipe)
-GL_ARB_shading_language_420pack not started
+GL_ARB_shading_language_420pack started (Todd)
GL_ARB_internalformat_query DONE (i965, gallium)
GL_ARB_map_buffer_alignment DONE (r300, r600, radeonsi)
diff --git a/mesalib/docs/README.UVD b/mesalib/docs/README.UVD
new file mode 100644
index 000000000..36b467edf
--- /dev/null
+++ b/mesalib/docs/README.UVD
@@ -0,0 +1,13 @@
+The software may implement third party technologies (e.g. third party
+libraries) that are not licensed to you by AMD and for which you may need
+to obtain licenses from other parties. Unless explicitly stated otherwise,
+these third party technologies are not licensed hereunder. Such third
+party technologies include, but are not limited, to H.264, MPEG-2, MPEG-4,
+AVC, and VC-1.
+
+For MPEG-2 Encoding Products ANY USE OF THIS PRODUCT IN ANY MANNER OTHER
+THAN PERSONAL USE THAT COMPLIES WITH THE MPEG-2 STANDARD FOR ENCODING VIDEO
+INFORMATION FOR PACKAGED MEDIA IS EXPRESSLY PROHIBITED WITHOUT A LICENSE
+UNDER APPLICABLE PATENTS IN THE MPEG-2 PATENT PORTFOLIO, WHICH LICENSES IS
+AVAILABLE FROM MPEG LA, LLC, 6312 S. Fiddlers Green Circle, Suite 400E,
+Greenwood Village, Colorado 80111 U.S.A.
diff --git a/mesalib/docs/devinfo.html b/mesalib/docs/devinfo.html
index c89bfc02e..f5eb4d468 100644
--- a/mesalib/docs/devinfo.html
+++ b/mesalib/docs/devinfo.html
@@ -197,16 +197,18 @@ branch is relevant.
<dl>
<dt>Makefile.am</dt>
+ <dt>SConstruct</dt>
+ <dt>Android.common.mk</dt>
<dd>PACKAGE_VERSION</dd>
<dt>configure.ac</dt>
<dd>AC_INIT</dd>
</dl>
<p>
-Create a docs/relnotes-x.y.z.html file.
-The bin/shortlog_mesa.sh script can be used to create a HTML-formatted list
-of changes to include in the file.
-Link the new docs/relnotes-x.y.z.html file into the main <a href="relnotes.html">relnotes.html</a> file.
+Create a docs/relnotes/x.y.z.html file.
+The bin/bugzilla_mesa.sh and bin/shortlog_mesa.sh scripts can be used to
+create the HTML-formatted lists of bugfixes and changes to include in the file.
+Link the new docs/relnotes/x.y.z.html file into the main <a href="relnotes.html">relnotes.html</a> file.
</p>
<p>
@@ -231,7 +233,7 @@ Make the distribution files. From inside the Mesa directory:
<p>
After the tarballs are created, the md5 checksums for the files will
be computed.
-Add them to the docs/relnotes-x.y.html file.
+Add them to the docs/relnotes/x.y.html file.
</p>
<p>
diff --git a/mesalib/docs/envvars.html b/mesalib/docs/envvars.html
index 5d855c630..389da62e6 100644
--- a/mesalib/docs/envvars.html
+++ b/mesalib/docs/envvars.html
@@ -32,6 +32,8 @@ sometimes be useful for debugging end-user issues.
<li>LIBGL_ALWAYS_INDIRECT - forces an indirect rendering context/connection.
<li>LIBGL_ALWAYS_SOFTWARE - if set, always use software rendering
<li>LIBGL_NO_DRAWARRAYS - if set do not use DrawArrays GLX protocol (for debugging)
+<li>LIBGL_SHOW_FPS - print framerate to stdout based on the number of glXSwapBuffers
+ calls per second.
</ul>
@@ -144,6 +146,9 @@ Mesa EGL supports different sets of environment variables. See the
<h2>Gallium environment variables</h2>
<ul>
+<li>GALLIUM_HUD - draws various information on the screen, like framerate,
+ cpu load, driver statistics, performance counters, etc.
+ Set GALLIUM_HUD=help and run e.g. glxgears for more info.
<li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc.
rather than stderr.
<li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment
diff --git a/mesalib/docs/extensions.html b/mesalib/docs/extensions.html
index 5d790fb61..40f59d3b0 100644
--- a/mesalib/docs/extensions.html
+++ b/mesalib/docs/extensions.html
@@ -23,19 +23,27 @@ The specifications follow.
<ul>
-<li><a href="MESA_agp_offset.spec">MESA_agp_offset.spec</a>
-<li><a href="MESA_copy_sub_buffer.spec">MESA_copy_sub_buffer.spec</a>
-<li><a href="MESA_packed_depth_stencil.spec">MESA_packed_depth_stencil.spec</a>
-<li><a href="MESA_pack_invert.spec">MESA_pack_invert.spec</a>
-<li><a href="MESA_pixmap_colormap.spec">MESA_pixmap_colormap.spec</a>
-<li><a href="MESA_release_buffers.spec">MESA_release_buffers.spec</a>
-<li><a href="MESA_resize_buffers.spec">MESA_resize_buffers.spec</a>
-<li><a href="MESA_set_3dfx_mode.spec">MESA_set_3dfx_mode.spec</a>
-<li><a href="MESA_sprite_point.spec">MESA_sprite_point.spec</a> (obsolete)
-<li><a href="MESA_texture_signed_rgba.spec">MESA_texture_signed_rgba.spec</a>
-<li><a href="MESA_trace.spec">MESA_trace.spec</a> (obsolete)
-<li><a href="MESA_window_pos.spec">MESA_window_pos.spec</a>
-<li><a href="MESA_ycbcr_texture.spec">MESA_ycbcr_texture.spec</a>
+<li><a href="specs/MESA_agp_offset.spec">MESA_agp_offset.spec</a>
+<li><a href="specs/MESA_copy_sub_buffer.spec">MESA_copy_sub_buffer.spec</a>
+<li><a href="specs/MESA_drm_image.spec">MESA_drm_image.spec</a>
+<li><a href="specs/MESA_multithread_makecurrent.spec">MESA_multithread_makecurrent.spec</a>
+<li><a href="specs/OLD/MESA_packed_depth_stencil.spec">MESA_packed_depth_stencil.spec</a> (obsolete)
+<li><a href="specs/MESA_pack_invert.spec">MESA_pack_invert.spec</a>
+<li><a href="specs/MESA_pixmap_colormap.spec">MESA_pixmap_colormap.spec</a>
+<li><a href="specs/OLD/MESA_program_debug.spec">MESA_program_debug.spec</a> (obsolete)
+<li><a href="specs/MESA_release_buffers.spec">MESA_release_buffers.spec</a>
+<li><a href="specs/MESA_resize_buffers.spec">MESA_resize_buffers.spec</a>
+<li><a href="specs/MESA_set_3dfx_mode.spec">MESA_set_3dfx_mode.spec</a>
+<li><a href="specs/MESA_shader_debug.spec">MESA_shader_debug.spec</a>
+<li><a href="specs/OLD/MESA_sprite_point.spec">MESA_sprite_point.spec</a> (obsolete)
+<li><a href="specs/MESA_swap_control.spec">MESA_swap_control.spec</a>
+<li><a href="specs/MESA_swap_frame_usage.spec">MESA_swap_frame_usage.spec</a>
+<li><a href="specs/MESA_texture_array.spec">MESA_texture_array.spec</a>
+<li><a href="specs/MESA_texture_signed_rgba.spec">MESA_texture_signed_rgba.spec</a>
+<li><a href="specs/OLD/MESA_trace.spec">MESA_trace.spec</a> (obsolete)
+<li><a href="specs/MESA_window_pos.spec">MESA_window_pos.spec</a>
+<li><a href="specs/MESA_ycbcr_texture.spec">MESA_ycbcr_texture.spec</a>
+<li><a href="specs/WL_bind_wayland_display.spec">WL_bind_wayland_display.spec</a>
</ul>
</div>
diff --git a/mesalib/docs/index.html b/mesalib/docs/index.html
index e2ef92aee..be095820c 100644
--- a/mesalib/docs/index.html
+++ b/mesalib/docs/index.html
@@ -16,9 +16,21 @@
<h1>News</h1>
+<h2>May 21, 2013</h2>
+<p>
+<a href="relnotes/9.1.3.html">Mesa 9.1.3</a> is released.
+This is a bug fix release.
+</p>
+
+<h2>April 30, 2013</h2>
+<p>
+<a href="relnotes/9.1.2.html">Mesa 9.1.2</a> is released.
+This is a bug fix release.
+</p>
+
<h2>March 19, 2013</h2>
<p>
-<a href="relnotes-9.1.1.html">Mesa 9.1.1</a> is released.
+<a href="relnotes/9.1.1.html">Mesa 9.1.1</a> is released.
This is a bug fix release.
</p>
@@ -34,7 +46,7 @@ You can download it from <a href="ftp://ftp.freedesktop.org/pub/mesa/demos/8.1.0
<h2>February 22, 2013</h2>
<p>
-<a href="relnotes-9.1.html">Mesa 9.1</a> is released.
+<a href="relnotes/9.1.html">Mesa 9.1</a> is released.
This is a new development release.
See the release notes for more information about the release.
</p>
@@ -43,7 +55,7 @@ See the release notes for more information about the release.
<h2>February 21, 2013</h2>
<p>
-<a href="relnotes-9.0.3.html">Mesa 9.0.3</a> is released.
+<a href="relnotes/9.0.3.html">Mesa 9.0.3</a> is released.
This is a bug fix release.
</p>
@@ -51,7 +63,7 @@ This is a bug fix release.
<h2>January 22, 2013</h2>
<p>
-<a href="relnotes-9.0.2.html">Mesa 9.0.2</a> is released.
+<a href="relnotes/9.0.2.html">Mesa 9.0.2</a> is released.
This is a bug fix release.
</p>
@@ -59,7 +71,7 @@ This is a bug fix release.
<h2>November 16, 2012</h2>
<p>
-<a href="relnotes-9.0.1.html">Mesa 9.0.1</a> is released.
+<a href="relnotes/9.0.1.html">Mesa 9.0.1</a> is released.
This is a bug fix release.
</p>
@@ -67,7 +79,7 @@ This is a bug fix release.
<h2>October 24, 2012</h2>
<p>
-<a href="relnotes-8.0.5.html">Mesa 8.0.5</a> is released.
+<a href="relnotes/8.0.5.html">Mesa 8.0.5</a> is released.
This is a bug fix release.
</p>
@@ -75,7 +87,7 @@ This is a bug fix release.
<h2>October 8, 2012</h2>
<p>
-<a href="relnotes-9.0.html">Mesa 9.0</a> is released.
+<a href="relnotes/9.0.html">Mesa 9.0</a> is released.
This is the first version of Mesa to support OpenGL 3.1 and GLSL 1.40
(with the i965 driver).
See the release notes for more information about the release.
@@ -85,7 +97,7 @@ See the release notes for more information about the release.
<h2>July 10, 2012</h2>
<p>
-<a href="relnotes-8.0.4.html">Mesa 8.0.4</a> is released.
+<a href="relnotes/8.0.4.html">Mesa 8.0.4</a> is released.
This is a bug fix release.
</p>
@@ -93,7 +105,7 @@ This is a bug fix release.
<h2>May 18, 2012</h2>
<p>
-<a href="relnotes-8.0.3.html">Mesa 8.0.3</a> is released.
+<a href="relnotes/8.0.3.html">Mesa 8.0.3</a> is released.
This is a bug fix release.
</p>
@@ -101,7 +113,7 @@ This is a bug fix release.
<h2>March 21, 2012</h2>
<p>
-<a href="relnotes-8.0.2.html">Mesa 8.0.2</a> is released.
+<a href="relnotes/8.0.2.html">Mesa 8.0.2</a> is released.
This is a bug fix release.
</p>
@@ -109,14 +121,14 @@ This is a bug fix release.
<h2>February 16, 2012</h2>
<p>
-<a href="relnotes-8.0.1.html">Mesa 8.0.1</a> is released. This is a bug fix
+<a href="relnotes/8.0.1.html">Mesa 8.0.1</a> is released. This is a bug fix
release. See the release notes for more information about the release.
</p>
<h2>February 9, 2012</h2>
<p>
-<a href="relnotes-8.0.html">Mesa 8.0</a> is released.
+<a href="relnotes/8.0.html">Mesa 8.0</a> is released.
This is the first version of Mesa to support OpenGL 3.0 and GLSL 1.30
(with the i965 driver).
See the release notes for more information about the release.
@@ -126,7 +138,7 @@ See the release notes for more information about the release.
<h2>November 27, 2011</h2>
<p>
-<a href="relnotes-7.11.2.html">Mesa 7.11.2</a> is released. This is a bug fix
+<a href="relnotes/7.11.2.html">Mesa 7.11.2</a> is released. This is a bug fix
release. This release was made primarily to fix build problems with 7.11.1 on
Mandriva and to fix problems related to glCopyTexImage to luminance-alpha
textures. The later was believed to have been fixed in 7.11.1 but was not.
@@ -135,36 +147,36 @@ textures. The later was believed to have been fixed in 7.11.1 but was not.
<h2>November 17, 2011</h2>
<p>
-<a href="relnotes-7.11.1.html">Mesa 7.11.1</a> is released. This is a bug
+<a href="relnotes/7.11.1.html">Mesa 7.11.1</a> is released. This is a bug
fix release.
</p>
<h2>July 31, 2011</h2>
<p>
-<a href="relnotes-7.11.html">Mesa 7.11</a> (final) is released. This is a new
+<a href="relnotes/7.11.html">Mesa 7.11</a> (final) is released. This is a new
development release.
</p>
<h2>June 13, 2011</h2>
<p>
-<a href="relnotes-7.10.3.html">Mesa 7.10.3</a> is released. This is a bug
+<a href="relnotes/7.10.3.html">Mesa 7.10.3</a> is released. This is a bug
fix release.
</p>
<h2>April 6, 2011</h2>
<p>
-<a href="relnotes-7.10.2.html">Mesa 7.10.2</a> is released. This is a bug
+<a href="relnotes/7.10.2.html">Mesa 7.10.2</a> is released. This is a bug
fix release.
</p>
<h2>March 2, 2011</h2>
<p>
-<a href="relnotes-7.9.2.html">Mesa 7.9.2</a> and
-<a href="relnotes-7.10.1.html">Mesa 7.10.1</a> are released. These are
+<a href="relnotes/7.9.2.html">Mesa 7.9.2</a> and
+<a href="relnotes/7.10.1.html">Mesa 7.10.1</a> are released. These are
stable releases containing bug fixes since the 7.9.1 and 7.10 releases.
</p>
@@ -172,7 +184,7 @@ stable releases containing bug fixes since the 7.9.1 and 7.10 releases.
<h2>October 4, 2010</h2>
<p>
-<a href="relnotes-7.9.html">Mesa 7.9</a> (final) is released. This is a new
+<a href="relnotes/7.9.html">Mesa 7.9</a> (final) is released. This is a new
development release.
</p>
@@ -180,7 +192,7 @@ development release.
<h2>September 27, 2010</h2>
<p>
-<a href="relnotes-7.9.html">Mesa 7.9.0-rc1</a> is released. This is a
+<a href="relnotes/7.9.html">Mesa 7.9.0-rc1</a> is released. This is a
release candidate for the 7.9 development release.
</p>
@@ -188,7 +200,7 @@ release candidate for the 7.9 development release.
<h2>June 16, 2010</h2>
<p>
-<a href="relnotes-7.8.2.html">Mesa 7.8.2</a> is released. This is a bug-fix
+<a href="relnotes/7.8.2.html">Mesa 7.8.2</a> is released. This is a bug-fix
release collecting fixes since the 7.8.1 release.
</p>
@@ -196,18 +208,18 @@ release collecting fixes since the 7.8.1 release.
<h2>April 5, 2010</h2>
<p>
-<a href="relnotes-7.8.1.html">Mesa 7.8.1</a> is released. This is a bug-fix
+<a href="relnotes/7.8.1.html">Mesa 7.8.1</a> is released. This is a bug-fix
release for a few critical issues in the 7.8 release.
</p>
<h2>March 28, 2010</h2>
<p>
-<a href="relnotes-7.7.1.html">Mesa 7.7.1</a> is released. This is a bug-fix
+<a href="relnotes/7.7.1.html">Mesa 7.7.1</a> is released. This is a bug-fix
release fixing issues found in the 7.7 release.
</p>
<p>
-Also, <a href="relnotes-7.8.html">Mesa 7.8</a> is released. This is a new
+Also, <a href="relnotes/7.8.html">Mesa 7.8</a> is released. This is a new
development release.
</p>
@@ -215,37 +227,37 @@ development release.
<h2>December 21, 2009</h2>
<p>
-<a href="relnotes-7.6.1.html">Mesa 7.6.1</a> is released. This is a bug-fix
+<a href="relnotes/7.6.1.html">Mesa 7.6.1</a> is released. This is a bug-fix
release fixing issues found in the 7.6 release.
</p>
<p>
-Also, <a href="relnotes-7.7.html">Mesa 7.7</a> is released. This is a new
+Also, <a href="relnotes/7.7.html">Mesa 7.7</a> is released. This is a new
development release.
</p>
<h2>September 28, 2009</h2>
<p>
-<a href="relnotes-7.6.html">Mesa 7.6</a> is released. This is a new feature
+<a href="relnotes/7.6.html">Mesa 7.6</a> is released. This is a new feature
release. Those especially concerned about stability may want to wait for the
follow-on 7.6.1 bug-fix release.
</p>
<p>
-<a href="relnotes-7.5.2.html">Mesa 7.5.2</a> is also released.
+<a href="relnotes/7.5.2.html">Mesa 7.5.2</a> is also released.
This is a stable release fixing bugs since the 7.5.1 release.
</p>
<h2>September 3, 2009</h2>
<p>
-<a href="relnotes-7.5.1.html">Mesa 7.5.1</a> is released.
+<a href="relnotes/7.5.1.html">Mesa 7.5.1</a> is released.
This is a bug-fix release which fixes bugs found in version 7.5.
</p>
<h2>July 17, 2009</h2>
<p>
-<a href="relnotes-7.5.html">Mesa 7.5</a> is released.
+<a href="relnotes/7.5.html">Mesa 7.5</a> is released.
This is a new features release. People especially concerned about
stability may want to wait for the follow-on 7.5.1 bug-fix release.
</p>
@@ -253,7 +265,7 @@ stability may want to wait for the follow-on 7.5.1 bug-fix release.
<h2>June 23, 2009</h2>
<p>
-<a href="relnotes-7.4.4.html">Mesa 7.4.4</a> is released.
+<a href="relnotes/7.4.4.html">Mesa 7.4.4</a> is released.
This is a stable release that fixes a regression in the i915/i965 drivers
that slipped into the 7.4.3 release.
</p>
@@ -261,35 +273,35 @@ that slipped into the 7.4.3 release.
<h2>June 19, 2009</h2>
<p>
-<a href="relnotes-7.4.3.html">Mesa 7.4.3</a> is released.
+<a href="relnotes/7.4.3.html">Mesa 7.4.3</a> is released.
This is a stable release fixing bugs since the 7.4.2 release.
</p>
<h2>May 15, 2009</h2>
<p>
-<a href="relnotes-7.4.2.html">Mesa 7.4.2</a> is released.
+<a href="relnotes/7.4.2.html">Mesa 7.4.2</a> is released.
This is a stable release fixing bugs since the 7.4.1 release.
</p>
<h2>April 18, 2009</h2>
<p>
-<a href="relnotes-7.4.1.html">Mesa 7.4.1</a> is released.
+<a href="relnotes/7.4.1.html">Mesa 7.4.1</a> is released.
This is a stable release fixing bugs since the 7.4 release.
</p>
<h2>March 27, 2009</h2>
<p>
-<a href="relnotes-7.4.html">Mesa 7.4</a> is released.
+<a href="relnotes/7.4.html">Mesa 7.4</a> is released.
This is a stable release fixing bugs since the 7.3 release.
</p>
<h2>January 22, 2009</h2>
<p>
-<a href="relnotes-7.3.html">Mesa 7.3</a> is released.
+<a href="relnotes/7.3.html">Mesa 7.3</a> is released.
This is a new development release.
Mesa 7.4 will follow and will have bug fixes relative to 7.3.
</p>
@@ -297,14 +309,14 @@ Mesa 7.4 will follow and will have bug fixes relative to 7.3.
<h2>September 20, 2008</h2>
<p>
-<a href="relnotes-7.2.html">Mesa 7.2</a> is released.
+<a href="relnotes/7.2.html">Mesa 7.2</a> is released.
This is a stable, bug-fix release.
</p>
<h2>August 26, 2008</h2>
<p>
-<a href="relnotes-7.1.html">Mesa 7.1</a> is released.
+<a href="relnotes/7.1.html">Mesa 7.1</a> is released.
This is a new development release.
It should be relatively stable, but those especially concerned about
stability should wait for the 7.2 release or use Mesa 7.0.4 (the
@@ -314,14 +326,14 @@ previous stable release).
<h2>August 16, 2008</h2>
<p>
-<a href="relnotes-7.0.4.html">Mesa 7.0.4</a> is released.
+<a href="relnotes/7.0.4.html">Mesa 7.0.4</a> is released.
This is a bug-fix release.
</p>
<h2>April 4, 2008</h2>
<p>
-<a href="relnotes-7.0.3.html">Mesa 7.0.3</a> is released.
+<a href="relnotes/7.0.3.html">Mesa 7.0.3</a> is released.
This is a bug-fix release.
</p>
@@ -350,28 +362,28 @@ but other drivers will be coming...
<h2>November 10, 2007</h2>
<p>
-<a href="relnotes-7.0.2.html">Mesa 7.0.2</a> is released.
+<a href="relnotes/7.0.2.html">Mesa 7.0.2</a> is released.
This is a bug-fix release.
</p>
<h2>August 3, 2007</h2>
<p>
-<a href="relnotes-7.0.1.html">Mesa 7.0.1</a> is released.
+<a href="relnotes/7.0.1.html">Mesa 7.0.1</a> is released.
This is a bug-fix release.
</p>
<h2>June 22, 2007</h2>
<p>
-<a href="relnotes-7.0.html">Mesa 7.0</a> is released.
+<a href="relnotes/7.0.html">Mesa 7.0</a> is released.
This is a stable release featuring OpenGL 2.1 support.
</p>
<h2>April 27, 2007</h2>
<p>
-<a href="relnotes-6.5.3.html">Mesa 6.5.3</a> is released.
+<a href="relnotes/6.5.3.html">Mesa 6.5.3</a> is released.
This is a development release which will lead up to the Mesa 7.0 release
(which will advertise OpenGL 2.1 API support).
</p>
@@ -402,33 +414,33 @@ See the <a href="repository.html">repository page</a> for more information.
<h2>December 2, 2006</h2>
<p>
-<a href="relnotes-6.5.2.html">Mesa 6.5.2</a> has been released.
+<a href="relnotes/6.5.2.html">Mesa 6.5.2</a> has been released.
This is a new development release.
</p>
<h2>September 15, 2006</h2>
<p>
-<a href="relnotes-6.5.1.html">Mesa 6.5.1</a> has been released.
+<a href="relnotes/6.5.1.html">Mesa 6.5.1</a> has been released.
This is a new development release.
</p>
<h2>March 31, 2006</h2>
<p>
-<a href="relnotes-6.5.html">Mesa 6.5</a> has been released.
+<a href="relnotes/6.5.html">Mesa 6.5</a> has been released.
This is a new development release.
</p>
<h2>February 2, 2006</h2>
<p>
-<a href="relnotes-6.4.2.html">Mesa 6.4.2</a> has been released.
+<a href="relnotes/6.4.2.html">Mesa 6.4.2</a> has been released.
This is stable, bug-fix release.
</p>
<h2>November 29, 2005</h2>
<p>
-<a href="relnotes-6.4.1.html">Mesa 6.4.1</a> has been released.
+<a href="relnotes/6.4.1.html">Mesa 6.4.1</a> has been released.
This is stable, bug-fix release.
</p>
@@ -436,7 +448,7 @@ This is stable, bug-fix release.
<h2>October 24, 2005</h2>
<p>
-<a href="relnotes-6.4.html">Mesa 6.4</a> has been released.
+<a href="relnotes/6.4.html">Mesa 6.4</a> has been released.
This is stable, bug-fix release.
</p>
@@ -755,8 +767,8 @@ OpenGL 1.5 features.
- demo of per-pixel lighting with a fragment program (demos/fplight.c)
- new version (18) of glext.h header
- new spriteblast.c demo of GL_ARB_point_sprite
- - faster glDrawPixels in X11 driver in some cases (see RELNOTES-5.1)
- - faster glCopyPixels in X11 driver in some cases (see RELNOTES-5.1)
+ - faster glDrawPixels in X11 driver in some cases (see relnotes/5.1)
+ - faster glCopyPixels in X11 driver in some cases (see relnotes/5.1)
Bug fixes:
- really enable OpenGL 1.4 features in DOS driver.
- fixed issues in glDrawPixels and glCopyPixels for very wide images
diff --git a/mesalib/docs/license.html b/mesalib/docs/license.html
index 35f85853d..80bb60400 100644
--- a/mesalib/docs/license.html
+++ b/mesalib/docs/license.html
@@ -75,9 +75,10 @@ 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
-BRIAN PAUL 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.
+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.
</pre>
diff --git a/mesalib/docs/llvmpipe.html b/mesalib/docs/llvmpipe.html
index be0308321..80f8a0176 100644
--- a/mesalib/docs/llvmpipe.html
+++ b/mesalib/docs/llvmpipe.html
@@ -130,38 +130,38 @@ need to ask, don't even try it.
<h1>Profiling</h1>
-To profile llvmpipe you should pass the options
-
+<p>
+To profile llvmpipe you should build as
+</p>
<pre>
scons build=profile &lt;same-as-before&gt;
</pre>
+<p>
This will ensure that frame pointers are used both in C and JIT functions, and
that no tail call optimizations are done by gcc.
+</p>
-To better profile JIT code you'll need to build LLVM with oprofile integration.
-
-<pre>
- ./configure \
- --prefix=$install_dir \
- --enable-optimized \
- --disable-profiling \
- --enable-targets=host-only \
- --with-oprofile
-
- make -C "$build_dir"
- make -C "$build_dir" install
-
- find "$install_dir/lib" -iname '*.a' -print0 | xargs -0 strip --strip-debug
-</pre>
+<h2>Linux perf integration</h2>
-The you should define
+<p>
+On Linux, it is possible to have symbol resolution of JIT code with <a href="http://perf.wiki.kernel.org/">Linux perf</a>:
+</p>
<pre>
- export LLVM=/path/to/llvm-2.6-profile
+ perf record -g /my/application
+ perf report
</pre>
-and rebuild.
+<p>
+When run inside Linux perf, llvmpipe will create a /tmp/perf-XXXXX.map file with
+symbol address table. It also dumps assembly code to /tmp/perf-XXXXX.map.asm,
+which can be used by the bin/perf-annotate-jit script to produce disassembly of
+the generated code annotated with the samples.
+</p>
+
+<p>You can obtain a call graph via
+<a href="http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#linux_perf">Gprof2Dot</a>.</p>
<h1>Unit testing</h1>
diff --git a/mesalib/docs/relnotes.html b/mesalib/docs/relnotes.html
index 2e11bc497..04eea158a 100644
--- a/mesalib/docs/relnotes.html
+++ b/mesalib/docs/relnotes.html
@@ -21,58 +21,62 @@ The release notes summarize what's new or changed in each Mesa release.
</p>
<ul>
-<li><a href="relnotes-9.1.html">9.1 release notes</a>
-<li><a href="relnotes-9.0.3.html">9.0.3 release notes</a>
-<li><a href="relnotes-9.0.2.html">9.0.2 release notes</a>
-<li><a href="relnotes-9.0.1.html">9.0.1 release notes</a>
-<li><a href="relnotes-9.0.html">9.0 release notes</a>
-<li><a href="relnotes-8.0.5.html">8.0.5 release notes</a>
-<li><a href="relnotes-8.0.4.html">8.0.4 release notes</a>
-<li><a href="relnotes-8.0.3.html">8.0.3 release notes</a>
-<li><a href="relnotes-8.0.2.html">8.0.2 release notes</a>
-<li><a href="relnotes-8.0.1.html">8.0.1 release notes</a>
-<li><a href="relnotes-8.0.html">8.0 release notes</a>
-<li><a href="relnotes-7.11.2.html">7.11.2 release notes</a>
-<li><a href="relnotes-7.11.1.html">7.11.1 release notes</a>
-<li><a href="relnotes-7.11.html">7.11 release notes</a>
-<li><a href="relnotes-7.10.3.html">7.10.3 release notes</a>
-<li><a href="relnotes-7.10.2.html">7.10.2 release notes</a>
-<li><a href="relnotes-7.10.1.html">7.10.1 release notes</a>
-<li><a href="relnotes-7.10.html">7.10 release notes</a>
-<li><a href="relnotes-7.9.2.html">7.9.2 release notes</a>
-<li><a href="relnotes-7.9.1.html">7.9.1 release notes</a>
-<li><a href="relnotes-7.9.html">7.9 release notes</a>
-<li><a href="relnotes-7.8.3.html">7.8.3 release notes</a>
-<li><a href="relnotes-7.8.2.html">7.8.2 release notes</a>
-<li><a href="relnotes-7.8.1.html">7.8.1 release notes</a>
-<li><a href="relnotes-7.8.html">7.8 release notes</a>
-<li><a href="relnotes-7.7.1.html">7.7.1 release notes</a>
-<li><a href="relnotes-7.7.html">7.7 release notes</a>
-<li><a href="relnotes-7.6.1.html">7.6.1 release notes</a>
-<li><a href="relnotes-7.6.html">7.6 release notes</a>
-<li><a href="relnotes-7.5.2.html">7.5.2 release notes</a>
-<li><a href="relnotes-7.5.1.html">7.5.1 release notes</a>
-<li><a href="relnotes-7.5.html">7.5 release notes</a>
-<li><a href="relnotes-7.4.4.html">7.4.4 release notes</a>
-<li><a href="relnotes-7.4.3.html">7.4.3 release notes</a>
-<li><a href="relnotes-7.4.2.html">7.4.2 release notes</a>
-<li><a href="relnotes-7.4.1.html">7.4.1 release notes</a>
-<li><a href="relnotes-7.4.html">7.4 release notes</a>
-<li><a href="relnotes-7.3.html">7.3 release notes</a>
-<li><a href="relnotes-7.2.html">7.2 release notes</a>
-<li><a href="relnotes-7.1.html">7.1 release notes</a>
-<li><a href="relnotes-7.0.4.html">7.0.4 release notes</a>
-<li><a href="relnotes-7.0.3.html">7.0.3 release notes</a>
-<li><a href="relnotes-7.0.2.html">7.0.2 release notes</a>
-<li><a href="relnotes-7.0.1.html">7.0.1 release notes</a>
-<li><a href="relnotes-7.0.html">7.0 release notes</a>
-<li><a href="relnotes-6.5.3.html">6.5.3 release notes</a>
-<li><a href="relnotes-6.5.2.html">6.5.2 release notes</a>
-<li><a href="relnotes-6.5.1.html">6.5.1 release notes</a>
-<li><a href="relnotes-6.5.html">6.5 release notes</a>
-<li><a href="relnotes-6.4.2.html">6.4.2 release notes</a>
-<li><a href="relnotes-6.4.1.html">6.4.1 release notes</a>
-<li><a href="relnotes-6.4.html">6.4 release notes</a>
+<li><a href="relnotes/9.2.html">9.2 release notes</a>
+<li><a href="relnotes/9.1.3.html">9.1.3 release notes</a>
+<li><a href="relnotes/9.1.2.html">9.1.2 release notes</a>
+<li><a href="relnotes/9.1.1.html">9.1.1 release notes</a>
+<li><a href="relnotes/9.1.html">9.1 release notes</a>
+<li><a href="relnotes/9.0.3.html">9.0.3 release notes</a>
+<li><a href="relnotes/9.0.2.html">9.0.2 release notes</a>
+<li><a href="relnotes/9.0.1.html">9.0.1 release notes</a>
+<li><a href="relnotes/9.0.html">9.0 release notes</a>
+<li><a href="relnotes/8.0.5.html">8.0.5 release notes</a>
+<li><a href="relnotes/8.0.4.html">8.0.4 release notes</a>
+<li><a href="relnotes/8.0.3.html">8.0.3 release notes</a>
+<li><a href="relnotes/8.0.2.html">8.0.2 release notes</a>
+<li><a href="relnotes/8.0.1.html">8.0.1 release notes</a>
+<li><a href="relnotes/8.0.html">8.0 release notes</a>
+<li><a href="relnotes/7.11.2.html">7.11.2 release notes</a>
+<li><a href="relnotes/7.11.1.html">7.11.1 release notes</a>
+<li><a href="relnotes/7.11.html">7.11 release notes</a>
+<li><a href="relnotes/7.10.3.html">7.10.3 release notes</a>
+<li><a href="relnotes/7.10.2.html">7.10.2 release notes</a>
+<li><a href="relnotes/7.10.1.html">7.10.1 release notes</a>
+<li><a href="relnotes/7.10.html">7.10 release notes</a>
+<li><a href="relnotes/7.9.2.html">7.9.2 release notes</a>
+<li><a href="relnotes/7.9.1.html">7.9.1 release notes</a>
+<li><a href="relnotes/7.9.html">7.9 release notes</a>
+<li><a href="relnotes/7.8.3.html">7.8.3 release notes</a>
+<li><a href="relnotes/7.8.2.html">7.8.2 release notes</a>
+<li><a href="relnotes/7.8.1.html">7.8.1 release notes</a>
+<li><a href="relnotes/7.8.html">7.8 release notes</a>
+<li><a href="relnotes/7.7.1.html">7.7.1 release notes</a>
+<li><a href="relnotes/7.7.html">7.7 release notes</a>
+<li><a href="relnotes/7.6.1.html">7.6.1 release notes</a>
+<li><a href="relnotes/7.6.html">7.6 release notes</a>
+<li><a href="relnotes/7.5.2.html">7.5.2 release notes</a>
+<li><a href="relnotes/7.5.1.html">7.5.1 release notes</a>
+<li><a href="relnotes/7.5.html">7.5 release notes</a>
+<li><a href="relnotes/7.4.4.html">7.4.4 release notes</a>
+<li><a href="relnotes/7.4.3.html">7.4.3 release notes</a>
+<li><a href="relnotes/7.4.2.html">7.4.2 release notes</a>
+<li><a href="relnotes/7.4.1.html">7.4.1 release notes</a>
+<li><a href="relnotes/7.4.html">7.4 release notes</a>
+<li><a href="relnotes/7.3.html">7.3 release notes</a>
+<li><a href="relnotes/7.2.html">7.2 release notes</a>
+<li><a href="relnotes/7.1.html">7.1 release notes</a>
+<li><a href="relnotes/7.0.4.html">7.0.4 release notes</a>
+<li><a href="relnotes/7.0.3.html">7.0.3 release notes</a>
+<li><a href="relnotes/7.0.2.html">7.0.2 release notes</a>
+<li><a href="relnotes/7.0.1.html">7.0.1 release notes</a>
+<li><a href="relnotes/7.0.html">7.0 release notes</a>
+<li><a href="relnotes/6.5.3.html">6.5.3 release notes</a>
+<li><a href="relnotes/6.5.2.html">6.5.2 release notes</a>
+<li><a href="relnotes/6.5.1.html">6.5.1 release notes</a>
+<li><a href="relnotes/6.5.html">6.5 release notes</a>
+<li><a href="relnotes/6.4.2.html">6.4.2 release notes</a>
+<li><a href="relnotes/6.4.1.html">6.4.1 release notes</a>
+<li><a href="relnotes/6.4.html">6.4 release notes</a>
</ul>
<p>
@@ -81,29 +85,31 @@ Versions of Mesa prior to 6.4 are summarized in the
</p>
<ul>
-<li><a href="RELNOTES-6.3.2">RELNOTES-6.3.2</a>
-<li><a href="RELNOTES-6.3">RELNOTES-6.3</a>
-<li><a href="RELNOTES-6.2.1">RELNOTES-6.2.1</a>
-<li><a href="RELNOTES-6.2">RELNOTES-6.2</a>
-<li><a href="RELNOTES-6.1">RELNOTES-6.1</a>
-<li><a href="RELNOTES-6.0">RELNOTES-6.0</a>
-<li><a href="RELNOTES-5.1">RELNOTES-5.1</a>
-<li><a href="RELNOTES-5.0.2">RELNOTES-5.0.2</a>
-<li><a href="RELNOTES-5.0.1">RELNOTES-5.0.1</a>
-<li><a href="RELNOTES-5.0">RELNOTES-5.0</a>
-<li><a href="RELNOTES-4.1">RELNOTES-4.1</a>
-<li><a href="RELNOTES-4.0.3">RELNOTES-4.0.3</a>
-<li><a href="RELNOTES-4.0.2">RELNOTES-4.0.2</a>
-<li><a href="RELNOTES-4.0.1">RELNOTES-4.0.1</a>
-<li><a href="RELNOTES-4.0">RELNOTES-4.0</a>
-<li><a href="RELNOTES-3.5">RELNOTES-3.5</a>
-<li><a href="RELNOTES-3.4.2">RELNOTES-3.4.2</a>
-<li><a href="RELNOTES-3.4.1">RELNOTES-3.4.1</a>
-<li><a href="RELNOTES-3.4">RELNOTES-3.4</a>
-<li><a href="RELNOTES-3.3">RELNOTES-3.3</a>
-<li><a href="RELNOTES-3.2.1">RELNOTES-3.2.1</a>
-<li><a href="RELNOTES-3.2">RELNOTES-3.2</a>
-<li><a href="RELNOTES-3.1">RELNOTES-3.1</a>
+<li><a href="relnotes/6.3.2">6.3.2 release notes</a>
+<li><a href="relnotes/6.3.1">6.3.1 release notes</a>
+<li><a href="relnotes/6.3">6.3 release notes</a>
+<li><a href="relnotes/6.2.1">6.2.1 release notes</a>
+<li><a href="relnotes/6.2">6.2 release notes</a>
+<li><a href="relnotes/6.1">6.1 release notes</a>
+<li><a href="relnotes/6.0.1">6.0.1 release notes</a>
+<li><a href="relnotes/6.0">6.0 release notes</a>
+<li><a href="relnotes/5.1">5.1 release notes</a>
+<li><a href="relnotes/5.0.2">5.0.2 release notes</a>
+<li><a href="relnotes/5.0.1">5.0.1 release notes</a>
+<li><a href="relnotes/5.0">5.0 release notes</a>
+<li><a href="relnotes/4.1">4.1 release notes</a>
+<li><a href="relnotes/4.0.3">4.0.3 release notes</a>
+<li><a href="relnotes/4.0.2">4.0.2 release notes</a>
+<li><a href="relnotes/4.0.1">4.0.1 release notes</a>
+<li><a href="relnotes/4.0">4.0 release notes</a>
+<li><a href="relnotes/3.5">3.5 release notes</a>
+<li><a href="relnotes/3.4.2">3.4.2 release notes</a>
+<li><a href="relnotes/3.4.1">3.4.1 release notes</a>
+<li><a href="relnotes/3.4">3.4 release notes</a>
+<li><a href="relnotes/3.3">3.3 release notes</a>
+<li><a href="relnotes/3.2.1">3.2.1 release notes</a>
+<li><a href="relnotes/3.2">3.2 release notes</a>
+<li><a href="relnotes/3.1">3.1 release notes</a>
</ul>
</div>
diff --git a/mesalib/docs/RELNOTES-3.1 b/mesalib/docs/relnotes/3.1
index 65324eb49..65324eb49 100644
--- a/mesalib/docs/RELNOTES-3.1
+++ b/mesalib/docs/relnotes/3.1
diff --git a/mesalib/docs/RELNOTES-3.2 b/mesalib/docs/relnotes/3.2
index ec7d4f8dc..ec7d4f8dc 100644
--- a/mesalib/docs/RELNOTES-3.2
+++ b/mesalib/docs/relnotes/3.2
diff --git a/mesalib/docs/RELNOTES-3.2.1 b/mesalib/docs/relnotes/3.2.1
index d34efcc86..d34efcc86 100644
--- a/mesalib/docs/RELNOTES-3.2.1
+++ b/mesalib/docs/relnotes/3.2.1
diff --git a/mesalib/docs/RELNOTES-3.3 b/mesalib/docs/relnotes/3.3
index 3850767bb..3850767bb 100644
--- a/mesalib/docs/RELNOTES-3.3
+++ b/mesalib/docs/relnotes/3.3
diff --git a/mesalib/docs/RELNOTES-3.4 b/mesalib/docs/relnotes/3.4
index 657ccdaab..657ccdaab 100644
--- a/mesalib/docs/RELNOTES-3.4
+++ b/mesalib/docs/relnotes/3.4
diff --git a/mesalib/docs/RELNOTES-3.4.1 b/mesalib/docs/relnotes/3.4.1
index 73d75c64d..73d75c64d 100644
--- a/mesalib/docs/RELNOTES-3.4.1
+++ b/mesalib/docs/relnotes/3.4.1
diff --git a/mesalib/docs/RELNOTES-3.4.2 b/mesalib/docs/relnotes/3.4.2
index 9caea900d..9caea900d 100644
--- a/mesalib/docs/RELNOTES-3.4.2
+++ b/mesalib/docs/relnotes/3.4.2
diff --git a/mesalib/docs/RELNOTES-3.5 b/mesalib/docs/relnotes/3.5
index b2aa1b852..b2aa1b852 100644
--- a/mesalib/docs/RELNOTES-3.5
+++ b/mesalib/docs/relnotes/3.5
diff --git a/mesalib/docs/RELNOTES-4.0 b/mesalib/docs/relnotes/4.0
index 2f729db15..2f729db15 100644
--- a/mesalib/docs/RELNOTES-4.0
+++ b/mesalib/docs/relnotes/4.0
diff --git a/mesalib/docs/RELNOTES-4.0.1 b/mesalib/docs/relnotes/4.0.1
index e84df6bf8..e84df6bf8 100644
--- a/mesalib/docs/RELNOTES-4.0.1
+++ b/mesalib/docs/relnotes/4.0.1
diff --git a/mesalib/docs/RELNOTES-4.0.2 b/mesalib/docs/relnotes/4.0.2
index b476956ba..b476956ba 100644
--- a/mesalib/docs/RELNOTES-4.0.2
+++ b/mesalib/docs/relnotes/4.0.2
diff --git a/mesalib/docs/RELNOTES-4.0.3 b/mesalib/docs/relnotes/4.0.3
index 0b3e34bef..0b3e34bef 100644
--- a/mesalib/docs/RELNOTES-4.0.3
+++ b/mesalib/docs/relnotes/4.0.3
diff --git a/mesalib/docs/RELNOTES-4.1 b/mesalib/docs/relnotes/4.1
index 24e9299eb..24e9299eb 100644
--- a/mesalib/docs/RELNOTES-4.1
+++ b/mesalib/docs/relnotes/4.1
diff --git a/mesalib/docs/RELNOTES-5.0 b/mesalib/docs/relnotes/5.0
index 1b22996d8..1b22996d8 100644
--- a/mesalib/docs/RELNOTES-5.0
+++ b/mesalib/docs/relnotes/5.0
diff --git a/mesalib/docs/RELNOTES-5.0.1 b/mesalib/docs/relnotes/5.0.1
index f37e9c4a7..f37e9c4a7 100644
--- a/mesalib/docs/RELNOTES-5.0.1
+++ b/mesalib/docs/relnotes/5.0.1
diff --git a/mesalib/docs/RELNOTES-5.0.2 b/mesalib/docs/relnotes/5.0.2
index d0e05b2c7..d0e05b2c7 100644
--- a/mesalib/docs/RELNOTES-5.0.2
+++ b/mesalib/docs/relnotes/5.0.2
diff --git a/mesalib/docs/RELNOTES-5.1 b/mesalib/docs/relnotes/5.1
index aed6e102b..59b7964a0 100644
--- a/mesalib/docs/RELNOTES-5.1
+++ b/mesalib/docs/relnotes/5.1
@@ -106,7 +106,7 @@ Vertex/Fragment program debugger
GL_MESA_program_debug is an experimental extension to support
interactive debugging of vertex and fragment programs. See the
-docs/MESA_program_debug.spec file for details.
+docs/specs/OLD/MESA_program_debug.spec file for details.
The bulk of the vertex/fragment program debugger is implemented
outside of Mesa. The GL_MESA_program_debug extension just has minimal
diff --git a/mesalib/docs/RELNOTES-6.0 b/mesalib/docs/relnotes/6.0
index 1a3c2fb1a..1a3c2fb1a 100644
--- a/mesalib/docs/RELNOTES-6.0
+++ b/mesalib/docs/relnotes/6.0
diff --git a/mesalib/docs/RELNOTES-6.0.1 b/mesalib/docs/relnotes/6.0.1
index 1444b9fc8..1444b9fc8 100644
--- a/mesalib/docs/RELNOTES-6.0.1
+++ b/mesalib/docs/relnotes/6.0.1
diff --git a/mesalib/docs/RELNOTES-6.1 b/mesalib/docs/relnotes/6.1
index 8de64d1f1..8de64d1f1 100644
--- a/mesalib/docs/RELNOTES-6.1
+++ b/mesalib/docs/relnotes/6.1
diff --git a/mesalib/docs/RELNOTES-6.2 b/mesalib/docs/relnotes/6.2
index 06cfba0c7..06cfba0c7 100644
--- a/mesalib/docs/RELNOTES-6.2
+++ b/mesalib/docs/relnotes/6.2
diff --git a/mesalib/docs/RELNOTES-6.2.1 b/mesalib/docs/relnotes/6.2.1
index c7baa5d42..c7baa5d42 100644
--- a/mesalib/docs/RELNOTES-6.2.1
+++ b/mesalib/docs/relnotes/6.2.1
diff --git a/mesalib/docs/RELNOTES-6.3 b/mesalib/docs/relnotes/6.3
index 6b4dfaaf9..6b4dfaaf9 100644
--- a/mesalib/docs/RELNOTES-6.3
+++ b/mesalib/docs/relnotes/6.3
diff --git a/mesalib/docs/RELNOTES-6.3.1 b/mesalib/docs/relnotes/6.3.1
index eacc952ae..eacc952ae 100644
--- a/mesalib/docs/RELNOTES-6.3.1
+++ b/mesalib/docs/relnotes/6.3.1
diff --git a/mesalib/docs/RELNOTES-6.3.2 b/mesalib/docs/relnotes/6.3.2
index e5243ef78..e5243ef78 100644
--- a/mesalib/docs/RELNOTES-6.3.2
+++ b/mesalib/docs/relnotes/6.3.2
diff --git a/mesalib/docs/RELNOTES-6.4 b/mesalib/docs/relnotes/6.4
index 1a945a103..1a945a103 100644
--- a/mesalib/docs/RELNOTES-6.4
+++ b/mesalib/docs/relnotes/6.4
diff --git a/mesalib/docs/relnotes-6.4.1.html b/mesalib/docs/relnotes/6.4.1.html
index d050f7935..c9df78786 100644
--- a/mesalib/docs/relnotes-6.4.1.html
+++ b/mesalib/docs/relnotes/6.4.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.4.1 / November 29, 2006</h1>
diff --git a/mesalib/docs/relnotes-6.4.2.html b/mesalib/docs/relnotes/6.4.2.html
index e894e73e2..4c8a75c9b 100644
--- a/mesalib/docs/relnotes-6.4.2.html
+++ b/mesalib/docs/relnotes/6.4.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.4.2 / February 2, 2006</h1>
diff --git a/mesalib/docs/relnotes-6.4.html b/mesalib/docs/relnotes/6.4.html
index 9dfa74668..9f7d9b8de 100644
--- a/mesalib/docs/relnotes-6.4.html
+++ b/mesalib/docs/relnotes/6.4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.4 / October 24, 2005</h1>
diff --git a/mesalib/docs/relnotes-6.5.1.html b/mesalib/docs/relnotes/6.5.1.html
index e600c1757..97a705a51 100644
--- a/mesalib/docs/relnotes-6.5.1.html
+++ b/mesalib/docs/relnotes/6.5.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.5.1 Release Notes / September 15, 2006</h1>
diff --git a/mesalib/docs/relnotes-6.5.2.html b/mesalib/docs/relnotes/6.5.2.html
index f73dce18b..b14f24f28 100644
--- a/mesalib/docs/relnotes-6.5.2.html
+++ b/mesalib/docs/relnotes/6.5.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.5.2 Release Notes / December 2, 2006</h1>
diff --git a/mesalib/docs/relnotes-6.5.3.html b/mesalib/docs/relnotes/6.5.3.html
index 0e6526c04..207a36cad 100644
--- a/mesalib/docs/relnotes-6.5.3.html
+++ b/mesalib/docs/relnotes/6.5.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.5.3 Release Notes / April 27, 2007</h1>
@@ -56,7 +56,7 @@ for the same reason.
<ul>
<li>OpenGL 2.0 and 2.1 API support.
<li>Entirely new Shading Language code generator. See the
-<a href="shading.html">Shading Language</a> page for more information.
+<a href="../shading.html">Shading Language</a> page for more information.
<li>Much faster software execution of vertex, fragment shaders.
<li>New vertex buffer object (vbo) infrastructure
<li>Updated glext.h file (version 39)
diff --git a/mesalib/docs/relnotes-6.5.html b/mesalib/docs/relnotes/6.5.html
index b6430a2f4..de7a99a18 100644
--- a/mesalib/docs/relnotes-6.5.html
+++ b/mesalib/docs/relnotes/6.5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 6.5 Release Notes / March 31, 2006</h1>
diff --git a/mesalib/docs/relnotes-7.0.1.html b/mesalib/docs/relnotes/7.0.1.html
index c8a2ad090..686f30d53 100644
--- a/mesalib/docs/relnotes-7.0.1.html
+++ b/mesalib/docs/relnotes/7.0.1.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.0.1 Release Notes / August 3, 2007</h1>
diff --git a/mesalib/docs/relnotes-7.0.2.html b/mesalib/docs/relnotes/7.0.2.html
index 9238d2b38..b69e5493a 100644
--- a/mesalib/docs/relnotes-7.0.2.html
+++ b/mesalib/docs/relnotes/7.0.2.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.0.2 Release Notes / November 10, 2007</h1>
diff --git a/mesalib/docs/relnotes-7.0.3.html b/mesalib/docs/relnotes/7.0.3.html
index 4fcb94dcc..ccc02e68d 100644
--- a/mesalib/docs/relnotes-7.0.3.html
+++ b/mesalib/docs/relnotes/7.0.3.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.0.3 Release Notes / April 4, 2008</h1>
diff --git a/mesalib/docs/relnotes-7.0.4.html b/mesalib/docs/relnotes/7.0.4.html
index 66b85c409..dbaf1b49b 100644
--- a/mesalib/docs/relnotes-7.0.4.html
+++ b/mesalib/docs/relnotes/7.0.4.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.0.4 Release Notes / August 16, 2008</h1>
diff --git a/mesalib/docs/relnotes-7.0.html b/mesalib/docs/relnotes/7.0.html
index 3240bb298..850a5dcaf 100644
--- a/mesalib/docs/relnotes-7.0.html
+++ b/mesalib/docs/relnotes/7.0.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.0 Release Notes / June 22, 2007</h1>
diff --git a/mesalib/docs/relnotes-7.1.html b/mesalib/docs/relnotes/7.1.html
index 07f5ac900..03b2f361c 100644
--- a/mesalib/docs/relnotes-7.1.html
+++ b/mesalib/docs/relnotes/7.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.1 Release Notes / August 26, 2008</h1>
diff --git a/mesalib/docs/relnotes-7.10.1.html b/mesalib/docs/relnotes/7.10.1.html
index 675bab225..260cb9d26 100644
--- a/mesalib/docs/relnotes-7.10.1.html
+++ b/mesalib/docs/relnotes/7.10.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.10.1 Release Notes / March 2, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.10.2.html b/mesalib/docs/relnotes/7.10.2.html
index 753eb6ceb..4703f5ebd 100644
--- a/mesalib/docs/relnotes-7.10.2.html
+++ b/mesalib/docs/relnotes/7.10.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.10.2 Release Notes / April 6, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.10.3.html b/mesalib/docs/relnotes/7.10.3.html
index db655179a..94527354d 100644
--- a/mesalib/docs/relnotes-7.10.3.html
+++ b/mesalib/docs/relnotes/7.10.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.10.3 Release Notes / June 13, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.10.html b/mesalib/docs/relnotes/7.10.html
index 6bf8f30e5..a88811e50 100644
--- a/mesalib/docs/relnotes-7.10.html
+++ b/mesalib/docs/relnotes/7.10.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.10 Release Notes / January 7, 2011</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
@@ -699,7 +699,7 @@ bc644be551ed585fc4f66c16b64a91c9 MesaGLUT-7.10.tar.gz
<li>st/egl: Plug pbuffer leaks.</li>
<li>st/egl: Fix eglCopyBuffers.</li>
<li>st/egl: Assorted fixes for dri2_display_get_configs.</li>
- <li>docs/egl: Update egl.html.</li>
+ <li>docs/egl: Update ../egl.html.</li>
<li>st/egl: Fix eglChooseConfig when configs is NULL.</li>
<li>docs: Add an example for EGL_DRIVERS_PATH.</li>
<li>autoconf: Fix --with-driver=xlib --enable-openvg.</li>
diff --git a/mesalib/docs/relnotes-7.11.1.html b/mesalib/docs/relnotes/7.11.1.html
index 2c23acb82..7579ef579 100644
--- a/mesalib/docs/relnotes-7.11.1.html
+++ b/mesalib/docs/relnotes/7.11.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.11.1 Release Notes / November 17, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.11.2.html b/mesalib/docs/relnotes/7.11.2.html
index 985ce879a..9b89fa38c 100644
--- a/mesalib/docs/relnotes-7.11.2.html
+++ b/mesalib/docs/relnotes/7.11.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.11.2 Release Notes / November 27, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.11.html b/mesalib/docs/relnotes/7.11.html
index 8573908c5..721da9ca3 100644
--- a/mesalib/docs/relnotes-7.11.html
+++ b/mesalib/docs/relnotes/7.11.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.11 Release Notes / July 31, 2011</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.2.html b/mesalib/docs/relnotes/7.2.html
index 596af3fca..4c1ae7fd8 100644
--- a/mesalib/docs/relnotes-7.2.html
+++ b/mesalib/docs/relnotes/7.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.2 Release Notes / 20 September 2008</h1>
diff --git a/mesalib/docs/relnotes-7.3.html b/mesalib/docs/relnotes/7.3.html
index 409274f77..7ff5ed1fa 100644
--- a/mesalib/docs/relnotes-7.3.html
+++ b/mesalib/docs/relnotes/7.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.3 Release Notes / 22 January 2009</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.4.1.html b/mesalib/docs/relnotes/7.4.1.html
index 9b584a02b..104f185e3 100644
--- a/mesalib/docs/relnotes-7.4.1.html
+++ b/mesalib/docs/relnotes/7.4.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.4.1 Release Notes / 18 April 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.4.2.html b/mesalib/docs/relnotes/7.4.2.html
index 79652605f..770db8f29 100644
--- a/mesalib/docs/relnotes-7.4.2.html
+++ b/mesalib/docs/relnotes/7.4.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.4.2 Release Notes / May 15, 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.4.3.html b/mesalib/docs/relnotes/7.4.3.html
index 25e2bd12b..ebe973012 100644
--- a/mesalib/docs/relnotes-7.4.3.html
+++ b/mesalib/docs/relnotes/7.4.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.4.3 Release Notes / 19 June 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.4.4.html b/mesalib/docs/relnotes/7.4.4.html
index 667805d88..41fec5a2c 100644
--- a/mesalib/docs/relnotes-7.4.4.html
+++ b/mesalib/docs/relnotes/7.4.4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.4.4 Release Notes / 23 June 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.4.html b/mesalib/docs/relnotes/7.4.html
index f29cbd942..0bfe68e2a 100644
--- a/mesalib/docs/relnotes-7.4.html
+++ b/mesalib/docs/relnotes/7.4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.4 Release Notes / 27 March 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.5.1.html b/mesalib/docs/relnotes/7.5.1.html
index 61ab293f9..cf5a5691d 100644
--- a/mesalib/docs/relnotes-7.5.1.html
+++ b/mesalib/docs/relnotes/7.5.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.5.1 Release Notes, 3 September 2009</h1>
@@ -29,7 +29,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.5.2.html b/mesalib/docs/relnotes/7.5.2.html
index 350ce4383..13389fdb4 100644
--- a/mesalib/docs/relnotes-7.5.2.html
+++ b/mesalib/docs/relnotes/7.5.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.5.2 Release Notes, 28 September 2009</h1>
@@ -29,7 +29,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.5.html b/mesalib/docs/relnotes/7.5.html
index e4318060c..9e96aa329 100644
--- a/mesalib/docs/relnotes-7.5.html
+++ b/mesalib/docs/relnotes/7.5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.5 Release Notes / 17 July 2009</h1>
@@ -31,7 +31,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
<p>
diff --git a/mesalib/docs/relnotes-7.6.1.html b/mesalib/docs/relnotes/7.6.1.html
index 086f21f5f..bc84f5725 100644
--- a/mesalib/docs/relnotes-7.6.1.html
+++ b/mesalib/docs/relnotes/7.6.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.6.1 Release Notes, 21 December 2009</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.6.html b/mesalib/docs/relnotes/7.6.html
index 30e9f7eea..86ad4a848 100644
--- a/mesalib/docs/relnotes-7.6.html
+++ b/mesalib/docs/relnotes/7.6.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.6 Release Notes, 28 September 2009</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
@@ -48,7 +48,7 @@ c49c19c2bbef4f3b7f1389974dff25f4 MesaGLUT-7.6.zip
<h2>New features</h2>
<ul>
-<li><a href="openvg.html">OpenVG</a> front-end (state tracker for Gallium).
+<li><a href="../openvg.html">OpenVG</a> front-end (state tracker for Gallium).
This was written by Zack Rusin at Tungsten Graphics.
<li>GL_ARB_vertex_array_object and GL_APPLE_vertex_array_object extensions
(supported in Gallium drivers, Intel DRI drivers, and software drivers)</li>
diff --git a/mesalib/docs/relnotes-7.7.1.html b/mesalib/docs/relnotes/7.7.1.html
index 00805ea5f..3a295a895 100644
--- a/mesalib/docs/relnotes-7.7.1.html
+++ b/mesalib/docs/relnotes/7.7.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.7.1 Release Notes / March 28, 2010</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.7.html b/mesalib/docs/relnotes/7.7.html
index 7ee9a1bfd..46ee7c2a8 100644
--- a/mesalib/docs/relnotes-7.7.html
+++ b/mesalib/docs/relnotes/7.7.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.7 Release Notes / 21 December 2009</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.8.1.html b/mesalib/docs/relnotes/7.8.1.html
index f7b4dfb8e..72317ca20 100644
--- a/mesalib/docs/relnotes-7.8.1.html
+++ b/mesalib/docs/relnotes/7.8.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.8.1 Release Notes / April 5, 2010</h1>
@@ -29,7 +29,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.8.2.html b/mesalib/docs/relnotes/7.8.2.html
index 6d076a3ac..ab18402d9 100644
--- a/mesalib/docs/relnotes-7.8.2.html
+++ b/mesalib/docs/relnotes/7.8.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.8.2 Release Notes / June 17, 2010</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.8.3.html b/mesalib/docs/relnotes/7.8.3.html
index f63a94dba..ad885f2ef 100644
--- a/mesalib/docs/relnotes-7.8.3.html
+++ b/mesalib/docs/relnotes/7.8.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.8.3 Release Notes / (date tbd)</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.8.html b/mesalib/docs/relnotes/7.8.html
index 8d8bc653f..d8cc3e9a9 100644
--- a/mesalib/docs/relnotes-7.8.html
+++ b/mesalib/docs/relnotes/7.8.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.8 Release Notes / March 28, 2010</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
@@ -53,8 +53,8 @@ b54581aeb79b585b158d6a32f94feff2 MesaGLUT-7.8.zip
<li>GL_ARB_fragment_coord_conventions extension (for swrast, i965, and Gallium drivers)
<li>GL_EXT_texture_array extension (swrast driver only)
<li>GL_APPLE_object_purgeable extension (swrast and i945/i965 DRI drivers)
-<li>Much improved support for <a href="egl.html">EGL in Mesa</a>
-<li>New state trackers for <a href="opengles.html">OpenGL ES 1.1 and 2.0</a>
+<li>Much improved support for <a href="../egl.html">EGL in Mesa</a>
+<li>New state trackers for <a href="../opengles.html">OpenGL ES 1.1 and 2.0</a>
<li>Dedicated documentation for Gallium
</ul>
diff --git a/mesalib/docs/relnotes-7.9.1.html b/mesalib/docs/relnotes/7.9.1.html
index 5d5b4a983..7a9835e1b 100644
--- a/mesalib/docs/relnotes-7.9.1.html
+++ b/mesalib/docs/relnotes/7.9.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.9.1 Release Notes / January 7, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.9.2.html b/mesalib/docs/relnotes/7.9.2.html
index 9d4f7ecda..c98d7f821 100644
--- a/mesalib/docs/relnotes-7.9.2.html
+++ b/mesalib/docs/relnotes/7.9.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.9.2 Release Notes / March 2, 2011</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-7.9.html b/mesalib/docs/relnotes/7.9.html
index aa10e2f68..1e6baba7a 100644
--- a/mesalib/docs/relnotes-7.9.html
+++ b/mesalib/docs/relnotes/7.9.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 7.9 Release Notes / October 4, 2010</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 2.1.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
@@ -46,7 +46,7 @@ cd2b6ecec759b0457475e94bbb38fedb MesaLib-7.9.zip
<h2>New features</h2>
<ul>
<li>New, improved GLSL compiler written by Intel.
- See the <a href="shading.html"> Shading Language</a> page for
+ See the <a href="../shading.html"> Shading Language</a> page for
more information.
<li>New, very experimental Gallium driver for R600-R700 Radeons.
<li>Support for AMD Evergreen-based Radeons (HD 5xxx)
diff --git a/mesalib/docs/relnotes-8.0.1.html b/mesalib/docs/relnotes/8.0.1.html
index 33c61982c..3cf61adb6 100644
--- a/mesalib/docs/relnotes-8.0.1.html
+++ b/mesalib/docs/relnotes/8.0.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0.1 Release Notes / February 16, 2012</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-8.0.2.html b/mesalib/docs/relnotes/8.0.2.html
index 460917504..9bb43a72b 100644
--- a/mesalib/docs/relnotes-8.0.2.html
+++ b/mesalib/docs/relnotes/8.0.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0.2 Release Notes / March 21, 2012</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-8.0.3.html b/mesalib/docs/relnotes/8.0.3.html
index 1a5ecbb51..0586e2829 100644
--- a/mesalib/docs/relnotes-8.0.3.html
+++ b/mesalib/docs/relnotes/8.0.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0.3 Release Notes / May 18, 2012</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-8.0.4.html b/mesalib/docs/relnotes/8.0.4.html
index 4ceaad2c2..00b31520d 100644
--- a/mesalib/docs/relnotes-8.0.4.html
+++ b/mesalib/docs/relnotes/8.0.4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0.4 Release Notes / July 10, 2012</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-8.0.5.html b/mesalib/docs/relnotes/8.0.5.html
index eb7595bb3..f8aeae8d8 100644
--- a/mesalib/docs/relnotes-8.0.5.html
+++ b/mesalib/docs/relnotes/8.0.5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0.5 Release Notes / October 24, 2012</h1>
@@ -25,7 +25,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-8.0.html b/mesalib/docs/relnotes/8.0.html
index 6987544ac..d19ed3c95 100644
--- a/mesalib/docs/relnotes-8.0.html
+++ b/mesalib/docs/relnotes/8.0.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 8.0 Release Notes / February 9, 2012</h1>
@@ -27,7 +27,7 @@ glGetString(GL_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 3.0.
</p>
<p>
-See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+See the <a href="../install.html">Compiling/Installing page</a> for prerequisites
for DRI hardware acceleration.
</p>
diff --git a/mesalib/docs/relnotes-9.0.1.html b/mesalib/docs/relnotes/9.0.1.html
index 50e8b70fd..cf8156d2d 100644
--- a/mesalib/docs/relnotes-9.0.1.html
+++ b/mesalib/docs/relnotes/9.0.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.0.1 Release Notes / November 16th, 2012</h1>
diff --git a/mesalib/docs/relnotes-9.0.2.html b/mesalib/docs/relnotes/9.0.2.html
index 65b9b1116..affc23d8b 100644
--- a/mesalib/docs/relnotes-9.0.2.html
+++ b/mesalib/docs/relnotes/9.0.2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.0.2 Release Notes / January 22th, 2013</h1>
diff --git a/mesalib/docs/relnotes-9.0.3.html b/mesalib/docs/relnotes/9.0.3.html
index e8ec62964..95a6b7936 100644
--- a/mesalib/docs/relnotes-9.0.3.html
+++ b/mesalib/docs/relnotes/9.0.3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.0.3 Release Notes / February 21th, 2013</h1>
diff --git a/mesalib/docs/relnotes-9.0.html b/mesalib/docs/relnotes/9.0.html
index 16b1417f3..1810ad4c6 100644
--- a/mesalib/docs/relnotes-9.0.html
+++ b/mesalib/docs/relnotes/9.0.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.0 Release Notes / October 8, 2012</h1>
diff --git a/mesalib/docs/relnotes-9.1.1.html b/mesalib/docs/relnotes/9.1.1.html
index a73c97424..5c1707436 100644
--- a/mesalib/docs/relnotes-9.1.1.html
+++ b/mesalib/docs/relnotes/9.1.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.1.1 Release Notes / March 19th, 2013</h1>
diff --git a/mesalib/docs/relnotes/9.1.2.html b/mesalib/docs/relnotes/9.1.2.html
new file mode 100644
index 000000000..885457af2
--- /dev/null
+++ b/mesalib/docs/relnotes/9.1.2.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 9.1.2 Release Notes / April 30th, 2013</h1>
+
+<p>
+Mesa 9.1.2 is a bug fix release which fixes bugs found since the 9.1.1 release.
+</p>
+<p>
+Mesa 9.1 implements the OpenGL 3.1 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.1. OpenGL
+3.1 is <strong>only</strong> available if requested at context creation
+because GL_ARB_compatibility is not supported.
+</p>
+
+<h2>MD5 checksums</h2>
+<pre>
+df2aab86ff4a510ce5b0d074caa0a59f MesaLib-9.1.2.tar.bz2
+415c2bc3a9eb571aafbfa474ebf5a2e0 MesaLib-9.1.2.tar.gz
+b1ae5a4d9255953980bc9254f5323420 MesaLib-9.1.2.zip
+</pre>
+
+<h2>New features</h2>
+<p>None.</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=44567">Bug 44567</a> - [965gm] green artifacts when using GLSL in XBMC</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59238">Bug 59238</a> - many new symbols in libxatracker after recent automake work</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59445">Bug 59445</a> - [SNB/IVB/HSW Bisected]Oglc draw-buffers2(advanced.blending.none) segfault</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59495">Bug 59495</a> - [i965 Bisected]Oglc fbblit(advanced.blitFb-3d-cube.mirror.both) fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60503">Bug 60503</a> - [r300g] Unigine Heaven 3.0: all objects are black</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60510">Bug 60510</a> - Firefox 18.0.2 Crash On Nvidia GeForce2</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61197">Bug 61197</a> - [SNB Bisected] kwin_gles screen corruption</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61317">Bug 61317</a> - [IVB] corrupt rendering with UBOs</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61395">Bug 61395</a> - glEdgeFlag can't be set to false</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61947">Bug 61947</a> - nullpointer dereference causes xorg-server segfault when nouveau DRI driver is loaded</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62357">Bug 62357</a> - llvmpipe: Fragment Shader with &quot;return&quot; in main causes back output</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62434">Bug 62434</a> - [bisected] 3284.073] (EE) AIGLX error: dlopen of /usr/lib/xorg/modules/dri/r600_dri.so failed (/usr/lib/libllvmradeon9.2.0.so: undefined symbol: lp_build_tgsi_intrinsic)</li>
+
+<li><a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=349437">Debian bug #349437</a> - mesa - FTBFS: error: 'IEEE_ONE' undeclared</li>
+
+<li><a href="http://bugzilla.redhat.com/show_bug.cgi?id=918661">Redhat bug #918661</a> - crash in routine Avogadro UI manipulation</li>
+
+</ul>
+
+<h2>Changes</h2>
+<p>The full set of changes can be viewed by using the following GIT command:</p>
+
+<pre>
+ git log mesa-9.1.1..mesa-9.1.2
+</pre>
+
+<p>Adam Jackson (2):</p>
+<ul>
+ <li>glx: Build with VISIBILITY_CFLAGS in automake</li>
+ <li>linux: Don't emit a .note.ABI-tag section anymore (#26663)</li>
+</ul>
+
+<p>Alan Hourihane (3):</p>
+<ul>
+ <li>Add missing GL_TEXTURE_CUBE_MAP entry in _mesa_legal_texture_dimensions</li>
+ <li>Unreference sampler object when it's currently bound to texture unit.</li>
+ <li>mesa: fix glGetInteger*(GL_SAMPLER_BINDING).</li>
+</ul>
+
+<p>Alex Deucher (1):</p>
+<ul>
+ <li>r600g: disable hyperz by default on 9.1</li>
+</ul>
+
+<p>Andreas Boll (5):</p>
+<ul>
+ <li>radeon/llvm: Link against libgallium.la to fix an undefined symbol</li>
+ <li>mesa: use ieee fp on s390 and m68k</li>
+ <li>build: Enable x86 assembler on Hurd.</li>
+ <li>osmesa: fix out-of-tree build</li>
+ <li>gallium/egl: fix out-of-tree build</li>
+</ul>
+
+<p>Anuj Phogat (1):</p>
+<ul>
+ <li>mesa: Fix FB blitting in case of zero size src or dst rect</li>
+</ul>
+
+<p>Brian Paul (4):</p>
+<ul>
+ <li>mesa: flush current state when querying GL_EDGE_FLAG</li>
+ <li>vbo: fix crash found with shared display lists</li>
+ <li>llvmpipe: tweak CMD_BLOCK_MAX and LP_SCENE_MAX_SIZE</li>
+ <li>llvmpipe: add some scene limit sanity check assertions</li>
+</ul>
+
+<p>Carl Worth (1):</p>
+<ul>
+ <li>i965: Avoid segfault in gen6_upload_state</li>
+</ul>
+
+<p>Chris Forbes (1):</p>
+<ul>
+ <li>i965/vs: Fix Gen4/5 VUE map inconsistency with gl_ClipVertex</li>
+</ul>
+
+<p>Christoph Bumiller (4):</p>
+<ul>
+ <li>nv50: fix 3D render target setup</li>
+ <li>nv50,nvc0: disable DEPTH_RANGE_NEAR/FAR clipping during blit</li>
+ <li>nv50,nvc0: fix 3d blits, restore viewport after blit</li>
+ <li>nvc0: fix for 2d engine R source formats writing RRR1 and not R001</li>
+</ul>
+
+<p>Eric Anholt (5):</p>
+<ul>
+ <li>i965/fs: Fix register allocation for uniform pull constants in 16-wide.</li>
+ <li>i965/fs: Fix broken rendering in large shaders with UBO loads.</li>
+ <li>i965/fs: Also do the gen4 SEND dependency workaround against other SENDs.</li>
+ <li>i965: Add definitions for gen7+ data cache messages.</li>
+ <li>mesa: Disable validate_ir_tree() on release builds.</li>
+</ul>
+
+<p>Ian Romanick (5):</p>
+<ul>
+ <li>docs: Add 9.1.1 release md5sums</li>
+ <li>mesa: Add previously picked commit to .cherry-ignore</li>
+ <li>glsl: Add missing bool case in glsl_type::get_scalar_type</li>
+ <li>mesa: Note that patch dbf94d1 should't actually get picked to the 9.1 branch</li>
+ <li>mesa: Bump version to 9.1.2</li>
+</ul>
+
+<p>Jan de Groot (1):</p>
+<ul>
+ <li>dri/nouveau: fix crash in nouveau_flush</li>
+</ul>
+
+<p>José Fonseca (3):</p>
+<ul>
+ <li>autotools: Add missing top-level include dir.</li>
+ <li>mesa,gallium,egl,mapi: One definition of C99 inline/__func__ to rule them all.</li>
+ <li>include: Fix build with VS 11 (i.e, 2012).</li>
+</ul>
+
+<p>Kenneth Graunke (4):</p>
+<ul>
+ <li>i965: Fix INTEL_DEBUG=shader_time for Haswell.</li>
+ <li>i965: Specialize SURFACE_STATE creation for shader time.</li>
+ <li>i965: Make INTEL_DEBUG=shader_time use the RAW surface format.</li>
+ <li>i965: Don't use texture swizzling to force alpha to 1.0 if unnecessary.</li>
+</ul>
+
+<p>Maarten Lankhorst (2):</p>
+<ul>
+ <li>gallium/build: Fix visibility CFLAGS in automake</li>
+ <li>radeon/llvm: Do not link against libgallium when building statically.</li>
+</ul>
+
+<p>Marcin Slusarz (1):</p>
+<ul>
+ <li>dri/nouveau: NV17_3D class is not available for NV1a chipset</li>
+</ul>
+
+<p>Marek Olšák (3):</p>
+<ul>
+ <li>mesa: don't allocate a texture if width or height is 0 in CopyTexImage</li>
+ <li>gallium/tgsi: fix valgrind warning</li>
+ <li>mesa: handle HALF_FLOAT like FLOAT in get_tex_rgba</li>
+</ul>
+
+<p>Martin Andersson (1):</p>
+<ul>
+ <li>r600g: Use virtual address for PIPE_QUERY_SO* in r600_emit_query_end</li>
+</ul>
+
+<p>Matt Turner (3):</p>
+<ul>
+ <li>configure.ac: Don't check for X11 unconditionally.</li>
+ <li>configure.ac: Remove stale comment about --x-* arguments.</li>
+ <li>mesa: Implement TEXTURE_IMMUTABLE_LEVELS for ES 3.0.</li>
+</ul>
+
+<p>Michel Dänzer (1):</p>
+<ul>
+ <li>radeonsi: Emit pixel shader state even when only the vertex shader changed</li>
+</ul>
+
+<p>Paul Berry (1):</p>
+<ul>
+ <li>i965: Apply depthstencil alignment workaround when doing fast clears.</li>
+</ul>
+
+<p>Roland Scheidegger (1):</p>
+<ul>
+ <li>gallivm: fix return opcode handling in main function of a shader</li>
+</ul>
+
+<p>Tapani Pälli (1):</p>
+<ul>
+ <li>intel: Fix regression in intel_create_image_from_name stride handling</li>
+</ul>
+
+<p>Tom Stellard (1):</p>
+<ul>
+ <li>r300g: Fix bug in OMOD optimization</li>
+</ul>
+
+</div>
+</body>
+</html>
diff --git a/mesalib/docs/relnotes/9.1.3.html b/mesalib/docs/relnotes/9.1.3.html
new file mode 100644
index 000000000..049bf0f07
--- /dev/null
+++ b/mesalib/docs/relnotes/9.1.3.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 9.1.3 Release Notes / May 21st, 2013</h1>
+
+<p>
+Mesa 9.1.3 is a bug fix release which fixes bugs found since the 9.1.1 release.
+</p>
+<p>
+Mesa 9.1 implements the OpenGL 3.1 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.1. OpenGL
+3.1 is <strong>only</strong> available if requested at context creation
+because GL_ARB_compatibility is not supported.
+</p>
+
+<h2>MD5 checksums</h2>
+<pre>
+952ccd03547ed72333b64e1746cf8ada MesaLib-9.1.3.tar.bz2
+26d2f1aa8e9db388d51fcbd163c61fb7 MesaLib-9.1.3.tar.gz
+7017b7bdf0ebfd39a5c46cee7cf6b567 MesaLib-9.1.3.zip
+</pre>
+
+<h2>New features</h2>
+<p>None.</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=39251">Bug 39251</a> - Second Life viewers from release 2.7.4.235167 to the last 3.4.0.264911 crash on start.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=47478">Bug 47478</a> - [wine] GLX_DONT_CARE does not work for GLX_DRAWABLE_TYPE or GLX_RENDER_TYPE</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=56416">Bug 56416</a> - [SNB bisected] SNB hang with rc6 and hiz on glxgears (and other GL apps) immediately after xinit.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=57436">Bug 57436</a> - [GLSL1.40 IVB/HSW]Piglit spec/glsl-1.40/compiler_built-in-functions/inverse-mat2.frag fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61554">Bug 61554</a> - [ivb] Mesa 9.1 performance regression on KWin's Lanczos shader</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61773">Bug 61773</a> - abort is an incredibly not-smart way to handle IR validation</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62868">Bug 62868</a> - solaris build broken with missing ffsll</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62999">Bug 62999</a> - glXChooseFBConfig with GLX_DRAWABLE_TYPE, GLX_DONT_CARE fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63078">Bug 63078</a> - EGL X11 Regression: Maximum swap interval is 0 (worked with 9.0)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63447">Bug 63447</a> - [i965 Bisected]Ogles1conform/Ogles2conform/Ogles3conform cases segfault</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64662">Bug 64662</a> - [SNB 9.1 Bisected]Ogles2conform GL2ExtensionTests/depth_texture_cube_map/depth_texture_cube_map.test fail</li>
+
+</ul>
+
+<h2>Changes</h2>
+<p>The full set of changes can be viewed by using the following GIT command:</p>
+
+<pre>
+ git log mesa-9.1.2..mesa-9.1.3
+</pre>
+
+<p>Alex Deucher (2):</p>
+<ul>
+ <li>r600g: add new richland pci ids</li>
+ <li>radeonsi: add new SI pci ids</li>
+</ul>
+
+<p>Alexander Monakov (1):</p>
+<ul>
+ <li>Honor GLX_DONT_CARE in MATCH_MASK</li>
+</ul>
+
+<p>Andreas Boll (2):</p>
+<ul>
+ <li>mesa: Add a script to generate the list of fixed bugs</li>
+ <li>mesa: add usage examples to get-pick-list and shortlog scripts</li>
+</ul>
+
+<p>Aras Pranckevicius (1):</p>
+<ul>
+ <li>GLSL: fix lower_jumps to report progress properly</li>
+</ul>
+
+<p>Brian Paul (3):</p>
+<ul>
+ <li>mesa: remove platform checks around __builtin_ffs, __builtin_ffsll</li>
+ <li>gallium/u_blitter: fix is_blit_generic_supported() stencil checking</li>
+ <li>mesa: enable GL_ARB_texture_float if TEXTURE_FLOAT_ENABLED is defined</li>
+</ul>
+
+<p>Chad Versace (2):</p>
+<ul>
+ <li>egl/dri2: Fix min/max swap interval of configs</li>
+ <li>intel: Allocate hiz in intel_renderbuffer_move_to_temp()</li>
+</ul>
+
+<p>Chris Forbes (2):</p>
+<ul>
+ <li>i965/fs: Don't try to use bogus interpolation modes pre-Gen6.</li>
+ <li>mesa: don't memcmp() off the end of a cache key.</li>
+</ul>
+
+<p>Dave Airlie (2):</p>
+<ul>
+ <li>st/mesa: fix UBO offsets.</li>
+ <li>ralloc: don't write to memory in case of alloc fail.</li>
+</ul>
+
+<p>Eric Anholt (11):</p>
+<ul>
+ <li>i965/fs: Remove creation of a MOV instruction that's never used.</li>
+ <li>i965/fs: Move varying uniform offset compuation into the helper func.</li>
+ <li>i965: Make the constant surface interface take a normal byte size.</li>
+ <li>i965/fs: Avoid inappropriate optimization with regs_written &gt; 1.</li>
+ <li>i965/fs: Do CSE on gen7's varying-index pull constant loads.</li>
+ <li>i965/fs: Clean up the setup of gen4 simd16 message destinations.</li>
+ <li>i965/gen7: Skip resetting SOL offsets at batch start with HW contexts.</li>
+ <li>i965/gen6: Reduce updates of transform feedback offsets with HW contexts.</li>
+ <li>i965: Fix SNB GPU hangs when a blorp batch is the first thing to execute.</li>
+ <li>i965: Fix hangs on HSW since the gen6 blorp fix.</li>
+ <li>i965: Disable write masking when setting up texturing m0.</li>
+</ul>
+
+<p>Haixia Shi (1):</p>
+<ul>
+ <li>ACTIVE_UNIFORM_MAX_LENGTH should include 3 extra characters for arrays.</li>
+</ul>
+
+<p>Ian Romanick (11):</p>
+<ul>
+ <li>docs: Add 9.1.2 release md5sums</li>
+ <li>mesa: Note that patch 0967c36 shouldn't actually get picked to the 9.1 branch</li>
+ <li>mesa: NULL check the pointer before trying to dereference it</li>
+ <li>egl/dri2: NULL check value returned by dri2_create_surface</li>
+ <li>mesa: Don't leak shared state when context initialization fails</li>
+ <li>mesa: Don't leak gl_context::BeginEnd at context destruction</li>
+ <li>mesa/swrast: Refactor no-memory error checking in blit_linear</li>
+ <li>mesa/swrast: Move free calls outside the attachment loop</li>
+ <li>intel: Don't dereference a NULL pointer of calloc fails</li>
+ <li>mesa: Note that a824692 is already back ported</li>
+ <li>mesa: Bump version to 9.1.3</li>
+</ul>
+
+<p>José Fonseca (1):</p>
+<ul>
+ <li>winsys/sw/xlib: Prevent shared memory segment leakage.</li>
+</ul>
+
+<p>Kenneth Graunke (9):</p>
+<ul>
+ <li>mesa: Add new ctx-&gt;Stencil._WriteEnabled derived state flag.</li>
+ <li>i965: Fix stencil write enable flag in 3DSTATE_DEPTH_BUFFER on Gen7+.</li>
+ <li>mesa: Fix unpack function for ETC2_SRGB8_PUNCHTHROUGH_ALPHA1.</li>
+ <li>mesa: Add an unpack function for ARGB2101010_UINT.</li>
+ <li>mesa: Add unpack functions for R/RG/RGB [U]INT8/16/32 formats.</li>
+ <li>mesa: Add unpack functions for A/I/L/LA [U]INT8/16/32 formats.</li>
+ <li>glsl: Ignore redundant prototypes after a function's been defined.</li>
+ <li>i965: Lower textureGrad() for samplerCubeShadow.</li>
+ <li>i965/vs: Fix textureGrad() with shadow samplers on Haswell.</li>
+</ul>
+
+<p>Maarten Lankhorst (1):</p>
+<ul>
+ <li>nvc0: Fix fd leak in nvc0_create_decoder</li>
+</ul>
+
+<p>Marek Olšák (5):</p>
+<ul>
+ <li>radeonsi: add more cases for copying unsupported formats to resource_copy_region</li>
+ <li>mesa: fix glGet queries depending on derived framebuffer state (v2)</li>
+ <li>gallium/u_blitter: implement buffer clearing</li>
+ <li>r600g: initialize CMASK and HTILE with the GPU using streamout</li>
+ <li>st/mesa: depth-stencil-alpha state also depends on _NEW_BUFFERS</li>
+</ul>
+
+<p>Martin Andersson (1):</p>
+<ul>
+ <li>r600g: Fix UMAD on Cayman</li>
+</ul>
+
+<p>Michel Dänzer (1):</p>
+<ul>
+ <li>radeonsi: Handle arbitrary 2-byte formats in resource_copy_region</li>
+</ul>
+
+<p>Paul Berry (7):</p>
+<ul>
+ <li>glsl: Fix array indexing when constant folding built-in functions.</li>
+ <li>i965: Reduce code duplication in handling of depth, stencil, and HiZ.</li>
+ <li>glsl/linker: fix varying packing for non-flat integer varyings.</li>
+ <li>glsl: Document lower_packed_varyings' "flat" requirement with an assert.</li>
+ <li>glsl/linker: Adapt flat varying handling in preparation for geometry shaders.</li>
+ <li>glsl/linker: Reduce scope of non-flat integer varying fix.</li>
+ <li>intel: Do a depth resolve before copying images between miptrees.</li>
+</ul>
+
+<p>Ralf Jung (1):</p>
+<ul>
+ <li>egl/x11: Fix initialisation of swap_interval</li>
+</ul>
+
+<p>Roland Scheidegger (1):</p>
+<ul>
+ <li>gallivm: fix small but severe bug in handling multiple lod level strides</li>
+</ul>
+
+<p>Vadim Girlin (1):</p>
+<ul>
+ <li>gallium: handle drirc disable_glsl_line_continuations option</li>
+</ul>
+
+</div>
+</body>
+</html>
diff --git a/mesalib/docs/relnotes-9.1.html b/mesalib/docs/relnotes/9.1.html
index 8232ab8ee..6ecb7c000 100644
--- a/mesalib/docs/relnotes-9.1.html
+++ b/mesalib/docs/relnotes/9.1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
@@ -11,7 +11,7 @@
<h1>The Mesa 3D Graphics Library</h1>
</div>
-<iframe src="contents.html"></iframe>
+<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 9.1 Release Notes / February 22, 2013</h1>
diff --git a/mesalib/docs/relnotes/9.2.html b/mesalib/docs/relnotes/9.2.html
new file mode 100644
index 000000000..0dcc9605d
--- /dev/null
+++ b/mesalib/docs/relnotes/9.2.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 9.2 Release Notes / (date TBD)</h1>
+
+<p>
+Mesa 9.2 is a new development release.
+People who are concerned with stability and reliability should stick
+with a previous release or wait for Mesa 9.2.1.
+</p>
+<p>
+Mesa 9.2 implements the OpenGL 3.1 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.1. OpenGL
+3.1 is <strong>only</strong> available if requested at context creation
+because GL_ARB_compatibility is not supported.
+</p>
+
+
+<h2>MD5 checksums</h2>
+<pre>
+tbd
+</pre>
+
+
+<h2>New features</h2>
+
+<p>
+Note: some of the new features are only available with certain drivers.
+</p>
+
+<ul>
+<li>GL_ARB_texture_buffer_range</li>
+<li>GL_ARB_texture_multisample</li>
+<li>GL_ARB_texture_storage_multisample</li>
+<li>GL_ARB_texture_query_lod</li>
+<li>Added new freedreno gallium driver</li>
+<li>OSMesa interface for gallium llvmpipe/softpipe drivers</li>
+<li>Gallium Heads-Up Display (HUD) feature for performance monitoring</li>
+</ul>
+
+
+<h2>Bug fixes</h2>
+
+<p>TBD -- This list is likely incomplete.</p>
+
+
+<h2>Changes</h2>
+
+<ul>
+<li>Removed d3d1x state tracker (unused, unmaintained and broken)</li>
+</ul>
+
+</div>
+</body>
+</html>
diff --git a/mesalib/docs/MESA_agp_offset.spec b/mesalib/docs/specs/MESA_agp_offset.spec
index 06e1d902e..06e1d902e 100644
--- a/mesalib/docs/MESA_agp_offset.spec
+++ b/mesalib/docs/specs/MESA_agp_offset.spec
diff --git a/mesalib/docs/MESA_copy_sub_buffer.spec b/mesalib/docs/specs/MESA_copy_sub_buffer.spec
index 752a014b3..752a014b3 100644
--- a/mesalib/docs/MESA_copy_sub_buffer.spec
+++ b/mesalib/docs/specs/MESA_copy_sub_buffer.spec
diff --git a/mesalib/docs/MESA_drm_image.spec b/mesalib/docs/specs/MESA_drm_image.spec
index 1150a4c43..1150a4c43 100644
--- a/mesalib/docs/MESA_drm_image.spec
+++ b/mesalib/docs/specs/MESA_drm_image.spec
diff --git a/mesalib/docs/MESA_multithread_makecurrent.spec b/mesalib/docs/specs/MESA_multithread_makecurrent.spec
index 5065c2fc0..5065c2fc0 100644
--- a/mesalib/docs/MESA_multithread_makecurrent.spec
+++ b/mesalib/docs/specs/MESA_multithread_makecurrent.spec
diff --git a/mesalib/docs/MESA_pack_invert.spec b/mesalib/docs/specs/MESA_pack_invert.spec
index 33fb3c7bf..33fb3c7bf 100644
--- a/mesalib/docs/MESA_pack_invert.spec
+++ b/mesalib/docs/specs/MESA_pack_invert.spec
diff --git a/mesalib/docs/MESA_pixmap_colormap.spec b/mesalib/docs/specs/MESA_pixmap_colormap.spec
index fb0b441cc..fb0b441cc 100644
--- a/mesalib/docs/MESA_pixmap_colormap.spec
+++ b/mesalib/docs/specs/MESA_pixmap_colormap.spec
diff --git a/mesalib/docs/MESA_release_buffers.spec b/mesalib/docs/specs/MESA_release_buffers.spec
index 52d1e5a9c..52d1e5a9c 100644
--- a/mesalib/docs/MESA_release_buffers.spec
+++ b/mesalib/docs/specs/MESA_release_buffers.spec
diff --git a/mesalib/docs/MESA_resize_buffers.spec b/mesalib/docs/specs/MESA_resize_buffers.spec
index dabc7c421..dabc7c421 100644
--- a/mesalib/docs/MESA_resize_buffers.spec
+++ b/mesalib/docs/specs/MESA_resize_buffers.spec
diff --git a/mesalib/docs/MESA_set_3dfx_mode.spec b/mesalib/docs/specs/MESA_set_3dfx_mode.spec
index 06d97ca02..06d97ca02 100644
--- a/mesalib/docs/MESA_set_3dfx_mode.spec
+++ b/mesalib/docs/specs/MESA_set_3dfx_mode.spec
diff --git a/mesalib/docs/MESA_shader_debug.spec b/mesalib/docs/specs/MESA_shader_debug.spec
index fab92abc7..fab92abc7 100644
--- a/mesalib/docs/MESA_shader_debug.spec
+++ b/mesalib/docs/specs/MESA_shader_debug.spec
diff --git a/mesalib/docs/MESA_swap_control.spec b/mesalib/docs/specs/MESA_swap_control.spec
index a002563c9..a002563c9 100644
--- a/mesalib/docs/MESA_swap_control.spec
+++ b/mesalib/docs/specs/MESA_swap_control.spec
diff --git a/mesalib/docs/MESA_swap_frame_usage.spec b/mesalib/docs/specs/MESA_swap_frame_usage.spec
index 5023eadd8..5023eadd8 100644
--- a/mesalib/docs/MESA_swap_frame_usage.spec
+++ b/mesalib/docs/specs/MESA_swap_frame_usage.spec
diff --git a/mesalib/docs/MESA_texture_array.spec b/mesalib/docs/specs/MESA_texture_array.spec
index b146821f7..b146821f7 100644
--- a/mesalib/docs/MESA_texture_array.spec
+++ b/mesalib/docs/specs/MESA_texture_array.spec
diff --git a/mesalib/docs/MESA_texture_signed_rgba.spec b/mesalib/docs/specs/MESA_texture_signed_rgba.spec
index e3a6b59af..e3a6b59af 100644
--- a/mesalib/docs/MESA_texture_signed_rgba.spec
+++ b/mesalib/docs/specs/MESA_texture_signed_rgba.spec
diff --git a/mesalib/docs/MESA_window_pos.spec b/mesalib/docs/specs/MESA_window_pos.spec
index 9e81e9c4d..9e81e9c4d 100644
--- a/mesalib/docs/MESA_window_pos.spec
+++ b/mesalib/docs/specs/MESA_window_pos.spec
diff --git a/mesalib/docs/MESA_ycbcr_texture.spec b/mesalib/docs/specs/MESA_ycbcr_texture.spec
index 6a730e81c..6a730e81c 100644
--- a/mesalib/docs/MESA_ycbcr_texture.spec
+++ b/mesalib/docs/specs/MESA_ycbcr_texture.spec
diff --git a/mesalib/docs/WL_bind_wayland_display.spec b/mesalib/docs/specs/WL_bind_wayland_display.spec
index 02bd6ea21..02bd6ea21 100644
--- a/mesalib/docs/WL_bind_wayland_display.spec
+++ b/mesalib/docs/specs/WL_bind_wayland_display.spec
diff --git a/mesalib/docs/enums.txt b/mesalib/docs/specs/enums.txt
index b37768e20..b37768e20 100644
--- a/mesalib/docs/enums.txt
+++ b/mesalib/docs/specs/enums.txt
diff --git a/mesalib/docs/versions.html b/mesalib/docs/versions.html
index 0047ee0fd..30c1817e1 100644
--- a/mesalib/docs/versions.html
+++ b/mesalib/docs/versions.html
@@ -1403,8 +1403,8 @@ New:
<li>demo of per-pixel lighting with a fragment program (demos/fplight.c)
<li>new version (18) of glext.h header
<li>new spriteblast.c demo of GL_ARB_point_sprite
-<li>faster glDrawPixels in X11 driver in some cases (see RELNOTES-5.1)
-<li>faster glCopyPixels in X11 driver in some cases (see RELNOTES-5.1)
+<li>faster glDrawPixels in X11 driver in some cases (see relnotes/5.1)
+<li>faster glCopyPixels in X11 driver in some cases (see relnotes/5.1)
</ul>
Bug fixes:
<ul>
diff --git a/mesalib/docs/viewperf.html b/mesalib/docs/viewperf.html
index 3bbe1978a..23c6028d2 100644
--- a/mesalib/docs/viewperf.html
+++ b/mesalib/docs/viewperf.html
@@ -232,6 +232,36 @@ glClear is called so clearing the depth buffer would be a no-op anyway.
</p>
+<h2>Proe-05 test 6</h2>
+
+<p>
+This test draws an engine model with a two-pass algorithm.
+The first pass is drawn with polygon stipple enabled.
+The second pass is drawn without polygon stipple but with blending
+and GL_DEPTH_FUNC=GL_LEQUAL.
+If either of the two passes happen to use a software fallback of some
+sort, the Z values of fragments may be different between the two passes.
+This leads to incorrect rendering.
+</p>
+
+<p>
+For example, the VMware SVGA gallium driver uses a special semi-fallback path
+for drawing with polygon stipple.
+Since the two passes are rendered with different vertex transformation
+implementations, the rendering doesn't appear as expected.
+Setting the SVGA_FORCE_SWTNL environment variable to 1 will force the
+driver to use the software vertex path all the time and clears up this issue.
+</p>
+
+<p>
+According to the OpenGL invariance rules, there's no guarantee that
+the pixels produced by these two rendering states will match.
+To achieve invariance, both passes should enable polygon stipple and
+blending with appropriate patterns/modes to ensure the same fragments
+are produced in both passes.
+</p>
+
+
</div>
</body>
</html>
diff --git a/mesalib/docs/xlibdriver.html b/mesalib/docs/xlibdriver.html
index 6b7b02903..ce1ff3b13 100644
--- a/mesalib/docs/xlibdriver.html
+++ b/mesalib/docs/xlibdriver.html
@@ -221,7 +221,7 @@ See the xdemos/glxpixmap.c file for an example of how to use this
extension.
</p>
<p>
-<a href="MESA_pixmap_colormap.spec">GLX_MESA_pixmap_colormap specification</a>
+<a href="specs/MESA_pixmap_colormap.spec">GLX_MESA_pixmap_colormap specification</a>
</p>
@@ -250,7 +250,7 @@ just before an X window is destroyed. For example:
XDestroyWindow( dpy, window );
</pre>
<p>
-<a href="MESA_release_buffers.spec">GLX_MESA_release_buffers specification</a>
+<a href="specs/MESA_release_buffers.spec">GLX_MESA_release_buffers specification</a>
</p>
<p>
This extension was added in Mesa 2.0.
@@ -263,7 +263,7 @@ like glXSwapBuffers() but only copies a sub-region of the window
instead of the whole window.
</p>
<p>
-<a href="MESA_copy_sub_buffer.spec">GLX_MESA_copy_sub_buffer specification</a>
+<a href="specs/MESA_copy_sub_buffer.spec">GLX_MESA_copy_sub_buffer specification</a>
</p>
<p>
This extension was added in Mesa 2.6
diff --git a/mesalib/include/EGL/eglext.h b/mesalib/include/EGL/eglext.h
index b2b5a8038..1d6817838 100644
--- a/mesalib/include/EGL/eglext.h
+++ b/mesalib/include/EGL/eglext.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
-** Copyright (c) 2007-2012 The Khronos Group Inc.
+** Copyright (c) 2007-2013 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
@@ -34,8 +34,8 @@ extern "C" {
/* Header file version number */
/* Current version at http://www.khronos.org/registry/egl/ */
-/* $Revision: 19987 $ on $Date: 2012-12-13 16:46:46 -0800 (Thu, 13 Dec 2012) $ */
-#define EGL_EGLEXT_VERSION 14
+/* $Revision: 21254 $ on $Date: 2013-04-25 03:11:55 -0700 (Thu, 25 Apr 2013) $ */
+#define EGL_EGLEXT_VERSION 16
#ifndef EGL_KHR_config_attribs
#define EGL_KHR_config_attribs 1
@@ -532,6 +532,45 @@ typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy,
#define EGL_BUFFER_AGE_EXT 0x313D
#endif
+#ifndef EGL_EXT_image_dma_buf_import
+#define EGL_EXT_image_dma_buf_import 1
+#define EGL_LINUX_DMA_BUF_EXT 0x3270
+#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
+#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
+#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
+#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
+#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275
+#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276
+#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277
+#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278
+#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279
+#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A
+#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B
+#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C
+#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
+#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
+#define EGL_ITU_REC601_EXT 0x327F
+#define EGL_ITU_REC709_EXT 0x3280
+#define EGL_ITU_REC2020_EXT 0x3281
+#define EGL_YUV_FULL_RANGE_EXT 0x3282
+#define EGL_YUV_NARROW_RANGE_EXT 0x3283
+#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284
+#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
+#endif
+
+#ifndef EGL_ARM_pixmap_multisample_discard
+#define EGL_ARM_pixmap_multisample_discard 1
+#define EGL_DISCARD_SAMPLES_ARM 0x3286
+#endif
+
+#ifndef EGL_EXT_swap_buffers_with_damage
+#define EGL_EXT_swap_buffers_with_damage 1
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT( EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif /* EGL_EGLEXT_PROTOTYPES */
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+
#include <EGL/eglmesaext.h>
#ifdef __cplusplus
diff --git a/mesalib/include/GL/gl.h b/mesalib/include/GL/gl.h
index e9dd921fa..975cfe87f 100644
--- a/mesalib/include/GL/gl.h
+++ b/mesalib/include/GL/gl.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/include/GL/glx.h b/mesalib/include/GL/glx.h
index acbd9e2c9..7c8635cc7 100644
--- a/mesalib/include/GL/glx.h
+++ b/mesalib/include/GL/glx.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/include/GL/glx_mangle.h b/mesalib/include/GL/glx_mangle.h
index fa664a7f5..240de495f 100644
--- a/mesalib/include/GL/glx_mangle.h
+++ b/mesalib/include/GL/glx_mangle.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/include/GL/osmesa.h b/mesalib/include/GL/osmesa.h
index 304655e7c..571ef4ada 100644
--- a/mesalib/include/GL/osmesa.h
+++ b/mesalib/include/GL/osmesa.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/scons/crossmingw.py b/mesalib/scons/crossmingw.py
index 23c56c0a2..1287e0ec8 100644
--- a/mesalib/scons/crossmingw.py
+++ b/mesalib/scons/crossmingw.py
@@ -130,40 +130,6 @@ SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan)
-def compile_without_gstabs(env, sources, c_file):
- '''This is a hack used to compile some source files without the
- -gstabs option.
-
- It seems that some versions of mingw32's gcc (4.4.2 at least) die
- when compiling large files with the -gstabs option. -gstabs is
- related to debug symbols and can be omitted from the effected
- files.
-
- This function compiles the given c_file without -gstabs, removes
- the c_file from the sources list, then appends the new .o file to
- sources. Then return the new sources list.
- '''
-
- # Modify CCFLAGS to not have -gstabs option:
- env2 = env.Clone()
- flags = str(env2['CCFLAGS'])
- flags = flags.replace("-gstabs", "")
- env2['CCFLAGS'] = SCons.Util.CLVar(flags)
-
- # Build the special-case files:
- obj_file = env2.SharedObject(c_file)
-
- # Replace ".cpp" or ".c" with ".o"
- o_file = c_file.replace(".cpp", ".o")
- o_file = o_file.replace(".c", ".o")
-
- # Replace the .c files with the specially-compiled .o file
- sources.remove(c_file)
- sources.append(o_file)
-
- return sources
-
-
def generate(env):
mingw_prefix = find(env)
@@ -221,13 +187,5 @@ def generate(env):
env['LIBPREFIXES'] = [ 'lib', '' ]
env['LIBSUFFIXES'] = [ '.a', '.lib' ]
- # MinGW x86 port of gdb does not handle well dwarf debug info which is the
- # default in recent gcc versions. The x64 port gdb from mingw-w64 seems to
- # handle it fine though, so stick with the default there.
- if env['machine'] != 'x86_64':
- env.AppendUnique(CCFLAGS = ['-gstabs'])
-
- env.AddMethod(compile_without_gstabs, 'compile_without_gstabs')
-
def exists(env):
return find(env)
diff --git a/mesalib/scons/gallium.py b/mesalib/scons/gallium.py
index 57b5b418f..2e341e99f 100644
--- a/mesalib/scons/gallium.py
+++ b/mesalib/scons/gallium.py
@@ -152,7 +152,7 @@ def generate(env):
platform = env['platform']
x86 = env['machine'] == 'x86'
ppc = env['machine'] == 'ppc'
- gcc = env['gcc']
+ gcc_compat = env['gcc'] or env['clang']
msvc = env['msvc']
suncc = env['suncc']
icc = env['icc']
@@ -279,7 +279,7 @@ def generate(env):
('_WIN32_WINNT', '0x0601'),
('WINVER', '0x0601'),
]
- if gcc:
+ if gcc_compat:
cppdefines += [('__MSVCRT_VERSION__', '0x0700')]
if msvc:
cppdefines += [
@@ -309,19 +309,20 @@ def generate(env):
cflags = [] # C
cxxflags = [] # C++
ccflags = [] # C & C++
- if gcc:
+ if gcc_compat:
ccversion = env['CCVERSION']
if env['build'] == 'debug':
ccflags += ['-O0']
- elif ccversion.startswith('4.2.'):
+ elif env['gcc'] and ccversion.startswith('4.2.'):
# gcc 4.2.x optimizer is broken
print "warning: gcc 4.2.x optimizer is broken -- disabling optimizations"
ccflags += ['-O0']
else:
ccflags += ['-O3']
- # gcc's builtin memcmp is slower than glibc's
- # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
- ccflags += ['-fno-builtin-memcmp']
+ if env['gcc']:
+ # gcc's builtin memcmp is slower than glibc's
+ # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
+ ccflags += ['-fno-builtin-memcmp']
# Work around aliasing bugs - developers should comment this out
ccflags += ['-fno-strict-aliasing']
ccflags += ['-g']
@@ -329,8 +330,9 @@ def generate(env):
# See http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#Which_options_should_I_pass_to_gcc_when_compiling_for_profiling?
ccflags += [
'-fno-omit-frame-pointer',
- '-fno-optimize-sibling-calls',
]
+ if env['gcc']:
+ ccflags += ['-fno-optimize-sibling-calls']
if env['machine'] == 'x86':
ccflags += [
'-m32',
@@ -448,7 +450,7 @@ def generate(env):
env.Append(SHCCFLAGS = ['/LD'])
# Assembler options
- if gcc:
+ if gcc_compat:
if env['machine'] == 'x86':
env.Append(ASFLAGS = ['-m32'])
if env['machine'] == 'x86_64':
@@ -457,7 +459,7 @@ def generate(env):
# Linker options
linkflags = []
shlinkflags = []
- if gcc:
+ if gcc_compat:
if env['machine'] == 'x86':
linkflags += ['-m32']
if env['machine'] == 'x86_64':
@@ -495,7 +497,7 @@ def generate(env):
env.Append(SHLINKFLAGS = shlinkflags)
# We have C++ in several libraries, so always link with the C++ compiler
- if env['gcc'] or env['clang']:
+ if gcc_compat:
env['LINK'] = env['CXX']
# Default libs
@@ -533,7 +535,6 @@ def generate(env):
env.PkgCheckModules('XF86VIDMODE', ['xxf86vm'])
env.PkgCheckModules('DRM', ['libdrm >= 2.4.24'])
env.PkgCheckModules('DRM_INTEL', ['libdrm_intel >= 2.4.30'])
- env.PkgCheckModules('DRM_RADEON', ['libdrm_radeon >= 2.4.42'])
env.PkgCheckModules('XORG', ['xorg-server >= 1.6.0'])
env.PkgCheckModules('KMS', ['libkms >= 2.4.24'])
env.PkgCheckModules('UDEV', ['libudev > 150'])
diff --git a/mesalib/src/Makefile.am b/mesalib/src/Makefile.am
index d6a7946ef..b3dc44d6f 100644
--- a/mesalib/src/Makefile.am
+++ b/mesalib/src/Makefile.am
@@ -1,4 +1,53 @@
-SUBDIRS=$(SRC_DIRS)
+# Copyright © 2013 Intel Corporation
+#
+# 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.
-all-local:
- $(MKDIR_P) $(top_builddir)/$(LIB_DIR)
+SUBDIRS = gtest mapi
+
+if NEED_OPENGL_COMMON
+SUBDIRS += glsl mesa
+endif
+
+if HAVE_DRI_GLX
+SUBDIRS += glx
+endif
+
+if HAVE_GBM
+SUBDIRS += gbm
+endif
+
+if HAVE_EGL
+SUBDIRS += egl
+endif
+
+if HAVE_GALLIUM
+SUBDIRS += \
+ gallium/auxiliary \
+ gallium/drivers \
+ gallium/state_trackers \
+ gallium/winsys \
+ gallium/targets
+
+if HAVE_GALLIUM_TESTS
+SUBDIRS += \
+ gallium/tests/trivial \
+ gallium/tests/unit
+endif
+endif
diff --git a/mesalib/src/gallium/Android.mk b/mesalib/src/gallium/Android.mk
index 1d002d053..4e5acc86f 100644
--- a/mesalib/src/gallium/Android.mk
+++ b/mesalib/src/gallium/Android.mk
@@ -39,6 +39,11 @@ ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
SUBDIRS += winsys/i915/drm drivers/i915
endif
+# ilo
+ifneq ($(filter ilo, $(MESA_GPU_DRIVERS)),)
+SUBDIRS += winsys/intel/drm drivers/ilo
+endif
+
# nouveau
ifneq ($(filter nouveau, $(MESA_GPU_DRIVERS)),)
SUBDIRS += \
diff --git a/mesalib/src/gallium/SConscript b/mesalib/src/gallium/SConscript
index f281f4c65..ca75f37f9 100644
--- a/mesalib/src/gallium/SConscript
+++ b/mesalib/src/gallium/SConscript
@@ -27,28 +27,6 @@ if not env['msvc']:
'drivers/i915/SConscript',
])
-if env['drm']:
- # These drivers depend on drm headers
- if env['drm_radeon']:
- SConscript([
- 'drivers/r300/SConscript',
- 'drivers/r600/SConscript',
- ])
- if env['llvm']:
- SConscript([
- 'drivers/radeonsi/SConscript',
- ])
- # XXX: nouveau drivers have a tight dependency on libdrm, so to enable
- # we need some version logic before we enable them. Also, ATM there is
- # no nouveau target in scons
- # if env['drm_nouveau']:
- # SConscript([
- # 'drivers/nouveau/SConscript',
- # 'drivers/nv50/SConscript',
- # 'drivers/nvc0/SConscript',
- # 'drivers/nvfx/SConscript',
- # ])
-
#
# State trackers
#
@@ -96,6 +74,11 @@ if not env['msvc']:
'winsys/i915/sw/SConscript',
])
+if env['platform'] == 'haiku':
+ SConscript([
+ 'winsys/sw/hgl/SConscript',
+ ])
+
if env['dri']:
SConscript([
'winsys/sw/dri/SConscript',
@@ -110,11 +93,6 @@ if env['dri']:
'winsys/i915/drm/SConscript',
])
- if env['drm_radeon']:
- SConscript([
- 'winsys/radeon/drm/SConscript',
- ])
-
#
# Targets
#
@@ -141,32 +119,25 @@ if not env['embedded']:
'targets/libgl-gdi/SConscript',
])
+ if env['platform'] == 'haiku':
+ SConscript([
+ 'targets/haiku-softpipe/SConscript',
+ ])
+
if env['dri']:
SConscript([
'targets/SConscript.dri',
'targets/dri-swrast/SConscript',
'targets/dri-vmwgfx/SConscript',
- #'targets/dri-nouveau/SConscript',
])
if env['drm_intel']:
SConscript([
'targets/dri-i915/SConscript',
])
- if env['drm_radeon']:
- SConscript([
- 'targets/dri-r300/SConscript',
- 'targets/dri-r600/SConscript',
- ])
- if env['llvm']:
- SConscript([
- 'targets/dri-radeonsi/SConscript',
- ])
if env['xorg'] and env['drm']:
SConscript([
#'targets/xorg-i915/SConscript',
- #'targets/xorg-nouveau/SConscript',
- #'targets/xorg-radeon/SConscript',
])
diff --git a/mesalib/src/gallium/auxiliary/Makefile.sources b/mesalib/src/gallium/auxiliary/Makefile.sources
index 79def2177..20ff5ba73 100644
--- a/mesalib/src/gallium/auxiliary/Makefile.sources
+++ b/mesalib/src/gallium/auxiliary/Makefile.sources
@@ -23,6 +23,7 @@ C_SOURCES := \
draw/draw_pipe_vbuf.c \
draw/draw_pipe_wide_line.c \
draw/draw_pipe_wide_point.c \
+ draw/draw_prim_assembler.c \
draw/draw_pt.c \
draw/draw_pt_emit.c \
draw/draw_pt_fetch.c \
diff --git a/mesalib/src/gallium/auxiliary/SConscript b/mesalib/src/gallium/auxiliary/SConscript
index bfd5ec34c..31dfed316 100644
--- a/mesalib/src/gallium/auxiliary/SConscript
+++ b/mesalib/src/gallium/auxiliary/SConscript
@@ -51,10 +51,6 @@ if env['llvm']:
'GALLIVM_CPP_SOURCES'
])
- if env['toolchain'] == 'crossmingw':
- # compile lp_bld_misc.cpp without -gstabs option
- source = env.compile_without_gstabs(source, "gallivm/lp_bld_misc.cpp")
-
gallium = env.ConvenienceLibrary(
target = 'gallium',
source = source,
diff --git a/mesalib/src/gallium/auxiliary/hud/hud_context.c b/mesalib/src/gallium/auxiliary/hud/hud_context.c
index 983f05756..de032b6ba 100644
--- a/mesalib/src/gallium/auxiliary/hud/hud_context.c
+++ b/mesalib/src/gallium/auxiliary/hud/hud_context.c
@@ -90,10 +90,6 @@ struct hud_context {
unsigned max_num_vertices;
unsigned num_vertices;
} text, bg, whitelines;
-
- struct {
- boolean query_pipeline_statistics;
- } cap;
};
@@ -467,7 +463,7 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)
cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
/* prepare vertex buffers */
- hud_alloc_vertices(hud, &hud->bg, 4 * 64, 2 * sizeof(float));
+ hud_alloc_vertices(hud, &hud->bg, 4 * 128, 2 * sizeof(float));
hud_alloc_vertices(hud, &hud->whitelines, 4 * 256, 2 * sizeof(float));
hud_alloc_vertices(hud, &hud->text, 4 * 512, 4 * sizeof(float));
@@ -695,6 +691,12 @@ has_streamout(struct pipe_screen *screen)
return screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0;
}
+static boolean
+has_pipeline_stats_query(struct pipe_screen *screen)
+{
+ return screen->get_param(screen, PIPE_CAP_QUERY_PIPELINE_STATISTICS) != 0;
+}
+
static void
hud_parse_env_var(struct hud_context *hud, const char *env)
{
@@ -728,7 +730,8 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
return;
}
- /* add a graph */
+ /* Add a graph. */
+ /* IF YOU CHANGE THIS, UPDATE print_help! */
if (strcmp(name, "fps") == 0) {
hud_fps_graph_install(pane);
}
@@ -748,8 +751,11 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
hud_pipe_query_install(pane, hud->pipe, "primitives-generated",
PIPE_QUERY_PRIMITIVES_GENERATED, 0, 0, FALSE);
}
- else if (strncmp(name, "pipeline-statistics-", 20) == 0) {
- if (hud->cap.query_pipeline_statistics) {
+ else {
+ boolean processed = FALSE;
+
+ /* pipeline statistics queries */
+ if (has_pipeline_stats_query(hud->pipe->screen)) {
static const char *pipeline_statistics_names[] =
{
"ia-vertices",
@@ -765,22 +771,21 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
"cs-invocations"
};
for (i = 0; i < Elements(pipeline_statistics_names); ++i)
- if (strcmp(&name[20], pipeline_statistics_names[i]) == 0)
+ if (strcmp(name, pipeline_statistics_names[i]) == 0)
break;
- if (i < Elements(pipeline_statistics_names))
- hud_pipe_query_install(pane, hud->pipe, &name[20],
+ if (i < Elements(pipeline_statistics_names)) {
+ hud_pipe_query_install(pane, hud->pipe, name,
PIPE_QUERY_PIPELINE_STATISTICS, i,
0, FALSE);
- else
- fprintf(stderr, "gallium_hud: invalid pipeline-statistics-*\n");
- } else {
- fprintf(stderr, "gallium_hud: PIPE_QUERY_PIPELINE_STATISTICS "
- "not supported by the driver\n");
+ processed = TRUE;
+ }
}
- }
- else {
- if (!hud_driver_query_install(pane, hud->pipe, name)){
- fprintf(stderr, "gallium_hud: unknown driver query '%s'\n", name);
+
+ /* driver queries */
+ if (!processed) {
+ if (!hud_driver_query_install(pane, hud->pipe, name)){
+ fprintf(stderr, "gallium_hud: unknown driver query '%s'\n", name);
+ }
}
}
@@ -877,10 +882,24 @@ print_help(struct pipe_screen *screen)
printf(" cpu%i\n", i);
if (has_occlusion_query(screen))
- puts(" pixels-rendered");
+ puts(" samples-passed");
if (has_streamout(screen))
puts(" primitives-generated");
+ if (has_pipeline_stats_query(screen)) {
+ puts(" ia-vertices");
+ puts(" ia-primitives");
+ puts(" vs-invocations");
+ puts(" gs-invocations");
+ puts(" gs-primitives");
+ puts(" clipper-invocations");
+ puts(" clipper-primitives-generated");
+ puts(" ps-invocations");
+ puts(" hs-invocations");
+ puts(" ds-invocations");
+ puts(" cs-invocations");
+ }
+
if (screen->get_driver_query_info){
struct pipe_driver_query_info info;
num_queries = screen->get_driver_query_info(screen, 0, NULL);
@@ -971,7 +990,8 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
}
/* rasterizer */
- hud->rasterizer.gl_rasterization_rules = 1;
+ hud->rasterizer.half_pixel_center = 1;
+ hud->rasterizer.bottom_edge_rule = 1;
hud->rasterizer.depth_clip = 1;
hud->rasterizer.line_width = 1;
hud->rasterizer.line_last_pixel = 1;
@@ -1045,9 +1065,6 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
LIST_INITHEAD(&hud->pane_list);
- hud->cap.query_pipeline_statistics =
- pipe->screen->get_param(pipe->screen, PIPE_CAP_QUERY_PIPELINE_STATISTICS);
-
hud_parse_env_var(hud, env);
return hud;
}
diff --git a/mesalib/src/gallium/auxiliary/hud/hud_fps.c b/mesalib/src/gallium/auxiliary/hud/hud_fps.c
index 71cdfd04e..80381f547 100644
--- a/mesalib/src/gallium/auxiliary/hud/hud_fps.c
+++ b/mesalib/src/gallium/auxiliary/hud/hud_fps.c
@@ -47,7 +47,8 @@ query_fps(struct hud_graph *gr)
if (info->last_time) {
if (info->last_time + gr->pane->period <= now) {
- double fps = info->frames * 1000000 / (double)(now - info->last_time);
+ double fps = (uint64_t)info->frames * 1000000 /
+ (double)(now - info->last_time);
info->frames = 0;
info->last_time = now;
diff --git a/mesalib/src/gallium/auxiliary/util/u_blit.c b/mesalib/src/gallium/auxiliary/util/u_blit.c
index 9fe15b810..cda66d157 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blit.c
+++ b/mesalib/src/gallium/auxiliary/util/u_blit.c
@@ -118,7 +118,8 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso)
/* rasterizer */
ctx->rasterizer.cull_face = PIPE_FACE_NONE;
- ctx->rasterizer.gl_rasterization_rules = 1;
+ ctx->rasterizer.half_pixel_center = 1;
+ ctx->rasterizer.bottom_edge_rule = 1;
ctx->rasterizer.depth_clip = 1;
/* samplers */
diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.c b/mesalib/src/gallium/auxiliary/util/u_blitter.c
index 2a4a13e9f..8c871fdf9 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blitter.c
+++ b/mesalib/src/gallium/auxiliary/util/u_blitter.c
@@ -100,7 +100,7 @@ struct blitter_context_priv
void *velem_state;
void *velem_uint_state;
void *velem_sint_state;
- void *velem_state_readbuf;
+ void *velem_state_readbuf[4]; /**< X, XY, XYZ, XYZW */
/* Sampler state. */
void *sampler_state;
@@ -239,7 +239,8 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
/* rasterizer state */
memset(&rs_state, 0, sizeof(rs_state));
rs_state.cull_face = PIPE_FACE_NONE;
- rs_state.gl_rasterization_rules = 1;
+ rs_state.half_pixel_center = 1;
+ rs_state.bottom_edge_rule = 1;
rs_state.flatshade = 1;
rs_state.depth_clip = 1;
ctx->rs_state = pipe->create_rasterizer_state(pipe, &rs_state);
@@ -285,9 +286,19 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
}
if (ctx->has_stream_out) {
- velem[0].src_format = PIPE_FORMAT_R32_UINT;
- velem[0].vertex_buffer_index = ctx->base.vb_slot;
- ctx->velem_state_readbuf = pipe->create_vertex_elements_state(pipe, 1, &velem[0]);
+ static enum pipe_format formats[4] = {
+ PIPE_FORMAT_R32_UINT,
+ PIPE_FORMAT_R32G32_UINT,
+ PIPE_FORMAT_R32G32B32_UINT,
+ PIPE_FORMAT_R32G32B32A32_UINT
+ };
+
+ for (i = 0; i < 4; i++) {
+ velem[0].src_format = formats[i];
+ velem[0].vertex_buffer_index = ctx->base.vb_slot;
+ ctx->velem_state_readbuf[i] =
+ pipe->create_vertex_elements_state(pipe, 1, &velem[0]);
+ }
}
/* fragment shaders are created on-demand */
@@ -352,8 +363,11 @@ void util_blitter_destroy(struct blitter_context *blitter)
pipe->delete_vertex_elements_state(pipe, ctx->velem_sint_state);
pipe->delete_vertex_elements_state(pipe, ctx->velem_uint_state);
}
- if (ctx->velem_state_readbuf)
- pipe->delete_vertex_elements_state(pipe, ctx->velem_state_readbuf);
+ for (i = 0; i < 4; i++) {
+ if (ctx->velem_state_readbuf[i]) {
+ pipe->delete_vertex_elements_state(pipe, ctx->velem_state_readbuf[i]);
+ }
+ }
for (i = 0; i < PIPE_MAX_TEXTURE_TYPES; i++) {
if (ctx->fs_texfetch_col[i])
@@ -490,7 +504,7 @@ static void blitter_restore_fragment_states(struct blitter_context_priv *ctx)
/* XXX check whether these are saved and whether they need to be restored
* (depending on the operation) */
pipe->set_stencil_ref(pipe, &ctx->base.saved_stencil_ref);
- pipe->set_viewport_state(pipe, &ctx->base.saved_viewport);
+ pipe->set_viewport_states(pipe, 0, 1, &ctx->base.saved_viewport);
}
static void blitter_check_saved_fb_state(struct blitter_context_priv *ctx)
@@ -585,7 +599,7 @@ static void blitter_set_rectangle(struct blitter_context_priv *ctx,
ctx->viewport.translate[1] = 0.5f * ctx->dst_height;
ctx->viewport.translate[2] = 0.0f;
ctx->viewport.translate[3] = 0.0f;
- ctx->base.pipe->set_viewport_state(ctx->base.pipe, &ctx->viewport);
+ ctx->base.pipe->set_viewport_states(ctx->base.pipe, 0, 1, &ctx->viewport);
}
static void blitter_set_clear_color(struct blitter_context_priv *ctx,
@@ -1387,7 +1401,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
pipe->bind_vertex_elements_state(pipe, ctx->velem_state);
if (scissor) {
- pipe->set_scissor_state(pipe, scissor);
+ pipe->set_scissor_states(pipe, 0, 1, scissor);
}
blitter_set_common_draw_rect_state(ctx, scissor != NULL);
@@ -1482,7 +1496,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
blitter_restore_textures(ctx);
blitter_restore_fb_state(ctx);
if (scissor) {
- pipe->set_scissor_state(pipe, &ctx->base.saved_scissor);
+ pipe->set_scissor_states(pipe, 0, 1, &ctx->base.saved_scissor);
}
blitter_restore_render_cond(ctx);
blitter_unset_running_flag(ctx);
@@ -1739,7 +1753,7 @@ void util_blitter_copy_buffer(struct blitter_context *blitter,
vb.stride = 4;
pipe->set_vertex_buffers(pipe, ctx->base.vb_slot, 1, &vb);
- pipe->bind_vertex_elements_state(pipe, ctx->velem_state_readbuf);
+ pipe->bind_vertex_elements_state(pipe, ctx->velem_state_readbuf[0]);
pipe->bind_vs_state(pipe, ctx->vs_pos_only);
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
@@ -1756,6 +1770,66 @@ void util_blitter_copy_buffer(struct blitter_context *blitter,
pipe_so_target_reference(&so_target, NULL);
}
+void util_blitter_clear_buffer(struct blitter_context *blitter,
+ struct pipe_resource *dst,
+ unsigned offset, unsigned size,
+ unsigned num_channels,
+ const union pipe_color_union *clear_value)
+{
+ struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter;
+ struct pipe_context *pipe = ctx->base.pipe;
+ struct pipe_vertex_buffer vb = {0};
+ struct pipe_stream_output_target *so_target;
+
+ assert(num_channels >= 1);
+ assert(num_channels <= 4);
+
+ /* IMPORTANT: DON'T DO ANY BOUNDS CHECKING HERE!
+ *
+ * R600 uses this to initialize texture resources, so width0 might not be
+ * what you think it is.
+ */
+
+ /* Streamout is required. */
+ if (!ctx->has_stream_out) {
+ assert(!"Streamout unsupported in util_blitter_clear_buffer()");
+ return;
+ }
+
+ /* Some alignment is required. */
+ if (offset % 4 != 0 || size % 4 != 0) {
+ assert(!"Bad alignment in util_blitter_clear_buffer()");
+ return;
+ }
+
+ u_upload_data(ctx->upload, 0, num_channels*4, clear_value,
+ &vb.buffer_offset, &vb.buffer);
+ vb.stride = 0;
+
+ blitter_set_running_flag(ctx);
+ blitter_check_saved_vertex_states(ctx);
+ blitter_disable_render_cond(ctx);
+
+ pipe->set_vertex_buffers(pipe, ctx->base.vb_slot, 1, &vb);
+ pipe->bind_vertex_elements_state(pipe,
+ ctx->velem_state_readbuf[num_channels-1]);
+ pipe->bind_vs_state(pipe, ctx->vs_pos_only);
+ if (ctx->has_geometry_shader)
+ pipe->bind_gs_state(pipe, NULL);
+ pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state);
+
+ so_target = pipe->create_stream_output_target(pipe, dst, offset, size);
+ pipe->set_stream_output_targets(pipe, 1, &so_target, 0);
+
+ util_draw_arrays(pipe, PIPE_PRIM_POINTS, 0, size / 4);
+
+ blitter_restore_vertex_states(ctx);
+ blitter_restore_render_cond(ctx);
+ blitter_unset_running_flag(ctx);
+ pipe_so_target_reference(&so_target, NULL);
+ pipe_resource_reference(&vb.buffer, NULL);
+}
+
/* probably radeon specific */
void util_blitter_custom_resolve_color(struct blitter_context *blitter,
struct pipe_resource *dst,
diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.h b/mesalib/src/gallium/auxiliary/util/u_blitter.h
index 20e69ed5b..19015844e 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blitter.h
+++ b/mesalib/src/gallium/auxiliary/util/u_blitter.h
@@ -276,7 +276,7 @@ void util_blitter_default_src_texture(struct pipe_sampler_view *src_templ,
/**
* Copy data from one buffer to another using the Stream Output functionality.
- * Some alignment is required, otherwise software fallback is used.
+ * 4-byte alignment is required, otherwise software fallback is used.
*/
void util_blitter_copy_buffer(struct blitter_context *blitter,
struct pipe_resource *dst,
@@ -286,6 +286,22 @@ void util_blitter_copy_buffer(struct blitter_context *blitter,
unsigned size);
/**
+ * Clear the contents of a buffer using the Stream Output functionality.
+ * 4-byte alignment is required.
+ *
+ * "num_channels" can be 1, 2, 3, or 4, and specifies if the clear value is
+ * R, RG, RGB, or RGBA.
+ *
+ * For each element, only "num_channels" components of "clear_value" are
+ * copied to the buffer, then the offset is incremented by num_channels*4.
+ */
+void util_blitter_clear_buffer(struct blitter_context *blitter,
+ struct pipe_resource *dst,
+ unsigned offset, unsigned size,
+ unsigned num_channels,
+ const union pipe_color_union *clear_value);
+
+/**
* Clear a region of a (color) surface to a constant value.
*
* These states must be saved in the blitter in addition to the state objects
diff --git a/mesalib/src/gallium/auxiliary/util/u_debug_symbol.c b/mesalib/src/gallium/auxiliary/util/u_debug_symbol.c
index 3d2f8ebc3..0ef111c3b 100644
--- a/mesalib/src/gallium/auxiliary/util/u_debug_symbol.c
+++ b/mesalib/src/gallium/auxiliary/util/u_debug_symbol.c
@@ -151,10 +151,8 @@ debug_symbol_name_dbghelp(const void *addr, char* buf, unsigned size)
}
#endif
-#ifdef __GLIBC__
-#ifndef __UCLIBC__
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
#include <execinfo.h>
-#endif
/* This can only provide dynamic symbols, or binary offsets into a file.
*
@@ -179,7 +177,7 @@ debug_symbol_name(const void *addr, char* buf, unsigned size)
return;
#endif
-#ifdef __GLIBC__
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
debug_symbol_name_glibc(addr, buf, size);
if(buf[0])
return;
diff --git a/mesalib/src/gallium/auxiliary/util/u_dump_state.c b/mesalib/src/gallium/auxiliary/util/u_dump_state.c
index 2f28f3c84..12f1d2d6e 100644
--- a/mesalib/src/gallium/auxiliary/util/u_dump_state.c
+++ b/mesalib/src/gallium/auxiliary/util/u_dump_state.c
@@ -327,7 +327,8 @@ util_dump_rasterizer_state(FILE *stream, const struct pipe_rasterizer_state *sta
util_dump_member(stream, uint, state, line_stipple_pattern);
util_dump_member(stream, bool, state, line_last_pixel);
util_dump_member(stream, bool, state, flatshade_first);
- util_dump_member(stream, bool, state, gl_rasterization_rules);
+ util_dump_member(stream, bool, state, half_pixel_center);
+ util_dump_member(stream, bool, state, bottom_edge_rule);
util_dump_member(stream, bool, state, rasterizer_discard);
util_dump_member(stream, bool, state, depth_clip);
util_dump_member(stream, uint, state, clip_plane_enable);
diff --git a/mesalib/src/gallium/auxiliary/util/u_format.c b/mesalib/src/gallium/auxiliary/util/u_format.c
index 18456371c..9bdc2eabf 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format.c
+++ b/mesalib/src/gallium/auxiliary/util/u_format.c
@@ -632,6 +632,40 @@ void util_format_compose_swizzles(const unsigned char swz1[4],
}
}
+void util_format_apply_color_swizzle(union pipe_color_union *dst,
+ const union pipe_color_union *src,
+ const unsigned char swz[4],
+ const boolean is_integer)
+{
+ unsigned c;
+
+ if (is_integer) {
+ for (c = 0; c < 4; ++c) {
+ switch (swz[c]) {
+ case PIPE_SWIZZLE_RED: dst->ui[c] = src->ui[0]; break;
+ case PIPE_SWIZZLE_GREEN: dst->ui[c] = src->ui[1]; break;
+ case PIPE_SWIZZLE_BLUE: dst->ui[c] = src->ui[2]; break;
+ case PIPE_SWIZZLE_ALPHA: dst->ui[c] = src->ui[3]; break;
+ default:
+ dst->ui[c] = (swz[c] == PIPE_SWIZZLE_ONE) ? 1 : 0;
+ break;
+ }
+ }
+ } else {
+ for (c = 0; c < 4; ++c) {
+ switch (swz[c]) {
+ case PIPE_SWIZZLE_RED: dst->f[c] = src->f[0]; break;
+ case PIPE_SWIZZLE_GREEN: dst->f[c] = src->f[1]; break;
+ case PIPE_SWIZZLE_BLUE: dst->f[c] = src->f[2]; break;
+ case PIPE_SWIZZLE_ALPHA: dst->f[c] = src->f[3]; break;
+ default:
+ dst->f[c] = (swz[c] == PIPE_SWIZZLE_ONE) ? 1.0f : 0.0f;
+ break;
+ }
+ }
+ }
+}
+
void util_format_swizzle_4f(float *dst, const float *src,
const unsigned char swz[4])
{
diff --git a/mesalib/src/gallium/auxiliary/util/u_format.h b/mesalib/src/gallium/auxiliary/util/u_format.h
index ed942fb16..e4b9c365c 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format.h
+++ b/mesalib/src/gallium/auxiliary/util/u_format.h
@@ -33,6 +33,9 @@
#include "pipe/p_format.h"
#include "util/u_debug.h"
+union pipe_color_union;
+
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -1117,6 +1120,15 @@ void util_format_compose_swizzles(const unsigned char swz1[4],
const unsigned char swz2[4],
unsigned char dst[4]);
+/* Apply the swizzle provided in \param swz (which is one of PIPE_SWIZZLE_x)
+ * to \param src and store the result in \param dst.
+ * \param is_integer determines the value written for PIPE_SWIZZLE_ONE.
+ */
+void util_format_apply_color_swizzle(union pipe_color_union *dst,
+ const union pipe_color_union *src,
+ const unsigned char swz[4],
+ const boolean is_integer);
+
void util_format_swizzle_4f(float *dst, const float *src,
const unsigned char swz[4]);
diff --git a/mesalib/src/gallium/auxiliary/util/u_format_latc.c b/mesalib/src/gallium/auxiliary/util/u_format_latc.c
index 20feb241e..caab7e87a 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format_latc.c
+++ b/mesalib/src/gallium/auxiliary/util/u_format_latc.c
@@ -15,9 +15,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
**************************************************************************/
diff --git a/mesalib/src/gallium/auxiliary/util/u_format_rgtc.c b/mesalib/src/gallium/auxiliary/util/u_format_rgtc.c
index ff04e37b5..758e33774 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format_rgtc.c
+++ b/mesalib/src/gallium/auxiliary/util/u_format_rgtc.c
@@ -15,9 +15,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
**************************************************************************/
diff --git a/mesalib/src/gallium/auxiliary/util/u_format_s3tc.c b/mesalib/src/gallium/auxiliary/util/u_format_s3tc.c
index 4a9dc2237..35e3d3445 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format_s3tc.c
+++ b/mesalib/src/gallium/auxiliary/util/u_format_s3tc.c
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
**************************************************************************/
diff --git a/mesalib/src/gallium/auxiliary/util/u_gen_mipmap.c b/mesalib/src/gallium/auxiliary/util/u_gen_mipmap.c
index e1f18f39c..7974b1d76 100644
--- a/mesalib/src/gallium/auxiliary/util/u_gen_mipmap.c
+++ b/mesalib/src/gallium/auxiliary/util/u_gen_mipmap.c
@@ -1271,7 +1271,8 @@ util_create_gen_mipmap(struct pipe_context *pipe,
/* rasterizer */
memset(&ctx->rasterizer, 0, sizeof(ctx->rasterizer));
ctx->rasterizer.cull_face = PIPE_FACE_NONE;
- ctx->rasterizer.gl_rasterization_rules = 1;
+ ctx->rasterizer.half_pixel_center = 1;
+ ctx->rasterizer.bottom_edge_rule = 1;
ctx->rasterizer.depth_clip = 1;
/* sampler state */
diff --git a/mesalib/src/gallium/auxiliary/util/u_inlines.h b/mesalib/src/gallium/auxiliary/util/u_inlines.h
index 7770cd514..6e65ee6c9 100644
--- a/mesalib/src/gallium/auxiliary/util/u_inlines.h
+++ b/mesalib/src/gallium/auxiliary/util/u_inlines.h
@@ -485,8 +485,7 @@ util_get_min_point_size(const struct pipe_rasterizer_state *state)
{
/* The point size should be clamped to this value at the rasterizer stage.
*/
- return state->gl_rasterization_rules &&
- !state->point_quad_rasterization &&
+ return !state->point_quad_rasterization &&
!state->point_smooth &&
!state->multisample ? 1.0f : 0.0f;
}
diff --git a/mesalib/src/gallium/auxiliary/util/u_prim.h b/mesalib/src/gallium/auxiliary/util/u_prim.h
index d62c636f2..8f444a305 100644
--- a/mesalib/src/gallium/auxiliary/util/u_prim.h
+++ b/mesalib/src/gallium/auxiliary/util/u_prim.h
@@ -26,8 +26,8 @@
**************************************************************************/
-#ifndef U_BLIT_H
-#define U_BLIT_H
+#ifndef U_PRIM_H
+#define U_PRIM_H
#include "pipe/p_defines.h"
@@ -37,95 +37,125 @@
extern "C" {
#endif
-static INLINE boolean u_validate_pipe_prim( unsigned pipe_prim, unsigned nr )
-{
- boolean ok = TRUE;
+struct u_prim_vertex_count {
+ int min;
+ int incr;
+};
- switch (pipe_prim) {
- case PIPE_PRIM_POINTS:
- ok = (nr >= 1);
- break;
- case PIPE_PRIM_LINES:
- ok = (nr >= 2);
- break;
- case PIPE_PRIM_LINE_STRIP:
+/**
+ * Decompose a primitive that is a loop, a strip, or a fan. Return the
+ * original primitive if it is already decomposed.
+ */
+static INLINE unsigned
+u_decomposed_prim(unsigned prim)
+{
+ switch (prim) {
case PIPE_PRIM_LINE_LOOP:
- ok = (nr >= 2);
- break;
- case PIPE_PRIM_TRIANGLES:
- ok = (nr >= 3);
- break;
+ case PIPE_PRIM_LINE_STRIP:
+ return PIPE_PRIM_LINES;
case PIPE_PRIM_TRIANGLE_STRIP:
case PIPE_PRIM_TRIANGLE_FAN:
- case PIPE_PRIM_POLYGON:
- ok = (nr >= 3);
- break;
- case PIPE_PRIM_QUADS:
- ok = (nr >= 4);
- break;
+ return PIPE_PRIM_TRIANGLES;
case PIPE_PRIM_QUAD_STRIP:
- ok = (nr >= 4);
- break;
+ return PIPE_PRIM_QUADS;
+ case PIPE_PRIM_LINE_STRIP_ADJACENCY:
+ return PIPE_PRIM_LINES_ADJACENCY;
+ case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
+ return PIPE_PRIM_TRIANGLES_ADJACENCY;
default:
- ok = 0;
- break;
+ return prim;
}
+}
- return ok;
+/**
+ * Reduce a primitive to one of PIPE_PRIM_POINTS, PIPE_PRIM_LINES, and
+ * PIPE_PRIM_TRIANGLES.
+ */
+static INLINE unsigned
+u_reduced_prim(unsigned prim)
+{
+ switch (prim) {
+ case PIPE_PRIM_POINTS:
+ return PIPE_PRIM_POINTS;
+ case PIPE_PRIM_LINES:
+ case PIPE_PRIM_LINE_LOOP:
+ case PIPE_PRIM_LINE_STRIP:
+ case PIPE_PRIM_LINES_ADJACENCY:
+ case PIPE_PRIM_LINE_STRIP_ADJACENCY:
+ return PIPE_PRIM_LINES;
+ default:
+ return PIPE_PRIM_TRIANGLES;
+ }
}
+/**
+ * Re-assemble a primitive to remove its adjacency.
+ */
+static INLINE unsigned
+u_assembled_prim(unsigned prim)
+{
+ switch (prim) {
+ case PIPE_PRIM_LINES_ADJACENCY:
+ case PIPE_PRIM_LINE_STRIP_ADJACENCY:
+ return PIPE_PRIM_LINES;
+ case PIPE_PRIM_TRIANGLES_ADJACENCY:
+ case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
+ return PIPE_PRIM_TRIANGLES;
+ default:
+ return prim;
+ }
+}
-static INLINE boolean u_trim_pipe_prim( unsigned pipe_prim, unsigned *nr )
+/**
+ * Return the vertex count information for a primitive.
+ *
+ * Note that if this function is called directly or indirectly anywhere in a
+ * source file, it will increase the size of the binary slightly more than
+ * expected because of the use of a table.
+ */
+static INLINE const struct u_prim_vertex_count *
+u_prim_vertex_count(unsigned prim)
{
- boolean ok = TRUE;
- const static unsigned values[][2] = {
- { 1, 0 }, /* PIPE_PRIM_POINTS */
+ static const struct u_prim_vertex_count prim_table[PIPE_PRIM_MAX] = {
+ { 1, 1 }, /* PIPE_PRIM_POINTS */
{ 2, 2 }, /* PIPE_PRIM_LINES */
- { 2, 0 }, /* PIPE_PRIM_LINE_LOOP */
- { 2, 0 }, /* PIPE_PRIM_LINE_STRIP */
+ { 2, 1 }, /* PIPE_PRIM_LINE_LOOP */
+ { 2, 1 }, /* PIPE_PRIM_LINE_STRIP */
{ 3, 3 }, /* PIPE_PRIM_TRIANGLES */
- { 3, 0 }, /* PIPE_PRIM_TRIANGLE_STRIP */
- { 3, 0 }, /* PIPE_PRIM_TRIANGLE_FAN */
- { 4, 4 }, /* PIPE_PRIM_TRIANGLE_QUADS */
- { 4, 2 }, /* PIPE_PRIM_TRIANGLE_QUAD_STRIP */
- { 3, 0 }, /* PIPE_PRIM_TRIANGLE_POLYGON */
+ { 3, 1 }, /* PIPE_PRIM_TRIANGLE_STRIP */
+ { 3, 1 }, /* PIPE_PRIM_TRIANGLE_FAN */
+ { 4, 4 }, /* PIPE_PRIM_QUADS */
+ { 4, 2 }, /* PIPE_PRIM_QUAD_STRIP */
+ { 3, 1 }, /* PIPE_PRIM_POLYGON */
{ 4, 4 }, /* PIPE_PRIM_LINES_ADJACENCY */
- { 4, 0 }, /* PIPE_PRIM_LINE_STRIP_ADJACENCY */
- { 6, 5 }, /* PIPE_PRIM_TRIANGLES_ADJACENCY */
- { 4, 0 }, /* PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY */
+ { 4, 1 }, /* PIPE_PRIM_LINE_STRIP_ADJACENCY */
+ { 6, 6 }, /* PIPE_PRIM_TRIANGLES_ADJACENCY */
+ { 6, 2 }, /* PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY */
};
- if (unlikely(pipe_prim >= PIPE_PRIM_MAX)) {
- *nr = 0;
- return FALSE;
- }
-
- ok = (*nr >= values[pipe_prim][0]);
- if (values[pipe_prim][1])
- *nr -= (*nr % values[pipe_prim][1]);
+ return (likely(prim < PIPE_PRIM_MAX)) ? &prim_table[prim] : NULL;
+}
- if (!ok)
- *nr = 0;
+static INLINE boolean u_validate_pipe_prim( unsigned pipe_prim, unsigned nr )
+{
+ const struct u_prim_vertex_count *count = u_prim_vertex_count(pipe_prim);
- return ok;
+ return (count && nr >= count->min);
}
-static INLINE unsigned u_reduced_prim( unsigned pipe_prim )
+static INLINE boolean u_trim_pipe_prim( unsigned pipe_prim, unsigned *nr )
{
- switch (pipe_prim) {
- case PIPE_PRIM_POINTS:
- return PIPE_PRIM_POINTS;
+ const struct u_prim_vertex_count *count = u_prim_vertex_count(pipe_prim);
- case PIPE_PRIM_LINES:
- case PIPE_PRIM_LINES_ADJACENCY:
- case PIPE_PRIM_LINE_STRIP:
- case PIPE_PRIM_LINE_STRIP_ADJACENCY:
- case PIPE_PRIM_LINE_LOOP:
- return PIPE_PRIM_LINES;
-
- default:
- return PIPE_PRIM_TRIANGLES;
+ if (count && *nr >= count->min) {
+ if (count->incr > 1)
+ *nr -= (*nr % count->incr);
+ return TRUE;
+ }
+ else {
+ *nr = 0;
+ return FALSE;
}
}
@@ -165,46 +195,71 @@ u_vertices_per_prim(int primitive)
/**
* Returns the number of decomposed primitives for the given
* vertex count.
- * Geometry shader is invoked once for each triangle in
+ * Parts of the pipline are invoked once for each triangle in
* triangle strip, triangle fans and triangles and once
- * for each line in line strip, line loop, lines.
+ * for each line in line strip, line loop, lines. Also
+ * statistics depend on knowing the exact number of decomposed
+ * primitives for a set of vertices.
*/
static INLINE unsigned
-u_gs_prims_for_vertices(int primitive, int vertices)
+u_decomposed_prims_for_vertices(int primitive, int vertices)
{
- switch(primitive) {
+ switch (primitive) {
case PIPE_PRIM_POINTS:
return vertices;
case PIPE_PRIM_LINES:
return vertices / 2;
case PIPE_PRIM_LINE_LOOP:
- return vertices;
+ return (vertices >= 2) ? vertices : 0;
case PIPE_PRIM_LINE_STRIP:
- return vertices - 1;
+ return (vertices >= 2) ? vertices - 1 : 0;
case PIPE_PRIM_TRIANGLES:
- return vertices / 3;
+ return vertices / 3;
case PIPE_PRIM_TRIANGLE_STRIP:
- return vertices - 2;
+ return (vertices >= 3) ? vertices - 2 : 0;
case PIPE_PRIM_TRIANGLE_FAN:
- return vertices - 2;
+ return (vertices >= 3) ? vertices - 2 : 0;
case PIPE_PRIM_LINES_ADJACENCY:
- return vertices / 2;
+ return vertices / 4;
case PIPE_PRIM_LINE_STRIP_ADJACENCY:
- return vertices - 1;
+ return (vertices >= 4) ? vertices - 3 : 0;
case PIPE_PRIM_TRIANGLES_ADJACENCY:
- return vertices / 3;
+ return vertices / 6;
case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
- return vertices - 2;
-
- /* following primitives should never be used
- * with geometry shaders abd their size is
- * undefined */
+ return (vertices >= 6) ? 1 + (vertices - 6) / 2 : 0;
+ case PIPE_PRIM_QUADS:
+ return vertices / 4;
+ case PIPE_PRIM_QUAD_STRIP:
+ return (vertices >= 4) ? (vertices - 2) / 2 : 0;
+ /* Polygons can't be decomposed
+ * because the number of their vertices isn't known so
+ * for them and whatever else we don't recognize just
+ * return 1 if the number of vertices is greater than
+ * or equal to 3 and zero otherwise */
case PIPE_PRIM_POLYGON:
+ default:
+ debug_printf("Invalid decomposition primitive!\n");
+ return (vertices >= 3) ? 1 : 0;
+ }
+}
+
+/**
+ * Returns the number of reduced/tessellated primitives for the given vertex
+ * count. Each quad is treated as two triangles. Polygons are treated as
+ * triangle fans.
+ */
+static INLINE unsigned
+u_reduced_prims_for_vertices(int primitive, int vertices)
+{
+ switch (primitive) {
case PIPE_PRIM_QUADS:
case PIPE_PRIM_QUAD_STRIP:
+ return u_decomposed_prims_for_vertices(primitive, vertices) * 2;
+ case PIPE_PRIM_POLYGON:
+ primitive = PIPE_PRIM_TRIANGLE_FAN;
+ /* fall through */
default:
- debug_printf("Unrecognized geometry shader primitive");
- return 3;
+ return u_decomposed_prims_for_vertices(primitive, vertices);
}
}
diff --git a/mesalib/src/gallium/auxiliary/util/u_simple_list.h b/mesalib/src/gallium/auxiliary/util/u_simple_list.h
index fe5977137..7a47c1a78 100644
--- a/mesalib/src/gallium/auxiliary/util/u_simple_list.h
+++ b/mesalib/src/gallium/auxiliary/util/u_simple_list.h
@@ -28,9 +28,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/gallium/auxiliary/util/u_sse.h b/mesalib/src/gallium/auxiliary/util/u_sse.h
index 1df6c8726..d100c4706 100644
--- a/mesalib/src/gallium/auxiliary/util/u_sse.h
+++ b/mesalib/src/gallium/auxiliary/util/u_sse.h
@@ -175,7 +175,12 @@ static INLINE void u_print_ps(const char *name, __m128 r)
* MSVC will never get in here as its intrinsics support do not rely on
* compiler command line options.
*/
-static __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+static __inline __m128i
+#ifdef __clang__
+ __attribute__((__always_inline__, __nodebug__))
+#else
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+#endif
_mm_shuffle_epi8(__m128i a, __m128i mask)
{
__m128i result;
diff --git a/mesalib/src/glsl/Makefile.am b/mesalib/src/glsl/Makefile.am
index d0e5cd1d0..2bbad3d65 100644
--- a/mesalib/src/glsl/Makefile.am
+++ b/mesalib/src/glsl/Makefile.am
@@ -27,8 +27,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/src/mesa/ \
-I$(top_srcdir)/src/glsl/glcpp \
-I$(top_srcdir)/src/gtest/include \
- $(DEFINES) \
- $(API_DEFINES)
+ $(DEFINES)
AM_CFLAGS = $(VISIBILITY_CFLAGS)
AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
diff --git a/mesalib/src/glsl/Makefile.sources b/mesalib/src/glsl/Makefile.sources
index b5282a604..50bad85ad 100644
--- a/mesalib/src/glsl/Makefile.sources
+++ b/mesalib/src/glsl/Makefile.sources
@@ -16,6 +16,7 @@ LIBGLCPP_GENERATED_FILES = \
# libglsl
LIBGLSL_FILES = \
+ $(GLSL_SRCDIR)/ast_array_index.cpp \
$(GLSL_SRCDIR)/ast_expr.cpp \
$(GLSL_SRCDIR)/ast_function.cpp \
$(GLSL_SRCDIR)/ast_to_hir.cpp \
@@ -45,6 +46,7 @@ LIBGLSL_FILES = \
$(GLSL_SRCDIR)/ir_variable_refcount.cpp \
$(GLSL_SRCDIR)/linker.cpp \
$(GLSL_SRCDIR)/link_functions.cpp \
+ $(GLSL_SRCDIR)/link_interface_blocks.cpp \
$(GLSL_SRCDIR)/link_uniforms.cpp \
$(GLSL_SRCDIR)/link_uniform_initializers.cpp \
$(GLSL_SRCDIR)/link_uniform_block_active_visitor.cpp \
@@ -62,12 +64,14 @@ LIBGLSL_FILES = \
$(GLSL_SRCDIR)/lower_mat_op_to_vec.cpp \
$(GLSL_SRCDIR)/lower_noise.cpp \
$(GLSL_SRCDIR)/lower_packed_varyings.cpp \
+ $(GLSL_SRCDIR)/lower_named_interface_blocks.cpp \
$(GLSL_SRCDIR)/lower_packing_builtins.cpp \
$(GLSL_SRCDIR)/lower_texture_projection.cpp \
$(GLSL_SRCDIR)/lower_variable_index_to_cond_assign.cpp \
$(GLSL_SRCDIR)/lower_vec_index_to_cond_assign.cpp \
$(GLSL_SRCDIR)/lower_vec_index_to_swizzle.cpp \
$(GLSL_SRCDIR)/lower_vector.cpp \
+ $(GLSL_SRCDIR)/lower_vector_insert.cpp \
$(GLSL_SRCDIR)/lower_output_reads.cpp \
$(GLSL_SRCDIR)/lower_ubo_reference.cpp \
$(GLSL_SRCDIR)/opt_algebraic.cpp \
@@ -81,6 +85,7 @@ LIBGLSL_FILES = \
$(GLSL_SRCDIR)/opt_dead_code_local.cpp \
$(GLSL_SRCDIR)/opt_dead_functions.cpp \
$(GLSL_SRCDIR)/opt_flatten_nested_if_blocks.cpp \
+ $(GLSL_SRCDIR)/opt_flip_matrices.cpp \
$(GLSL_SRCDIR)/opt_function_inlining.cpp \
$(GLSL_SRCDIR)/opt_if_simplification.cpp \
$(GLSL_SRCDIR)/opt_noop_swizzle.cpp \
diff --git a/mesalib/src/glsl/ast.h b/mesalib/src/glsl/ast.h
index fcc6b4566..df2a21f79 100644
--- a/mesalib/src/glsl/ast.h
+++ b/mesalib/src/glsl/ast.h
@@ -805,9 +805,9 @@ public:
ast_compound_statement *body;
};
-class ast_uniform_block : public ast_node {
+class ast_interface_block : public ast_node {
public:
- ast_uniform_block(ast_type_qualifier layout,
+ ast_interface_block(ast_type_qualifier layout,
const char *instance_name,
ast_expression *array_size)
: layout(layout), block_name(NULL), instance_name(instance_name),
@@ -854,7 +854,17 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
exec_list *instructions,
struct _mesa_glsl_parse_state *state);
+extern ir_rvalue *
+_mesa_ast_array_index_to_hir(void *mem_ctx,
+ struct _mesa_glsl_parse_state *state,
+ ir_rvalue *array, ir_rvalue *idx,
+ YYLTYPE &loc, YYLTYPE &idx_loc);
+
void
emit_function(_mesa_glsl_parse_state *state, ir_function *f);
+extern void
+check_builtin_array_max_size(const char *name, unsigned size,
+ YYLTYPE loc, struct _mesa_glsl_parse_state *state);
+
#endif /* AST_H */
diff --git a/mesalib/src/glsl/ast_array_index.cpp b/mesalib/src/glsl/ast_array_index.cpp
new file mode 100644
index 000000000..4baeb6f9d
--- /dev/null
+++ b/mesalib/src/glsl/ast_array_index.cpp
@@ -0,0 +1,190 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * 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.
+ */
+
+#include "ast.h"
+#include "glsl_types.h"
+#include "ir.h"
+
+ir_rvalue *
+_mesa_ast_array_index_to_hir(void *mem_ctx,
+ struct _mesa_glsl_parse_state *state,
+ ir_rvalue *array, ir_rvalue *idx,
+ YYLTYPE &loc, YYLTYPE &idx_loc)
+{
+ if (!array->type->is_error()
+ && !array->type->is_array()
+ && !array->type->is_matrix()
+ && !array->type->is_vector()) {
+ _mesa_glsl_error(& idx_loc, state,
+ "cannot dereference non-array / non-matrix / "
+ "non-vector");
+ }
+
+ if (!idx->type->is_error()) {
+ if (!idx->type->is_integer()) {
+ _mesa_glsl_error(& idx_loc, state, "array index must be integer type");
+ } else if (!idx->type->is_scalar()) {
+ _mesa_glsl_error(& idx_loc, state, "array index must be scalar");
+ }
+ }
+
+ /* If the array index is a constant expression and the array has a
+ * declared size, ensure that the access is in-bounds. If the array
+ * index is not a constant expression, ensure that the array has a
+ * declared size.
+ */
+ ir_constant *const const_index = idx->constant_expression_value();
+ if (const_index != NULL && idx->type->is_integer()) {
+ const int idx = const_index->value.i[0];
+ const char *type_name = "error";
+ unsigned bound = 0;
+
+ /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec:
+ *
+ * "It is illegal to declare an array with a size, and then
+ * later (in the same shader) index the same array with an
+ * integral constant expression greater than or equal to the
+ * declared size. It is also illegal to index an array with a
+ * negative constant expression."
+ */
+ if (array->type->is_matrix()) {
+ if (array->type->row_type()->vector_elements <= idx) {
+ type_name = "matrix";
+ bound = array->type->row_type()->vector_elements;
+ }
+ } else if (array->type->is_vector()) {
+ if (array->type->vector_elements <= idx) {
+ type_name = "vector";
+ bound = array->type->vector_elements;
+ }
+ } else {
+ /* glsl_type::array_size() returns 0 for non-array types. This means
+ * that we don't need to verify that the type is an array before
+ * doing the bounds checking.
+ */
+ if ((array->type->array_size() > 0)
+ && (array->type->array_size() <= idx)) {
+ type_name = "array";
+ bound = array->type->array_size();
+ }
+ }
+
+ if (bound > 0) {
+ _mesa_glsl_error(& loc, state, "%s index must be < %u",
+ type_name, bound);
+ } else if (idx < 0) {
+ _mesa_glsl_error(& loc, state, "%s index must be >= 0",
+ type_name);
+ }
+
+ if (array->type->is_array()) {
+ /* If the array is a variable dereference, it dereferences the
+ * whole array, by definition. Use this to get the variable.
+ *
+ * FINISHME: Should some methods for getting / setting / testing
+ * FINISHME: array access limits be added to ir_dereference?
+ */
+ ir_variable *const v = array->whole_variable_referenced();
+ if ((v != NULL) && (unsigned(idx) > v->max_array_access)) {
+ v->max_array_access = idx;
+
+ /* Check whether this access will, as a side effect, implicitly
+ * cause the size of a built-in array to be too large.
+ */
+ check_builtin_array_max_size(v->name, idx+1, loc, state);
+ }
+ }
+ } else if (const_index == NULL && array->type->is_array()) {
+ if (array->type->array_size() == 0) {
+ _mesa_glsl_error(&loc, state, "unsized array index must be constant");
+ } else if (array->type->fields.array->is_interface()) {
+ /* Page 46 in section 4.3.7 of the OpenGL ES 3.00 spec says:
+ *
+ * "All indexes used to index a uniform block array must be
+ * constant integral expressions."
+ */
+ _mesa_glsl_error(&loc, state,
+ "uniform block array index must be constant");
+ } else {
+ /* whole_variable_referenced can return NULL if the array is a
+ * member of a structure. In this case it is safe to not update
+ * the max_array_access field because it is never used for fields
+ * of structures.
+ */
+ ir_variable *v = array->whole_variable_referenced();
+ if (v != NULL)
+ v->max_array_access = array->type->array_size() - 1;
+ }
+
+ /* From page 23 (29 of the PDF) of the GLSL 1.30 spec:
+ *
+ * "Samplers aggregated into arrays within a shader (using square
+ * brackets [ ]) can only be indexed with integral constant
+ * expressions [...]."
+ *
+ * This restriction was added in GLSL 1.30. Shaders using earlier
+ * version of the language should not be rejected by the compiler
+ * front-end for using this construct. This allows useful things such
+ * as using a loop counter as the index to an array of samplers. If the
+ * loop in unrolled, the code should compile correctly. Instead, emit a
+ * warning.
+ */
+ if (array->type->element_type()->is_sampler()) {
+ if (!state->is_version(130, 100)) {
+ if (state->es_shader) {
+ _mesa_glsl_warning(&loc, state,
+ "sampler arrays indexed with non-constant "
+ "expressions is optional in %s",
+ state->get_version_string());
+ } else {
+ _mesa_glsl_warning(&loc, state,
+ "sampler arrays indexed with non-constant "
+ "expressions will be forbidden in GLSL 1.30 "
+ "and later");
+ }
+ } else {
+ _mesa_glsl_error(&loc, state,
+ "sampler arrays indexed with non-constant "
+ "expressions is forbidden in GLSL 1.30 and "
+ "later");
+ }
+ }
+ }
+
+ /* After performing all of the error checking, generate the IR for the
+ * expression.
+ */
+ if (array->type->is_array()
+ || array->type->is_matrix()) {
+ return new(mem_ctx) ir_dereference_array(array, idx);
+ } else if (array->type->is_vector()) {
+ return new(mem_ctx) ir_expression(ir_binop_vector_extract, array, idx);
+ } else if (array->type->is_error()) {
+ return array;
+ } else {
+ ir_rvalue *result = new(mem_ctx) ir_dereference_array(array, idx);
+ result->type = glsl_type::error_type;
+
+ return result;
+ }
+}
diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp
index 26f72cf8e..00e0c05dd 100644
--- a/mesalib/src/glsl/ast_function.cpp
+++ b/mesalib/src/glsl/ast_function.cpp
@@ -165,10 +165,18 @@ verify_parameter_modes(_mesa_glsl_parse_state *state,
actual->variable_referenced()->name);
return false;
} else if (!actual->is_lvalue()) {
- _mesa_glsl_error(&loc, state,
- "function parameter '%s %s' is not an lvalue",
- mode, formal->name);
- return false;
+ /* Even though ir_binop_vector_extract is not an l-value, let it
+ * slop through. generate_call will handle it correctly.
+ */
+ ir_expression *const expr = ((ir_rvalue *) actual)->as_expression();
+ if (expr == NULL
+ || expr->operation != ir_binop_vector_extract
+ || !expr->operands[0]->is_lvalue()) {
+ _mesa_glsl_error(&loc, state,
+ "function parameter '%s %s' is not an lvalue",
+ mode, formal->name);
+ return false;
+ }
}
}
@@ -178,6 +186,93 @@ verify_parameter_modes(_mesa_glsl_parse_state *state,
return true;
}
+static void
+fix_parameter(void *mem_ctx, ir_rvalue *actual, const glsl_type *formal_type,
+ exec_list *before_instructions, exec_list *after_instructions,
+ bool parameter_is_inout)
+{
+ ir_expression *const expr = actual->as_expression();
+
+ /* If the types match exactly and the parameter is not a vector-extract,
+ * nothing needs to be done to fix the parameter.
+ */
+ if (formal_type == actual->type
+ && (expr == NULL || expr->operation != ir_binop_vector_extract))
+ return;
+
+ /* To convert an out parameter, we need to create a temporary variable to
+ * hold the value before conversion, and then perform the conversion after
+ * the function call returns.
+ *
+ * This has the effect of transforming code like this:
+ *
+ * void f(out int x);
+ * float value;
+ * f(value);
+ *
+ * Into IR that's equivalent to this:
+ *
+ * void f(out int x);
+ * float value;
+ * int out_parameter_conversion;
+ * f(out_parameter_conversion);
+ * value = float(out_parameter_conversion);
+ *
+ * If the parameter is an ir_expression of ir_binop_vector_extract,
+ * additional conversion is needed in the post-call re-write.
+ */
+ ir_variable *tmp =
+ new(mem_ctx) ir_variable(formal_type, "inout_tmp", ir_var_temporary);
+
+ before_instructions->push_tail(tmp);
+
+ /* If the parameter is an inout parameter, copy the value of the actual
+ * parameter to the new temporary. Note that no type conversion is allowed
+ * here because inout parameters must match types exactly.
+ */
+ if (parameter_is_inout) {
+ /* Inout parameters should never require conversion, since that would
+ * require an implicit conversion to exist both to and from the formal
+ * parameter type, and there are no bidirectional implicit conversions.
+ */
+ assert (actual->type == formal_type);
+
+ ir_dereference_variable *const deref_tmp_1 =
+ new(mem_ctx) ir_dereference_variable(tmp);
+ ir_assignment *const assignment =
+ new(mem_ctx) ir_assignment(deref_tmp_1, actual);
+ before_instructions->push_tail(assignment);
+ }
+
+ /* Replace the parameter in the call with a dereference of the new
+ * temporary.
+ */
+ ir_dereference_variable *const deref_tmp_2 =
+ new(mem_ctx) ir_dereference_variable(tmp);
+ actual->replace_with(deref_tmp_2);
+
+
+ /* Copy the temporary variable to the actual parameter with optional
+ * type conversion applied.
+ */
+ ir_rvalue *rhs = new(mem_ctx) ir_dereference_variable(tmp);
+ if (actual->type != formal_type)
+ rhs = convert_component(rhs, actual->type);
+
+ ir_rvalue *lhs = actual;
+ if (expr != NULL && expr->operation == ir_binop_vector_extract) {
+ rhs = new(mem_ctx) ir_expression(ir_triop_vector_insert,
+ expr->operands[0]->type,
+ expr->operands[0]->clone(mem_ctx, NULL),
+ rhs,
+ expr->operands[1]->clone(mem_ctx, NULL));
+ lhs = expr->operands[0]->clone(mem_ctx, NULL);
+ }
+
+ ir_assignment *const assignment_2 = new(mem_ctx) ir_assignment(lhs, rhs);
+ after_instructions->push_tail(assignment_2);
+}
+
/**
* If a function call is generated, \c call_ir will point to it on exit.
* Otherwise \c call_ir will be set to \c NULL.
@@ -218,50 +313,10 @@ generate_call(exec_list *instructions, ir_function_signature *sig,
break;
}
case ir_var_function_out:
- if (actual->type != formal->type) {
- /* To convert an out parameter, we need to create a
- * temporary variable to hold the value before conversion,
- * and then perform the conversion after the function call
- * returns.
- *
- * This has the effect of transforming code like this:
- *
- * void f(out int x);
- * float value;
- * f(value);
- *
- * Into IR that's equivalent to this:
- *
- * void f(out int x);
- * float value;
- * int out_parameter_conversion;
- * f(out_parameter_conversion);
- * value = float(out_parameter_conversion);
- */
- ir_variable *tmp =
- new(ctx) ir_variable(formal->type,
- "out_parameter_conversion",
- ir_var_temporary);
- instructions->push_tail(tmp);
- ir_dereference_variable *deref_tmp_1
- = new(ctx) ir_dereference_variable(tmp);
- ir_dereference_variable *deref_tmp_2
- = new(ctx) ir_dereference_variable(tmp);
- ir_rvalue *converted_tmp
- = convert_component(deref_tmp_1, actual->type);
- ir_assignment *assignment
- = new(ctx) ir_assignment(actual, converted_tmp);
- post_call_conversions.push_tail(assignment);
- actual->replace_with(deref_tmp_2);
- }
- break;
case ir_var_function_inout:
- /* Inout parameters should never require conversion, since that
- * would require an implicit conversion to exist both to and
- * from the formal parameter type, and there are no
- * bidirectional implicit conversions.
- */
- assert (actual->type == formal->type);
+ fix_parameter(ctx, actual, formal->type,
+ instructions, &post_call_conversions,
+ formal->mode == ir_var_function_inout);
break;
default:
assert (!"Illegal formal parameter mode");
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp
index 92065f5b7..e918adeef 100644
--- a/mesalib/src/glsl/ast_to_hir.cpp
+++ b/mesalib/src/glsl/ast_to_hir.cpp
@@ -672,6 +672,30 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
void *ctx = state;
bool error_emitted = (lhs->type->is_error() || rhs->type->is_error());
+ /* If the assignment LHS comes back as an ir_binop_vector_extract
+ * expression, move it to the RHS as an ir_triop_vector_insert.
+ */
+ if (lhs->ir_type == ir_type_expression) {
+ ir_expression *const expr = lhs->as_expression();
+
+ if (unlikely(expr->operation == ir_binop_vector_extract)) {
+ ir_rvalue *new_rhs =
+ validate_assignment(state, lhs->type, rhs, is_initializer);
+
+ if (new_rhs == NULL) {
+ _mesa_glsl_error(& lhs_loc, state, "type mismatch");
+ return lhs;
+ } else {
+ rhs = new(ctx) ir_expression(ir_triop_vector_insert,
+ expr->operands[0]->type,
+ expr->operands[0],
+ new_rhs,
+ expr->operands[1]);
+ lhs = expr->operands[0]->clone(ctx, NULL);
+ }
+ }
+ }
+
ir_variable *lhs_var = lhs->variable_referenced();
if (lhs_var)
lhs_var->assigned = true;
@@ -904,7 +928,7 @@ get_scalar_boolean_operand(exec_list *instructions,
* If name refers to a builtin array whose maximum allowed size is less than
* size, report an error and return true. Otherwise return false.
*/
-static bool
+void
check_builtin_array_max_size(const char *name, unsigned size,
YYLTYPE loc, struct _mesa_glsl_parse_state *state)
{
@@ -918,7 +942,6 @@ check_builtin_array_max_size(const char *name, unsigned size,
_mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot "
"be larger than gl_MaxTextureCoords (%u)\n",
state->Const.MaxTextureCoords);
- return true;
} else if (strcmp("gl_ClipDistance", name) == 0
&& size > state->Const.MaxClipPlanes) {
/* From section 7.1 (Vertex Shader Special Variables) of the
@@ -933,9 +956,7 @@ check_builtin_array_max_size(const char *name, unsigned size,
_mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot "
"be larger than gl_MaxClipDistances (%u)\n",
state->Const.MaxClipPlanes);
- return true;
}
- return false;
}
/**
@@ -1517,172 +1538,11 @@ ast_expression::hir(exec_list *instructions,
op[0] = subexpressions[0]->hir(instructions, state);
op[1] = subexpressions[1]->hir(instructions, state);
- error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
-
- ir_rvalue *const array = op[0];
-
- result = new(ctx) ir_dereference_array(op[0], op[1]);
-
- /* Do not use op[0] after this point. Use array.
- */
- op[0] = NULL;
-
+ result = _mesa_ast_array_index_to_hir(ctx, state, op[0], op[1],
+ loc, index_loc);
- if (error_emitted)
- break;
-
- if (!array->type->is_array()
- && !array->type->is_matrix()
- && !array->type->is_vector()) {
- _mesa_glsl_error(& index_loc, state,
- "cannot dereference non-array / non-matrix / "
- "non-vector");
+ if (result->type->is_error())
error_emitted = true;
- }
-
- if (!op[1]->type->is_integer()) {
- _mesa_glsl_error(& index_loc, state,
- "array index must be integer type");
- error_emitted = true;
- } else if (!op[1]->type->is_scalar()) {
- _mesa_glsl_error(& index_loc, state,
- "array index must be scalar");
- error_emitted = true;
- }
-
- /* If the array index is a constant expression and the array has a
- * declared size, ensure that the access is in-bounds. If the array
- * index is not a constant expression, ensure that the array has a
- * declared size.
- */
- ir_constant *const const_index = op[1]->constant_expression_value();
- if (const_index != NULL) {
- const int idx = const_index->value.i[0];
- const char *type_name;
- unsigned bound = 0;
-
- if (array->type->is_matrix()) {
- type_name = "matrix";
- } else if (array->type->is_vector()) {
- type_name = "vector";
- } else {
- type_name = "array";
- }
-
- /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec:
- *
- * "It is illegal to declare an array with a size, and then
- * later (in the same shader) index the same array with an
- * integral constant expression greater than or equal to the
- * declared size. It is also illegal to index an array with a
- * negative constant expression."
- */
- if (array->type->is_matrix()) {
- if (array->type->row_type()->vector_elements <= idx) {
- bound = array->type->row_type()->vector_elements;
- }
- } else if (array->type->is_vector()) {
- if (array->type->vector_elements <= idx) {
- bound = array->type->vector_elements;
- }
- } else {
- if ((array->type->array_size() > 0)
- && (array->type->array_size() <= idx)) {
- bound = array->type->array_size();
- }
- }
-
- if (bound > 0) {
- _mesa_glsl_error(& loc, state, "%s index must be < %u",
- type_name, bound);
- error_emitted = true;
- } else if (idx < 0) {
- _mesa_glsl_error(& loc, state, "%s index must be >= 0",
- type_name);
- error_emitted = true;
- }
-
- if (array->type->is_array()) {
- /* If the array is a variable dereference, it dereferences the
- * whole array, by definition. Use this to get the variable.
- *
- * FINISHME: Should some methods for getting / setting / testing
- * FINISHME: array access limits be added to ir_dereference?
- */
- ir_variable *const v = array->whole_variable_referenced();
- if ((v != NULL) && (unsigned(idx) > v->max_array_access)) {
- v->max_array_access = idx;
-
- /* Check whether this access will, as a side effect, implicitly
- * cause the size of a built-in array to be too large.
- */
- if (check_builtin_array_max_size(v->name, idx+1, loc, state))
- error_emitted = true;
- }
- }
- } else if (array->type->array_size() == 0) {
- _mesa_glsl_error(&loc, state, "unsized array index must be constant");
- } else if (array->type->is_array()
- && array->type->fields.array->is_interface()) {
- /* Page 46 in section 4.3.7 of the OpenGL ES 3.00 spec says:
- *
- * "All indexes used to index a uniform block array must be
- * constant integral expressions."
- */
- _mesa_glsl_error(&loc, state,
- "uniform block array index must be constant");
- } else {
- if (array->type->is_array()) {
- /* whole_variable_referenced can return NULL if the array is a
- * member of a structure. In this case it is safe to not update
- * the max_array_access field because it is never used for fields
- * of structures.
- */
- ir_variable *v = array->whole_variable_referenced();
- if (v != NULL)
- v->max_array_access = array->type->array_size() - 1;
- }
- }
-
- /* From page 23 (29 of the PDF) of the GLSL 1.30 spec:
- *
- * "Samplers aggregated into arrays within a shader (using square
- * brackets [ ]) can only be indexed with integral constant
- * expressions [...]."
- *
- * This restriction was added in GLSL 1.30. Shaders using earlier version
- * of the language should not be rejected by the compiler front-end for
- * using this construct. This allows useful things such as using a loop
- * counter as the index to an array of samplers. If the loop in unrolled,
- * the code should compile correctly. Instead, emit a warning.
- */
- if (array->type->is_array() &&
- array->type->element_type()->is_sampler() &&
- const_index == NULL) {
-
- if (!state->is_version(130, 100)) {
- if (state->es_shader) {
- _mesa_glsl_warning(&loc, state,
- "sampler arrays indexed with non-constant "
- "expressions is optional in %s",
- state->get_version_string());
- } else {
- _mesa_glsl_warning(&loc, state,
- "sampler arrays indexed with non-constant "
- "expressions will be forbidden in GLSL 1.30 and "
- "later");
- }
- } else {
- _mesa_glsl_error(&loc, state,
- "sampler arrays indexed with non-constant "
- "expressions is forbidden in GLSL 1.30 and "
- "later");
- error_emitted = true;
- }
- }
-
- if (error_emitted)
- result->type = glsl_type::error_type;
break;
}
@@ -1842,6 +1702,9 @@ process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size,
{
unsigned length = 0;
+ if (base == NULL)
+ return glsl_type::error_type;
+
/* From page 19 (page 25) of the GLSL 1.20 spec:
*
* "Only one-dimensional arrays may be declared."
@@ -1894,7 +1757,8 @@ process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size,
"allowed in GLSL ES 1.00.");
}
- return glsl_type::get_array_instance(base, length);
+ const glsl_type *array_type = glsl_type::get_array_instance(base, length);
+ return array_type != NULL ? array_type : glsl_type::error_type;
}
@@ -3365,10 +3229,17 @@ ast_function::hir(exec_list *instructions,
"match prototype", name);
}
- if (is_definition && sig->is_defined) {
- YYLTYPE loc = this->get_location();
-
- _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
+ if (sig->is_defined) {
+ if (is_definition) {
+ YYLTYPE loc = this->get_location();
+ _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
+ } else {
+ /* We just encountered a prototype that exactly matches a
+ * function that's already been defined. This is redundant,
+ * and we should ignore it.
+ */
+ return NULL;
+ }
}
}
} else {
@@ -4149,8 +4020,14 @@ ast_process_structure_or_interface_block(exec_list *instructions,
* blocks. All other types, arrays, and structures
* allowed for uniforms are allowed within a uniform
* block."
+ *
+ * It should be impossible for decl_type to be NULL here. Cases that
+ * might naturally lead to decl_type being NULL, especially for the
+ * is_interface case, will have resulted in compilation having
+ * already halted due to a syntax error.
*/
- const struct glsl_type *field_type = decl_type;
+ const struct glsl_type *field_type =
+ decl_type != NULL ? decl_type : glsl_type::error_type;
if (is_interface && field_type->contains_sampler()) {
YYLTYPE loc = decl_list->get_location();
@@ -4173,12 +4050,15 @@ ast_process_structure_or_interface_block(exec_list *instructions,
field_type = process_array_type(&loc, decl_type, decl->array_size,
state);
}
- fields[i].type = (field_type != NULL)
- ? field_type : glsl_type::error_type;
+ fields[i].type = field_type;
fields[i].name = decl->identifier;
if (qual->flags.q.row_major || qual->flags.q.column_major) {
- if (!field_type->is_matrix() && !field_type->is_record()) {
+ if (!qual->flags.q.uniform) {
+ _mesa_glsl_error(&loc, state,
+ "row_major and column_major can only be "
+ "applied to uniform interface blocks.");
+ } else if (!field_type->is_matrix() && !field_type->is_record()) {
_mesa_glsl_error(&loc, state,
"uniform block layout qualifiers row_major and "
"column_major can only be applied to matrix and "
@@ -4187,6 +4067,12 @@ ast_process_structure_or_interface_block(exec_list *instructions,
validate_matrix_layout_for_type(state, &loc, field_type);
}
+ if (qual->flags.q.uniform && qual->has_interpolation()) {
+ _mesa_glsl_error(&loc, state,
+ "interpolation qualifiers cannot be used "
+ "with uniform interface blocks");
+ }
+
if (field_type->is_matrix() ||
(field_type->is_array() && field_type->fields.array->is_matrix())) {
fields[i].row_major = block_row_major;
@@ -4244,12 +4130,12 @@ ast_struct_specifier::hir(exec_list *instructions,
}
ir_rvalue *
-ast_uniform_block::hir(exec_list *instructions,
- struct _mesa_glsl_parse_state *state)
+ast_interface_block::hir(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state)
{
YYLTYPE loc = this->get_location();
- /* The ast_uniform_block has a list of ast_declarator_lists. We
+ /* The ast_interface_block has a list of ast_declarator_lists. We
* need to turn those into ir_variables with an association
* with this uniform block.
*/
@@ -4276,16 +4162,32 @@ ast_uniform_block::hir(exec_list *instructions,
true,
block_row_major);
+ ir_variable_mode var_mode;
+ const char *iface_type_name;
+ if (this->layout.flags.q.in) {
+ var_mode = ir_var_shader_in;
+ iface_type_name = "in";
+ } else if (this->layout.flags.q.out) {
+ var_mode = ir_var_shader_out;
+ iface_type_name = "out";
+ } else if (this->layout.flags.q.uniform) {
+ var_mode = ir_var_uniform;
+ iface_type_name = "uniform";
+ } else {
+ assert(!"interface block layout qualifier not found!");
+ }
+
const glsl_type *block_type =
glsl_type::get_interface_instance(fields,
num_variables,
packing,
this->block_name);
- if (!state->symbols->add_type(block_type->name, block_type)) {
+ if (!state->symbols->add_interface(block_type->name, block_type, var_mode)) {
YYLTYPE loc = this->get_location();
- _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
- "the current scope.\n", this->block_name);
+ _mesa_glsl_error(&loc, state, "Interface block `%s' with type `%s' "
+ "already taken in the current scope.\n",
+ this->block_name, iface_type_name);
}
/* Since interface blocks cannot contain statements, it should be
@@ -4309,11 +4211,11 @@ ast_uniform_block::hir(exec_list *instructions,
var = new(state) ir_variable(block_array_type,
this->instance_name,
- ir_var_uniform);
+ var_mode);
} else {
var = new(state) ir_variable(block_type,
this->instance_name,
- ir_var_uniform);
+ var_mode);
}
var->interface_type = block_type;
@@ -4329,7 +4231,7 @@ ast_uniform_block::hir(exec_list *instructions,
ir_variable *var =
new(state) ir_variable(fields[i].type,
ralloc_strdup(state, fields[i].name),
- ir_var_uniform);
+ var_mode);
var->interface_type = block_type;
state->symbols->add_variable(var);
diff --git a/mesalib/src/glsl/builtin_variables.cpp b/mesalib/src/glsl/builtin_variables.cpp
index b0c7a2035..4bb361c2e 100644
--- a/mesalib/src/glsl/builtin_variables.cpp
+++ b/mesalib/src/glsl/builtin_variables.cpp
@@ -39,6 +39,12 @@ generate_ARB_draw_instanced_variables(exec_list *,
struct _mesa_glsl_parse_state *,
bool, _mesa_glsl_parser_targets);
+static void
+generate_AMD_vertex_shader_layer_variables(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state,
+ bool warn,
+ _mesa_glsl_parser_targets target);
+
struct builtin_variable {
enum ir_variable_mode mode;
int slot;
@@ -535,7 +541,7 @@ generate_common_ES_uniforms(exec_list *instructions,
add_builtin_constant(instructions, symtab, "gl_MaxTextureImageUnits",
state->Const.MaxTextureImageUnits);
add_builtin_constant(instructions, symtab, "gl_MaxFragmentUniformVectors",
- state->Const.MaxFragmentUniformComponents);
+ state->Const.MaxFragmentUniformComponents / 4);
add_uniform(instructions, symtab, "gl_DepthRange",
state->symbols->get_type("gl_DepthRangeParameters"));
@@ -818,6 +824,8 @@ generate_130_vs_variables(exec_list *instructions,
"gl_ClipDistance", clip_distance_array_type, ir_var_shader_out,
VARYING_SLOT_CLIP_DIST0);
+ generate_AMD_vertex_shader_layer_variables(instructions, state, false,
+ vertex_shader);
}
@@ -1020,6 +1028,29 @@ generate_ARB_draw_instanced_variables(exec_list *instructions,
}
}
+static void
+generate_AMD_vertex_shader_layer_variables(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state,
+ bool warn,
+ _mesa_glsl_parser_targets target)
+{
+ /* gl_Layer is only available in the vertex shader for the
+ * AMD_vertex_shader_layer extension. It will also be available in the
+ * geometry shader when GLSL 1.50 is supported.
+ */
+ if (target != vertex_shader)
+ return;
+
+ if (state->AMD_vertex_shader_layer_enable) {
+ ir_variable *inst =
+ add_variable(instructions, state->symbols,
+ "gl_Layer", glsl_type::int_type,
+ ir_var_shader_out, VARYING_SLOT_LAYER);
+
+ if (warn)
+ inst->warn_extension = "GL_AMD_vertex_shader_layer";
+ }
+}
static void
generate_ARB_shader_stencil_export_variables(exec_list *instructions,
diff --git a/mesalib/src/glsl/glcpp/glcpp-parse.y b/mesalib/src/glsl/glcpp/glcpp-parse.y
index 00edbbfbd..81ba04bcc 100644
--- a/mesalib/src/glsl/glcpp/glcpp-parse.y
+++ b/mesalib/src/glsl/glcpp/glcpp-parse.y
@@ -1236,6 +1236,12 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api)
if (extensions->ARB_texture_query_lod)
add_builtin_define(parser, "GL_ARB_texture_query_lod", 1);
+
+ if (extensions->ARB_gpu_shader5)
+ add_builtin_define(parser, "GL_ARB_gpu_shader5", 1);
+
+ if (extensions->AMD_vertex_shader_layer)
+ add_builtin_define(parser, "GL_AMD_vertex_shader_layer", 1);
}
}
diff --git a/mesalib/src/glsl/glcpp/pp.c b/mesalib/src/glsl/glcpp/pp.c
index 789f7f941..7e1b6c689 100644
--- a/mesalib/src/glsl/glcpp/pp.c
+++ b/mesalib/src/glsl/glcpp/pp.c
@@ -97,8 +97,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
{
ralloc_strncat(&clean, shader,
newline - shader + 1);
- while (collapsed_newlines--)
+ while (collapsed_newlines) {
ralloc_strcat(&clean, "\n");
+ collapsed_newlines--;
+ }
shader = newline + 1;
search_start = shader;
}
diff --git a/mesalib/src/glsl/glsl_parser.yy b/mesalib/src/glsl/glsl_parser.yy
index f52ed9b0a..6e92c2651 100644
--- a/mesalib/src/glsl/glsl_parser.yy
+++ b/mesalib/src/glsl/glsl_parser.yy
@@ -79,7 +79,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
ast_case_label_list *case_label_list;
ast_case_statement *case_statement;
ast_case_statement_list *case_statement_list;
- ast_uniform_block *uniform_block;
+ ast_interface_block *interface_block;
struct {
ast_node *cond;
@@ -115,7 +115,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
%token STRUCT VOID_TOK WHILE
%token <identifier> IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
%type <identifier> any_identifier
-%type <uniform_block> instance_name_opt
+%type <interface_block> instance_name_opt
%token <real> FLOATCONSTANT
%token <n> INTCONSTANT UINTCONSTANT BOOLCONSTANT
%token <identifier> FIELD_SELECTION
@@ -164,7 +164,8 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
%type <type_qualifier> interpolation_qualifier
%type <type_qualifier> layout_qualifier
%type <type_qualifier> layout_qualifier_id_list layout_qualifier_id
-%type <type_qualifier> uniform_block_layout_qualifier
+%type <type_qualifier> interface_block_layout_qualifier
+%type <type_qualifier> interface_qualifier
%type <type_specifier> type_specifier
%type <type_specifier> type_specifier_no_prec
%type <type_specifier> type_specifier_nonarray
@@ -223,8 +224,8 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
%type <node> declaration
%type <node> declaration_statement
%type <node> jump_statement
-%type <node> uniform_block
-%type <uniform_block> basic_uniform_block
+%type <node> interface_block
+%type <interface_block> basic_interface_block
%type <struct_specifier> struct_specifier
%type <declarator_list> struct_declaration_list
%type <declarator_list> struct_declaration
@@ -784,7 +785,7 @@ declaration:
$3->is_precision_statement = true;
$$ = $3;
}
- | uniform_block
+ | interface_block
{
$$ = $1;
}
@@ -1140,7 +1141,7 @@ layout_qualifier_id:
}
}
- /* See also uniform_block_layout_qualifier. */
+ /* See also interface_block_layout_qualifier. */
if (!$$.flags.i && state->ARB_uniform_buffer_object_enable) {
if (strcmp($1, "std140") == 0) {
$$.flags.q.std140 = 1;
@@ -1211,15 +1212,15 @@ layout_qualifier_id:
"identifier `%s' used\n", $1);
}
}
- | uniform_block_layout_qualifier
+ | interface_block_layout_qualifier
{
$$ = $1;
/* Layout qualifiers for ARB_uniform_buffer_object. */
- if (!state->ARB_uniform_buffer_object_enable) {
+ if ($$.flags.q.uniform && !state->ARB_uniform_buffer_object_enable) {
_mesa_glsl_error(& @1, state,
"#version 140 / GL_ARB_uniform_buffer_object "
"layout qualifier `%s' is used\n", $1);
- } else if (state->ARB_uniform_buffer_object_warn) {
+ } else if ($$.flags.q.uniform && state->ARB_uniform_buffer_object_warn) {
_mesa_glsl_warning(& @1, state,
"#version 140 / GL_ARB_uniform_buffer_object "
"layout qualifier `%s' is used\n", $1);
@@ -1232,7 +1233,7 @@ layout_qualifier_id:
* most qualifiers. See the any_identifier path of
* layout_qualifier_id for the others.
*/
-uniform_block_layout_qualifier:
+interface_block_layout_qualifier:
ROW_MAJOR
{
memset(& $$, 0, sizeof($$));
@@ -1893,14 +1894,14 @@ function_definition:
;
/* layout_qualifieropt is packed into this rule */
-uniform_block:
- basic_uniform_block
+interface_block:
+ basic_interface_block
{
$$ = $1;
}
- | layout_qualifier basic_uniform_block
+ | layout_qualifier basic_interface_block
{
- ast_uniform_block *block = $2;
+ ast_interface_block *block = $2;
if (!block->layout.merge_qualifier(& @1, state, $1)) {
YYERROR;
}
@@ -1908,55 +1909,137 @@ uniform_block:
}
;
-basic_uniform_block:
- UNIFORM NEW_IDENTIFIER '{' member_list '}' instance_name_opt ';'
+basic_interface_block:
+ interface_qualifier NEW_IDENTIFIER '{' member_list '}' instance_name_opt ';'
{
- ast_uniform_block *const block = $6;
+ ast_interface_block *const block = $6;
block->block_name = $2;
block->declarations.push_degenerate_list_at_head(& $4->link);
- if (!state->ARB_uniform_buffer_object_enable) {
+ if ($1.flags.q.uniform) {
+ if (!state->ARB_uniform_buffer_object_enable) {
+ _mesa_glsl_error(& @1, state,
+ "#version 140 / GL_ARB_uniform_buffer_object "
+ "required for defining uniform blocks\n");
+ } else if (state->ARB_uniform_buffer_object_warn) {
+ _mesa_glsl_warning(& @1, state,
+ "#version 140 / GL_ARB_uniform_buffer_object "
+ "required for defining uniform blocks\n");
+ }
+ } else {
+ if (state->es_shader || state->language_version < 150) {
+ _mesa_glsl_error(& @1, state,
+ "#version 150 required for using "
+ "interface blocks.\n");
+ }
+ }
+
+ /* From the GLSL 1.50.11 spec, section 4.3.7 ("Interface Blocks"):
+ * "It is illegal to have an input block in a vertex shader
+ * or an output block in a fragment shader"
+ */
+ if ((state->target == vertex_shader) && $1.flags.q.in) {
_mesa_glsl_error(& @1, state,
- "#version 140 / GL_ARB_uniform_buffer_object "
- "required for defining uniform blocks\n");
- } else if (state->ARB_uniform_buffer_object_warn) {
- _mesa_glsl_warning(& @1, state,
- "#version 140 / GL_ARB_uniform_buffer_object "
- "required for defining uniform blocks\n");
+ "`in' interface block is not allowed for "
+ "a vertex shader\n");
+ } else if ((state->target == fragment_shader) && $1.flags.q.out) {
+ _mesa_glsl_error(& @1, state,
+ "`out' interface block is not allowed for "
+ "a fragment shader\n");
}
/* Since block arrays require names, and both features are added in
* the same language versions, we don't have to explicitly
* version-check both things.
*/
- if (block->instance_name != NULL
- && !(state->language_version == 300 && state->es_shader)) {
- _mesa_glsl_error(& @1, state,
- "#version 300 es required for using uniform "
- "blocks with an instance name\n");
+ if (block->instance_name != NULL) {
+ state->check_version(150, 300, & @1, "interface blocks with "
+ "an instance name are not allowed");
+ }
+
+ unsigned interface_type_mask;
+ struct ast_type_qualifier temp_type_qualifier;
+
+ /* Get a bitmask containing only the in/out/uniform flags, allowing us
+ * to ignore other irrelevant flags like interpolation qualifiers.
+ */
+ temp_type_qualifier.flags.i = 0;
+ temp_type_qualifier.flags.q.uniform = true;
+ temp_type_qualifier.flags.q.in = true;
+ temp_type_qualifier.flags.q.out = true;
+ interface_type_mask = temp_type_qualifier.flags.i;
+
+ /* Get the block's interface qualifier. The interface_qualifier
+ * production rule guarantees that only one bit will be set (and
+ * it will be in/out/uniform).
+ */
+ unsigned block_interface_qualifier = $1.flags.i;
+
+ block->layout.flags.i |= block_interface_qualifier;
+
+ foreach_list_typed (ast_declarator_list, member, link, &block->declarations) {
+ ast_type_qualifier& qualifier = member->type->qualifier;
+ if ((qualifier.flags.i & interface_type_mask) == 0) {
+ /* GLSLangSpec.1.50.11, 4.3.7 (Interface Blocks):
+ * "If no optional qualifier is used in a member declaration, the
+ * qualifier of the variable is just in, out, or uniform as declared
+ * by interface-qualifier."
+ */
+ qualifier.flags.i |= block_interface_qualifier;
+ } else if ((qualifier.flags.i & interface_type_mask) !=
+ block_interface_qualifier) {
+ /* GLSLangSpec.1.50.11, 4.3.7 (Interface Blocks):
+ * "If optional qualifiers are used, they can include interpolation
+ * and storage qualifiers and they must declare an input, output,
+ * or uniform variable consistent with the interface qualifier of
+ * the block."
+ */
+ _mesa_glsl_error(& @1, state,
+ "uniform/in/out qualifier on "
+ "interface block member does not match "
+ "the interface block\n");
+ }
}
$$ = block;
}
;
+interface_qualifier:
+ IN_TOK
+ {
+ memset(& $$, 0, sizeof($$));
+ $$.flags.q.in = 1;
+ }
+ | OUT_TOK
+ {
+ memset(& $$, 0, sizeof($$));
+ $$.flags.q.out = 1;
+ }
+ | UNIFORM
+ {
+ memset(& $$, 0, sizeof($$));
+ $$.flags.q.uniform = 1;
+ }
+ ;
+
instance_name_opt:
/* empty */
{
- $$ = new(state) ast_uniform_block(*state->default_uniform_qualifier,
+ $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
NULL,
NULL);
}
| NEW_IDENTIFIER
{
- $$ = new(state) ast_uniform_block(*state->default_uniform_qualifier,
+ $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
$1,
NULL);
}
| NEW_IDENTIFIER '[' constant_expression ']'
{
- $$ = new(state) ast_uniform_block(*state->default_uniform_qualifier,
+ $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
$1,
$3);
}
@@ -1965,7 +2048,7 @@ instance_name_opt:
_mesa_glsl_error(& @1, state,
"instance block arrays must be explicitly sized\n");
- $$ = new(state) ast_uniform_block(*state->default_uniform_qualifier,
+ $$ = new(state) ast_interface_block(*state->default_uniform_qualifier,
$1,
NULL);
}
@@ -1984,41 +2067,28 @@ member_list:
}
;
-/* Specifying "uniform" inside of a uniform block is redundant. */
-uniformopt:
- /* nothing */
- | UNIFORM
- ;
-
member_declaration:
- layout_qualifier uniformopt type_specifier struct_declarator_list ';'
+ fully_specified_type struct_declarator_list ';'
{
void *ctx = state;
- ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
+ ast_fully_specified_type *type = $1;
type->set_location(yylloc);
- type->qualifier = $1;
- type->qualifier.flags.q.uniform = true;
- type->specifier = $3;
- $$ = new(ctx) ast_declarator_list(type);
- $$->set_location(yylloc);
- $$->ubo_qualifiers_valid = true;
-
- $$->declarations.push_degenerate_list_at_head(& $4->link);
- }
- | uniformopt type_specifier struct_declarator_list ';'
- {
- void *ctx = state;
- ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
- type->set_location(yylloc);
+ if (type->qualifier.flags.q.attribute) {
+ _mesa_glsl_error(& @1, state,
+ "keyword 'attribute' cannot be used with "
+ "interface block member\n");
+ } else if (type->qualifier.flags.q.varying) {
+ _mesa_glsl_error(& @1, state,
+ "keyword 'varying' cannot be used with "
+ "interface block member\n");
+ }
- type->qualifier.flags.q.uniform = true;
- type->specifier = $2;
$$ = new(ctx) ast_declarator_list(type);
$$->set_location(yylloc);
$$->ubo_qualifiers_valid = true;
- $$->declarations.push_degenerate_list_at_head(& $3->link);
+ $$->declarations.push_degenerate_list_at_head(& $2->link);
}
;
diff --git a/mesalib/src/glsl/glsl_parser_extras.cpp b/mesalib/src/glsl/glsl_parser_extras.cpp
index 099229410..c0dd71370 100644
--- a/mesalib/src/glsl/glsl_parser_extras.cpp
+++ b/mesalib/src/glsl/glsl_parser_extras.cpp
@@ -93,9 +93,9 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
this->Const.MaxVertexAttribs = ctx->Const.VertexProgram.MaxAttribs;
this->Const.MaxVertexUniformComponents = ctx->Const.VertexProgram.MaxUniformComponents;
this->Const.MaxVaryingFloats = ctx->Const.MaxVarying * 4;
- this->Const.MaxVertexTextureImageUnits = ctx->Const.MaxVertexTextureImageUnits;
+ this->Const.MaxVertexTextureImageUnits = ctx->Const.VertexProgram.MaxTextureImageUnits;
this->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxCombinedTextureImageUnits;
- this->Const.MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
+ this->Const.MaxTextureImageUnits = ctx->Const.FragmentProgram.MaxTextureImageUnits;
this->Const.MaxFragmentUniformComponents = ctx->Const.FragmentProgram.MaxUniformComponents;
this->Const.MinProgramTexelOffset = ctx->Const.MinProgramTexelOffset;
this->Const.MaxProgramTexelOffset = ctx->Const.MaxProgramTexelOffset;
@@ -468,6 +468,8 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
EXT(ARB_shading_language_packing, true, false, true, true, false, ARB_shading_language_packing),
EXT(ARB_texture_multisample, true, false, true, true, false, ARB_texture_multisample),
EXT(ARB_texture_query_lod, false, false, true, true, false, ARB_texture_query_lod),
+ EXT(ARB_gpu_shader5, true, true, true, true, false, ARB_gpu_shader5),
+ EXT(AMD_vertex_shader_layer, true, false, false, true, false, AMD_vertex_shader_layer),
};
#undef EXT
@@ -1202,11 +1204,13 @@ ast_struct_specifier::ast_struct_specifier(const char *identifier,
* \param max_unroll_iterations Maximum number of loop iterations to be
* unrolled. Setting to 0 disables loop
* unrolling.
+ * \param options The driver's preferred shader options.
*/
bool
do_common_optimization(exec_list *ir, bool linked,
bool uniform_locations_assigned,
- unsigned max_unroll_iterations)
+ unsigned max_unroll_iterations,
+ const struct gl_shader_compiler_options *options)
{
GLboolean progress = GL_FALSE;
@@ -1221,6 +1225,10 @@ do_common_optimization(exec_list *ir, bool linked,
progress = opt_flatten_nested_if_blocks(ir) || progress;
progress = do_copy_propagation(ir) || progress;
progress = do_copy_propagation_elements(ir) || progress;
+
+ if (options->PreferDP4 && !linked)
+ progress = opt_flip_matrices(ir) || progress;
+
if (linked)
progress = do_dead_code(ir, uniform_locations_assigned) || progress;
else
@@ -1236,6 +1244,7 @@ do_common_optimization(exec_list *ir, bool linked,
progress = do_algebraic(ir) || progress;
progress = do_lower_jumps(ir) || progress;
progress = do_vec_index_to_swizzle(ir) || progress;
+ progress = lower_vector_insert(ir, false) || progress;
progress = do_swizzle_swizzle(ir) || progress;
progress = do_noop_swizzle(ir) || progress;
diff --git a/mesalib/src/glsl/glsl_parser_extras.h b/mesalib/src/glsl/glsl_parser_extras.h
index 95891b595..16e180d3e 100644
--- a/mesalib/src/glsl/glsl_parser_extras.h
+++ b/mesalib/src/glsl/glsl_parser_extras.h
@@ -284,6 +284,10 @@ struct _mesa_glsl_parse_state {
bool ARB_texture_multisample_warn;
bool ARB_texture_query_lod_enable;
bool ARB_texture_query_lod_warn;
+ bool ARB_gpu_shader5_enable;
+ bool ARB_gpu_shader5_warn;
+ bool AMD_vertex_shader_layer_enable;
+ bool AMD_vertex_shader_layer_warn;
/*@}*/
/** Extensions supported by the OpenGL implementation. */
diff --git a/mesalib/src/glsl/glsl_symbol_table.cpp b/mesalib/src/glsl/glsl_symbol_table.cpp
index 8d34547c6..50bf11302 100644
--- a/mesalib/src/glsl/glsl_symbol_table.cpp
+++ b/mesalib/src/glsl/glsl_symbol_table.cpp
@@ -41,13 +41,67 @@ public:
ralloc_free(entry);
}
- symbol_table_entry(ir_variable *v) : v(v), f(0), t(0) {}
- symbol_table_entry(ir_function *f) : v(0), f(f), t(0) {}
- symbol_table_entry(const glsl_type *t) : v(0), f(0), t(t) {}
+ bool add_interface(const glsl_type *i, enum ir_variable_mode mode)
+ {
+ const glsl_type **dest;
+
+ switch (mode) {
+ case ir_var_uniform:
+ dest = &ibu;
+ break;
+ case ir_var_shader_in:
+ dest = &ibi;
+ break;
+ case ir_var_shader_out:
+ dest = &ibo;
+ break;
+ default:
+ assert(!"Unsupported interface variable mode!");
+ return false;
+ }
+
+ if (*dest != NULL) {
+ return false;
+ } else {
+ *dest = i;
+ return true;
+ }
+ }
+
+ const glsl_type *get_interface(enum ir_variable_mode mode)
+ {
+ switch (mode) {
+ case ir_var_uniform:
+ return ibu;
+ case ir_var_shader_in:
+ return ibi;
+ case ir_var_shader_out:
+ return ibo;
+ default:
+ assert(!"Unsupported interface variable mode!");
+ return NULL;
+ }
+ }
+
+ symbol_table_entry(ir_variable *v) :
+ v(v), f(0), t(0), ibu(0), ibi(0), ibo(0) {}
+ symbol_table_entry(ir_function *f) :
+ v(0), f(f), t(0), ibu(0), ibi(0), ibo(0) {}
+ symbol_table_entry(const glsl_type *t) :
+ v(0), f(0), t(t), ibu(0), ibi(0), ibo(0) {}
+ symbol_table_entry(const glsl_type *t, enum ir_variable_mode mode) :
+ v(0), f(0), t(0), ibu(0), ibi(0), ibo(0)
+ {
+ assert(t->is_interface());
+ add_interface(t, mode);
+ }
ir_variable *v;
ir_function *f;
const glsl_type *t;
+ const glsl_type *ibu;
+ const glsl_type *ibi;
+ const glsl_type *ibo;
};
glsl_symbol_table::glsl_symbol_table()
@@ -118,6 +172,23 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
}
+bool glsl_symbol_table::add_interface(const char *name, const glsl_type *i,
+ enum ir_variable_mode mode)
+{
+ assert(i->is_interface());
+ symbol_table_entry *entry = get_entry(name);
+ if (entry == NULL) {
+ symbol_table_entry *entry =
+ new(mem_ctx) symbol_table_entry(i, mode);
+ bool add_interface_symbol_result =
+ _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
+ assert(add_interface_symbol_result);
+ return add_interface_symbol_result;
+ } else {
+ return entry->add_interface(i, mode);
+ }
+}
+
bool glsl_symbol_table::add_function(ir_function *f)
{
if (this->separate_function_namespace && name_declared_this_scope(f->name)) {
@@ -152,6 +223,13 @@ const glsl_type *glsl_symbol_table::get_type(const char *name)
return entry != NULL ? entry->t : NULL;
}
+const glsl_type *glsl_symbol_table::get_interface(const char *name,
+ enum ir_variable_mode mode)
+{
+ symbol_table_entry *entry = get_entry(name);
+ return entry != NULL ? entry->get_interface(mode) : NULL;
+}
+
ir_function *glsl_symbol_table::get_function(const char *name)
{
symbol_table_entry *entry = get_entry(name);
diff --git a/mesalib/src/glsl/glsl_symbol_table.h b/mesalib/src/glsl/glsl_symbol_table.h
index 9f5602787..2753bdf31 100644
--- a/mesalib/src/glsl/glsl_symbol_table.h
+++ b/mesalib/src/glsl/glsl_symbol_table.h
@@ -99,6 +99,8 @@ public:
bool add_variable(ir_variable *v);
bool add_type(const char *name, const glsl_type *t);
bool add_function(ir_function *f);
+ bool add_interface(const char *name, const glsl_type *i,
+ enum ir_variable_mode mode);
/*@}*/
/**
@@ -113,6 +115,8 @@ public:
ir_variable *get_variable(const char *name);
const glsl_type *get_type(const char *name);
ir_function *get_function(const char *name);
+ const glsl_type *get_interface(const char *name,
+ enum ir_variable_mode mode);
/*@}*/
private:
diff --git a/mesalib/src/glsl/glsl_types.cpp b/mesalib/src/glsl/glsl_types.cpp
index 419761a7d..df9c5d36f 100644
--- a/mesalib/src/glsl/glsl_types.cpp
+++ b/mesalib/src/glsl/glsl_types.cpp
@@ -57,6 +57,7 @@ glsl_type::glsl_type(GLenum gl_type,
length(0)
{
init_ralloc_type_ctx();
+ assert(name != NULL);
this->name = ralloc_strdup(this->mem_ctx, name);
/* Neither dimension is zero or both dimensions are zero.
*/
@@ -75,6 +76,7 @@ glsl_type::glsl_type(GLenum gl_type,
length(0)
{
init_ralloc_type_ctx();
+ assert(name != NULL);
this->name = ralloc_strdup(this->mem_ctx, name);
memset(& fields, 0, sizeof(fields));
}
@@ -91,6 +93,7 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
unsigned int i;
init_ralloc_type_ctx();
+ assert(name != NULL);
this->name = ralloc_strdup(this->mem_ctx, name);
this->fields.structure = ralloc_array(this->mem_ctx,
glsl_struct_field, length);
@@ -114,6 +117,7 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
unsigned int i;
init_ralloc_type_ctx();
+ assert(name != NULL);
this->name = ralloc_strdup(this->mem_ctx, name);
this->fields.structure = ralloc_array(this->mem_ctx,
glsl_struct_field, length);
diff --git a/mesalib/src/glsl/glsl_types.h b/mesalib/src/glsl/glsl_types.h
index 2f3b19f51..31e3dd253 100644
--- a/mesalib/src/glsl/glsl_types.h
+++ b/mesalib/src/glsl/glsl_types.h
@@ -132,8 +132,7 @@ struct glsl_type {
/**
* Name of the data type
*
- * This may be \c NULL for anonymous structures, for arrays, or for
- * function types.
+ * Will never be \c NULL.
*/
const char *name;
diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp
index 05b77da2c..dad58deeb 100644
--- a/mesalib/src/glsl/ir.cpp
+++ b/mesalib/src/glsl/ir.cpp
@@ -399,6 +399,10 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
this->type = op0->type;
break;
+ case ir_binop_vector_extract:
+ this->type = op0->type->get_scalar_type();
+ break;
+
default:
assert(!"not reached: missing automatic type setup for ir_expression");
this->type = glsl_type::float_type;
@@ -419,7 +423,7 @@ ir_expression::get_num_operands(ir_expression_operation op)
if (op <= ir_last_triop)
return 3;
- if (op == ir_quadop_vector)
+ if (op <= ir_last_quadop)
return 4;
assert(false);
@@ -477,6 +481,10 @@ static const char *const operator_strs[] = {
"unpackHalf2x16",
"unpackHalf2x16_split_x",
"unpackHalf2x16_split_y",
+ "bitfield_reverse",
+ "bit_count",
+ "find_msb",
+ "find_lsb",
"noise",
"+",
"-",
@@ -504,8 +512,14 @@ static const char *const operator_strs[] = {
"max",
"pow",
"packHalf2x16_split",
+ "bfm",
"ubo_load",
+ "vector_extract",
"lrp",
+ "bfi",
+ "bitfield_extract",
+ "vector_insert",
+ "bitfield_insert",
"vector",
};
diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h
index 0c3e39979..6d4150136 100644
--- a/mesalib/src/glsl/ir.h
+++ b/mesalib/src/glsl/ir.h
@@ -131,6 +131,7 @@ public:
virtual class ir_swizzle * as_swizzle() { return NULL; }
virtual class ir_constant * as_constant() { return NULL; }
virtual class ir_discard * as_discard() { return NULL; }
+ virtual class ir_jump * as_jump() { return NULL; }
/*@}*/
protected:
@@ -273,7 +274,8 @@ enum ir_variable_mode {
ir_var_function_inout,
ir_var_const_in, /**< "in" param that must be a constant expression */
ir_var_system_value, /**< Ex: front-face, instance-id, etc. */
- ir_var_temporary /**< Temporary variable generated during compilation. */
+ ir_var_temporary, /**< Temporary variable generated during compilation. */
+ ir_var_mode_count /**< Number of variable modes */
};
/**
@@ -1031,6 +1033,16 @@ enum ir_expression_operation {
ir_unop_unpack_half_2x16_split_y,
/*@}*/
+ /**
+ * \name Bit operations, part of ARB_gpu_shader5.
+ */
+ /*@{*/
+ ir_unop_bitfield_reverse,
+ ir_unop_bit_count,
+ ir_unop_find_msb,
+ ir_unop_find_lsb,
+ /*@}*/
+
ir_unop_noise,
/**
@@ -1107,6 +1119,15 @@ enum ir_expression_operation {
/*@}*/
/**
+ * \name First half of a lowered bitfieldInsert() operation.
+ *
+ * \see lower_instructions::bitfield_insert_to_bfm_bfi
+ */
+ /*@{*/
+ ir_binop_bfm,
+ /*@}*/
+
+ /**
* Load a value the size of a given GLSL type from a uniform block.
*
* operand0 is the ir_constant uniform block index in the linked shader.
@@ -1115,20 +1136,55 @@ enum ir_expression_operation {
ir_binop_ubo_load,
/**
+ * Extract a scalar from a vector
+ *
+ * operand0 is the vector
+ * operand1 is the index of the field to read from operand0
+ */
+ ir_binop_vector_extract,
+
+ /**
* A sentinel marking the last of the binary operations.
*/
- ir_last_binop = ir_binop_ubo_load,
+ ir_last_binop = ir_binop_vector_extract,
ir_triop_lrp,
/**
+ * \name Second half of a lowered bitfieldInsert() operation.
+ *
+ * \see lower_instructions::bitfield_insert_to_bfm_bfi
+ */
+ /*@{*/
+ ir_triop_bfi,
+ /*@}*/
+
+ ir_triop_bitfield_extract,
+
+ /**
+ * Generate a value with one field of a vector changed
+ *
+ * operand0 is the vector
+ * operand1 is the value to write into the vector result
+ * operand2 is the index in operand0 to be modified
+ */
+ ir_triop_vector_insert,
+
+ /**
* A sentinel marking the last of the ternary operations.
*/
- ir_last_triop = ir_triop_lrp,
+ ir_last_triop = ir_triop_vector_insert,
+
+ ir_quadop_bitfield_insert,
ir_quadop_vector,
/**
+ * A sentinel marking the last of the ternary operations.
+ */
+ ir_last_quadop = ir_quadop_vector,
+
+ /**
* A sentinel marking the last of all operations.
*/
ir_last_opcode = ir_quadop_vector
@@ -1297,6 +1353,12 @@ protected:
{
ir_type = ir_type_unset;
}
+
+public:
+ virtual ir_jump *as_jump()
+ {
+ return this;
+ }
};
class ir_return : public ir_jump {
diff --git a/mesalib/src/glsl/ir_basic_block.cpp b/mesalib/src/glsl/ir_basic_block.cpp
index 86e0cf795..2cbc682d4 100644
--- a/mesalib/src/glsl/ir_basic_block.cpp
+++ b/mesalib/src/glsl/ir_basic_block.cpp
@@ -77,7 +77,7 @@ void call_for_basic_blocks(exec_list *instructions,
callback(leader, ir, data);
leader = NULL;
call_for_basic_blocks(&ir_loop->body_instructions, callback, data);
- } else if (ir->as_return() || ir->as_call()) {
+ } else if (ir->as_jump() || ir->as_call()) {
callback(leader, ir, data);
leader = NULL;
} else if ((ir_function = ir->as_function())) {
diff --git a/mesalib/src/glsl/ir_constant_expression.cpp b/mesalib/src/glsl/ir_constant_expression.cpp
index c09e56a3d..0a725b45b 100644
--- a/mesalib/src/glsl/ir_constant_expression.cpp
+++ b/mesalib/src/glsl/ir_constant_expression.cpp
@@ -391,9 +391,17 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
}
if (op[1] != NULL)
- assert(op[0]->type->base_type == op[1]->type->base_type ||
- this->operation == ir_binop_lshift ||
- this->operation == ir_binop_rshift);
+ switch (this->operation) {
+ case ir_binop_lshift:
+ case ir_binop_rshift:
+ case ir_binop_vector_extract:
+ case ir_triop_bitfield_extract:
+ break;
+
+ default:
+ assert(op[0]->type->base_type == op[1]->type->base_type);
+ break;
+ }
bool op0_scalar = op[0]->type->is_scalar();
bool op1_scalar = op[1] != NULL && op[1]->type->is_scalar();
@@ -1230,6 +1238,29 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
}
break;
+ case ir_binop_vector_extract: {
+ const int c = CLAMP(op[1]->value.i[0], 0,
+ (int) op[0]->type->vector_elements - 1);
+
+ switch (op[0]->type->base_type) {
+ case GLSL_TYPE_UINT:
+ data.u[0] = op[0]->value.u[c];
+ break;
+ case GLSL_TYPE_INT:
+ data.i[0] = op[0]->value.i[c];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.f[0] = op[0]->value.f[c];
+ break;
+ case GLSL_TYPE_BOOL:
+ data.b[0] = op[0]->value.b[c];
+ break;
+ default:
+ assert(0);
+ }
+ break;
+ }
+
case ir_binop_bit_xor:
for (unsigned c = 0, c0 = 0, c1 = 0;
c < components;
@@ -1248,6 +1279,102 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
}
break;
+ case ir_unop_bitfield_reverse:
+ /* http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious */
+ for (unsigned c = 0; c < components; c++) {
+ unsigned int v = op[0]->value.u[c]; // input bits to be reversed
+ unsigned int r = v; // r will be reversed bits of v; first get LSB of v
+ int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
+
+ for (v >>= 1; v; v >>= 1) {
+ r <<= 1;
+ r |= v & 1;
+ s--;
+ }
+ r <<= s; // shift when v's highest bits are zero
+
+ data.u[c] = r;
+ }
+ break;
+
+ case ir_unop_bit_count:
+ for (unsigned c = 0; c < components; c++) {
+ unsigned count = 0;
+ unsigned v = op[0]->value.u[c];
+
+ for (; v; count++) {
+ v &= v - 1;
+ }
+ data.u[c] = count;
+ }
+ break;
+
+ case ir_unop_find_msb:
+ for (unsigned c = 0; c < components; c++) {
+ int v = op[0]->value.i[c];
+
+ if (v == 0 || (op[0]->type->base_type == GLSL_TYPE_INT && v == -1))
+ data.i[c] = -1;
+ else {
+ int count = 0;
+ int top_bit = op[0]->type->base_type == GLSL_TYPE_UINT
+ ? 0 : v & (1 << 31);
+
+ while (((v & (1 << 31)) == top_bit) && count != 32) {
+ count++;
+ v <<= 1;
+ }
+
+ data.i[c] = 31 - count;
+ }
+ }
+ break;
+
+ case ir_unop_find_lsb:
+ for (unsigned c = 0; c < components; c++) {
+ if (op[0]->value.i[c] == 0)
+ data.i[c] = -1;
+ else {
+ unsigned pos = 0;
+ unsigned v = op[0]->value.u[c];
+
+ for (; !(v & 1); v >>= 1) {
+ pos++;
+ }
+ data.u[c] = pos;
+ }
+ }
+ break;
+
+ case ir_triop_bitfield_extract: {
+ int offset = op[1]->value.i[0];
+ int bits = op[2]->value.i[0];
+
+ for (unsigned c = 0; c < components; c++) {
+ if (bits == 0)
+ data.u[c] = 0;
+ else if (offset < 0 || bits < 0)
+ data.u[c] = 0; /* Undefined, per spec. */
+ else if (offset + bits > 32)
+ data.u[c] = 0; /* Undefined, per spec. */
+ else {
+ if (op[0]->type->base_type == GLSL_TYPE_INT) {
+ /* int so that the right shift will sign-extend. */
+ int value = op[0]->value.i[c];
+ value <<= 32 - bits - offset;
+ value >>= 32 - bits;
+ data.i[c] = value;
+ } else {
+ unsigned value = op[0]->value.u[c];
+ value <<= 32 - bits - offset;
+ value >>= 32 - bits;
+ data.u[c] = value;
+ }
+ }
+ }
+ break;
+ }
+
case ir_triop_lrp: {
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
assert(op[1]->type->base_type == GLSL_TYPE_FLOAT);
@@ -1261,6 +1388,58 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
break;
}
+ case ir_triop_vector_insert: {
+ const unsigned idx = op[2]->value.u[0];
+
+ memcpy(&data, &op[0]->value, sizeof(data));
+
+ switch (this->type->base_type) {
+ case GLSL_TYPE_INT:
+ data.i[idx] = op[1]->value.i[0];
+ break;
+ case GLSL_TYPE_UINT:
+ data.u[idx] = op[1]->value.u[0];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.f[idx] = op[1]->value.f[0];
+ break;
+ case GLSL_TYPE_BOOL:
+ data.b[idx] = op[1]->value.b[0];
+ break;
+ default:
+ assert(!"Should not get here.");
+ break;
+ }
+ break;
+ }
+
+ case ir_quadop_bitfield_insert: {
+ int offset = op[2]->value.i[0];
+ int bits = op[3]->value.i[0];
+
+ for (unsigned c = 0; c < components; c++) {
+ if (bits == 0)
+ data.u[c] = op[0]->value.u[c];
+ else if (offset < 0 || bits < 0)
+ data.u[c] = 0; /* Undefined, per spec. */
+ else if (offset + bits > 32)
+ data.u[c] = 0; /* Undefined, per spec. */
+ else {
+ unsigned insert_mask = ((1 << bits) - 1) << offset;
+
+ unsigned insert = op[1]->value.u[c];
+ insert <<= offset;
+ insert &= insert_mask;
+
+ unsigned base = op[0]->value.u[c];
+ base &= ~insert_mask;
+
+ data.u[c] = base | insert;
+ }
+ }
+ break;
+ }
+
case ir_quadop_vector:
for (unsigned c = 0; c < this->type->vector_elements; c++) {
switch (this->type->base_type) {
diff --git a/mesalib/src/glsl/ir_optimization.h b/mesalib/src/glsl/ir_optimization.h
index a8885d722..d38d5e303 100644
--- a/mesalib/src/glsl/ir_optimization.h
+++ b/mesalib/src/glsl/ir_optimization.h
@@ -37,6 +37,7 @@
#define MOD_TO_FRACT 0x20
#define INT_DIV_TO_MUL_RCP 0x40
#define LRP_TO_ARITH 0x80
+#define BITFIELD_INSERT_TO_BFM_BFI 0x100
/**
* \see class lower_packing_builtins_visitor
@@ -65,7 +66,8 @@ enum lower_packing_builtins_op {
bool do_common_optimization(exec_list *ir, bool linked,
bool uniform_locations_assigned,
- unsigned max_unroll_iterations);
+ unsigned max_unroll_iterations,
+ const struct gl_shader_compiler_options *options);
bool do_algebraic(exec_list *instructions);
bool do_constant_folding(exec_list *instructions);
@@ -78,6 +80,7 @@ bool do_dead_code(exec_list *instructions, bool uniform_locations_assigned);
bool do_dead_code_local(exec_list *instructions);
bool do_dead_code_unlinked(exec_list *instructions);
bool do_dead_functions(exec_list *instructions);
+bool opt_flip_matrices(exec_list *instructions);
bool do_function_inlining(exec_list *instructions);
bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false, bool lower_break = false);
bool do_lower_texture_projection(exec_list *instructions);
@@ -106,6 +109,8 @@ void lower_ubo_reference(struct gl_shader *shader, exec_list *instructions);
void lower_packed_varyings(void *mem_ctx, unsigned location_base,
unsigned locations_used, ir_variable_mode mode,
gl_shader *shader);
+bool lower_vector_insert(exec_list *instructions, bool lower_nonconstant_index);
+void lower_named_interface_blocks(void *mem_ctx, gl_shader *shader);
bool optimize_redundant_jumps(exec_list *instructions);
bool optimize_split_arrays(exec_list *instructions, bool linked);
diff --git a/mesalib/src/glsl/ir_print_visitor.cpp b/mesalib/src/glsl/ir_print_visitor.cpp
index 597d2813f..f01019c98 100644
--- a/mesalib/src/glsl/ir_print_visitor.cpp
+++ b/mesalib/src/glsl/ir_print_visitor.cpp
@@ -24,6 +24,7 @@
#include "ir_print_visitor.h"
#include "glsl_types.h"
#include "glsl_parser_extras.h"
+#include "main/macros.h"
#include "program/hash_table.h"
static void print_type(const glsl_type *t);
@@ -149,7 +150,9 @@ void ir_print_visitor::visit(ir_variable *ir)
const char *const mode[] = { "", "uniform ", "shader_in ", "shader_out ",
"in ", "out ", "inout ",
"const_in ", "sys ", "temporary " };
- const char *const interp[] = { "", "flat", "noperspective" };
+ STATIC_ASSERT(ARRAY_SIZE(mode) == ir_var_mode_count);
+ const char *const interp[] = { "", "smooth", "flat", "noperspective" };
+ STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_QUALIFIER_COUNT);
printf("(%s%s%s%s) ",
cent, inv, mode[ir->mode], interp[ir->interpolation]);
diff --git a/mesalib/src/glsl/ir_reader.cpp b/mesalib/src/glsl/ir_reader.cpp
index 16fdc41b4..b3667124f 100644
--- a/mesalib/src/glsl/ir_reader.cpp
+++ b/mesalib/src/glsl/ir_reader.cpp
@@ -676,16 +676,18 @@ ir_reader::read_expression(s_expression *expr)
{
s_expression *s_type;
s_symbol *s_op;
- s_expression *s_arg[3];
+ s_expression *s_arg[4] = {NULL};
s_pattern pat[] = { "expression", s_type, s_op, s_arg[0] };
if (!PARTIAL_MATCH(expr, pat)) {
ir_read_error(expr, "expected (expression <type> <operator> "
- "<operand> [<operand>])");
+ "<operand> [<operand>] [<operand>] [<operand>])");
return NULL;
}
s_arg[1] = (s_expression *) s_arg[0]->next; // may be tail sentinel
s_arg[2] = (s_expression *) s_arg[1]->next; // may be tail sentinel or NULL
+ if (s_arg[2])
+ s_arg[3] = (s_expression *) s_arg[2]->next; // may be tail sentinel or NULL
const glsl_type *type = read_type(s_type);
if (type == NULL)
@@ -709,7 +711,7 @@ ir_reader::read_expression(s_expression *expr)
return NULL;
}
- ir_rvalue *arg[3] = {NULL, NULL, NULL};
+ ir_rvalue *arg[4] = {NULL};
for (int i = 0; i < num_operands; i++) {
arg[i] = read_rvalue(s_arg[i]);
if (arg[i] == NULL) {
@@ -718,7 +720,7 @@ ir_reader::read_expression(s_expression *expr)
}
}
- return new(mem_ctx) ir_expression(op, type, arg[0], arg[1], arg[2]);
+ return new(mem_ctx) ir_expression(op, type, arg[0], arg[1], arg[2], arg[3]);
}
ir_swizzle *
diff --git a/mesalib/src/glsl/ir_uniform.h b/mesalib/src/glsl/ir_uniform.h
index 30e6f260d..8198c4819 100644
--- a/mesalib/src/glsl/ir_uniform.h
+++ b/mesalib/src/glsl/ir_uniform.h
@@ -99,15 +99,24 @@ struct gl_uniform_storage {
*/
bool initialized;
- /**
- * Base sampler index
- *
- * If \c ::base_type is \c GLSL_TYPE_SAMPLER, this represents the index of
- * this sampler. If \c ::array_elements is not zero, the array will use
- * sampler indexes \c ::sampler through \c ::sampler + \c ::array_elements
- * - 1, inclusive.
- */
- uint8_t sampler;
+ struct {
+ /**
+ * Base sampler index
+ *
+ * If \c ::base_type is \c GLSL_TYPE_SAMPLER, this represents the index
+ * of this sampler. If \c ::array_elements is not zero, the array will
+ * use sampler indices \c ::sampler through \c ::sampler +
+ * \c ::array_elements - 1, inclusive.
+ *
+ * Note that the index may be different in each shader stage.
+ */
+ uint8_t index;
+
+ /**
+ * Whether this sampler is used in this shader stage.
+ */
+ bool active;
+ } sampler[MESA_SHADER_TYPES];
/**
* Storage used by the driver for the uniform
diff --git a/mesalib/src/glsl/ir_validate.cpp b/mesalib/src/glsl/ir_validate.cpp
index 699c192cd..ce96f6855 100644
--- a/mesalib/src/glsl/ir_validate.cpp
+++ b/mesalib/src/glsl/ir_validate.cpp
@@ -69,6 +69,8 @@ public:
virtual ir_visitor_status visit_leave(ir_expression *ir);
virtual ir_visitor_status visit_leave(ir_swizzle *ir);
+ virtual ir_visitor_status visit_enter(class ir_dereference_array *);
+
virtual ir_visitor_status visit_enter(ir_assignment *ir);
virtual ir_visitor_status visit_enter(ir_call *ir);
@@ -102,6 +104,33 @@ ir_validate::visit(ir_dereference_variable *ir)
}
ir_visitor_status
+ir_validate::visit_enter(class ir_dereference_array *ir)
+{
+ if (!ir->array->type->is_array() && !ir->array->type->is_matrix()) {
+ printf("ir_dereference_array @ %p does not specify an array or a "
+ "matrix\n",
+ (void *) ir);
+ ir->print();
+ printf("\n");
+ abort();
+ }
+
+ if (!ir->array_index->type->is_scalar()) {
+ printf("ir_dereference_array @ %p does not have scalar index: %s\n",
+ (void *) ir, ir->array_index->type->name);
+ abort();
+ }
+
+ if (!ir->array_index->type->is_integer()) {
+ printf("ir_dereference_array @ %p does not have integer index: %s\n",
+ (void *) ir, ir->array_index->type->name);
+ abort();
+ }
+
+ return visit_continue;
+}
+
+ir_visitor_status
ir_validate::visit_enter(ir_if *ir)
{
if (ir->condition->type != glsl_type::bool_type) {
@@ -361,6 +390,19 @@ ir_validate::visit_leave(ir_expression *ir)
assert(ir->operands[0]->type == glsl_type::uint_type);
break;
+ case ir_unop_bitfield_reverse:
+ assert(ir->operands[0]->type == ir->type);
+ assert(ir->type->is_integer());
+ break;
+
+ case ir_unop_bit_count:
+ case ir_unop_find_msb:
+ case ir_unop_find_lsb:
+ assert(ir->operands[0]->type->vector_elements == ir->type->vector_elements);
+ assert(ir->operands[0]->type->is_integer());
+ assert(ir->type->base_type == GLSL_TYPE_INT);
+ break;
+
case ir_unop_noise:
/* XXX what can we assert here? */
break;
@@ -461,6 +503,12 @@ ir_validate::visit_leave(ir_expression *ir)
assert(ir->operands[1]->type == glsl_type::float_type);
break;
+ case ir_binop_bfm:
+ assert(ir->type->is_integer());
+ assert(ir->operands[0]->type->is_integer());
+ assert(ir->operands[1]->type->is_integer());
+ break;
+
case ir_binop_ubo_load:
assert(ir->operands[0]->as_constant());
assert(ir->operands[0]->type == glsl_type::uint_type);
@@ -468,12 +516,46 @@ ir_validate::visit_leave(ir_expression *ir)
assert(ir->operands[1]->type == glsl_type::uint_type);
break;
+ case ir_binop_vector_extract:
+ assert(ir->operands[0]->type->is_vector());
+ assert(ir->operands[1]->type->is_scalar()
+ && ir->operands[1]->type->is_integer());
+ break;
+
case ir_triop_lrp:
assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
assert(ir->operands[0]->type == ir->operands[1]->type);
assert(ir->operands[2]->type == ir->operands[0]->type || ir->operands[2]->type == glsl_type::float_type);
break;
+ case ir_triop_bfi:
+ assert(ir->operands[0]->type->is_integer());
+ assert(ir->operands[1]->type == ir->operands[2]->type);
+ assert(ir->operands[1]->type == ir->type);
+ break;
+
+ case ir_triop_bitfield_extract:
+ assert(ir->operands[0]->type == ir->type);
+ assert(ir->operands[1]->type == glsl_type::int_type);
+ assert(ir->operands[2]->type == glsl_type::int_type);
+ break;
+
+ case ir_triop_vector_insert:
+ assert(ir->operands[0]->type->is_vector());
+ assert(ir->operands[1]->type->is_scalar());
+ assert(ir->operands[0]->type->base_type == ir->operands[1]->type->base_type);
+ assert(ir->operands[2]->type->is_scalar()
+ && ir->operands[2]->type->is_integer());
+ assert(ir->type == ir->operands[0]->type);
+ break;
+
+ case ir_quadop_bitfield_insert:
+ assert(ir->operands[0]->type == ir->type);
+ assert(ir->operands[1]->type == ir->type);
+ assert(ir->operands[2]->type == glsl_type::int_type);
+ assert(ir->operands[3]->type == glsl_type::int_type);
+ break;
+
case ir_quadop_vector:
/* The vector operator collects some number of scalars and generates a
* vector from them.
diff --git a/mesalib/src/glsl/link_interface_blocks.cpp b/mesalib/src/glsl/link_interface_blocks.cpp
new file mode 100644
index 000000000..b91860d03
--- /dev/null
+++ b/mesalib/src/glsl/link_interface_blocks.cpp
@@ -0,0 +1,110 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * 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.
+ */
+
+/**
+ * \file link_interface_blocks.cpp
+ * Linker support for GLSL's interface blocks.
+ */
+
+#include "ir.h"
+#include "glsl_symbol_table.h"
+#include "linker.h"
+#include "main/macros.h"
+
+bool
+validate_intrastage_interface_blocks(const gl_shader **shader_list,
+ unsigned num_shaders)
+{
+ glsl_symbol_table interfaces;
+
+ for (unsigned int i = 0; i < num_shaders; i++) {
+ if (shader_list[i] == NULL)
+ continue;
+
+ foreach_list(node, shader_list[i]->ir) {
+ ir_variable *var = ((ir_instruction *) node)->as_variable();
+ if (!var)
+ continue;
+
+ const glsl_type *iface_type = var->interface_type;
+
+ if (iface_type == NULL)
+ continue;
+
+ const glsl_type *old_iface_type =
+ interfaces.get_interface(iface_type->name,
+ (enum ir_variable_mode) var->mode);
+
+ if (old_iface_type == NULL) {
+ /* This is the first time we've seen the interface, so save
+ * it into our symbol table.
+ */
+ interfaces.add_interface(iface_type->name, iface_type,
+ (enum ir_variable_mode) var->mode);
+ } else if (old_iface_type != iface_type) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+bool
+validate_interstage_interface_blocks(const gl_shader *producer,
+ const gl_shader *consumer)
+{
+ glsl_symbol_table interfaces;
+
+ /* Add non-output interfaces from the consumer to the symbol table. */
+ foreach_list(node, consumer->ir) {
+ ir_variable *var = ((ir_instruction *) node)->as_variable();
+ if (!var || !var->interface_type || var->mode == ir_var_shader_out)
+ continue;
+
+ interfaces.add_interface(var->interface_type->name,
+ var->interface_type,
+ (enum ir_variable_mode) var->mode);
+ }
+
+ /* Verify that the producer's interfaces match. */
+ foreach_list(node, producer->ir) {
+ ir_variable *var = ((ir_instruction *) node)->as_variable();
+ if (!var || !var->interface_type || var->mode == ir_var_shader_in)
+ continue;
+
+ enum ir_variable_mode consumer_mode =
+ var->mode == ir_var_uniform ? ir_var_uniform : ir_var_shader_in;
+ const glsl_type *expected_type =
+ interfaces.get_interface(var->interface_type->name, consumer_mode);
+
+ /* The consumer doesn't use this output block. Ignore it. */
+ if (expected_type == NULL)
+ continue;
+
+ if (var->interface_type != expected_type)
+ return false;
+ }
+
+ return true;
+}
diff --git a/mesalib/src/glsl/link_uniform_initializers.cpp b/mesalib/src/glsl/link_uniform_initializers.cpp
index 836a360fa..54d9bf1f5 100644
--- a/mesalib/src/glsl/link_uniform_initializers.cpp
+++ b/mesalib/src/glsl/link_uniform_initializers.cpp
@@ -138,8 +138,16 @@ set_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
}
if (base_type == GLSL_TYPE_SAMPLER) {
- for (unsigned int i = 0; i < storage->array_elements; i++) {
- prog->SamplerUnits[storage->sampler + i] = storage->storage[i].i;
+ for (int sh = 0; sh < MESA_SHADER_TYPES; sh++) {
+ gl_shader *shader = prog->_LinkedShaders[sh];
+
+ if (shader && storage->sampler[sh].active) {
+ for (unsigned i = 0; i < storage->array_elements; i++) {
+ unsigned index = storage->sampler[sh].index + i;
+
+ shader->SamplerUnits[index] = storage->storage[i].i;
+ }
+ }
}
}
} else {
@@ -148,8 +156,17 @@ set_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
val->type->base_type,
val->type->components());
- if (storage->type->is_sampler())
- prog->SamplerUnits[storage->sampler] = storage->storage[0].i;
+ if (storage->type->is_sampler()) {
+ for (int sh = 0; sh < MESA_SHADER_TYPES; sh++) {
+ gl_shader *shader = prog->_LinkedShaders[sh];
+
+ if (shader && storage->sampler[sh].active) {
+ unsigned index = storage->sampler[sh].index;
+
+ shader->SamplerUnits[index] = storage->storage[0].i;
+ }
+ }
+ }
}
storage->initialized = true;
diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp
index d457e4d0c..ad636681f 100644
--- a/mesalib/src/glsl/link_uniforms.cpp
+++ b/mesalib/src/glsl/link_uniforms.cpp
@@ -263,15 +263,19 @@ public:
parcel_out_uniform_storage(struct string_to_uint_map *map,
struct gl_uniform_storage *uniforms,
union gl_constant_value *values)
- : map(map), uniforms(uniforms), next_sampler(0), values(values)
+ : map(map), uniforms(uniforms), values(values)
{
- memset(this->targets, 0, sizeof(this->targets));
}
- void start_shader()
+ void start_shader(gl_shader_type shader_type)
{
+ assert(shader_type < MESA_SHADER_TYPES);
+ this->shader_type = shader_type;
+
this->shader_samplers_used = 0;
this->shader_shadow_samplers = 0;
+ this->next_sampler = 0;
+ memset(this->targets, 0, sizeof(this->targets));
}
void set_and_process(struct gl_shader_program *prog,
@@ -335,8 +339,37 @@ public:
int ubo_block_index;
int ubo_byte_offset;
bool ubo_row_major;
+ gl_shader_type shader_type;
private:
+ void handle_samplers(const glsl_type *base_type,
+ struct gl_uniform_storage *uniform)
+ {
+ if (base_type->is_sampler()) {
+ uniform->sampler[shader_type].index = this->next_sampler;
+ uniform->sampler[shader_type].active = true;
+
+ /* Increment the sampler by 1 for non-arrays and by the number of
+ * array elements for arrays.
+ */
+ this->next_sampler +=
+ MAX2(1, uniform->array_elements);
+
+ const gl_texture_index target = base_type->sampler_index();
+ const unsigned shadow = base_type->sampler_shadow;
+ for (unsigned i = uniform->sampler[shader_type].index;
+ i < MIN2(this->next_sampler, MAX_SAMPLERS);
+ i++) {
+ this->targets[i] = target;
+ this->shader_samplers_used |= 1U << i;
+ this->shader_shadow_samplers |= shadow << i;
+ }
+ } else {
+ uniform->sampler[shader_type].index = ~0;
+ uniform->sampler[shader_type].active = false;
+ }
+ }
+
virtual void visit_field(const glsl_type *type, const char *name,
bool row_major)
{
@@ -354,31 +387,6 @@ private:
if (!found)
return;
- /* If there is already storage associated with this uniform, it means
- * that it was set while processing an earlier shader stage. For
- * example, we may be processing the uniform in the fragment shader, but
- * the uniform was already processed in the vertex shader.
- */
- if (this->uniforms[id].storage != NULL) {
- /* If the uniform already has storage set from another shader stage,
- * mark the samplers used for this shader stage.
- */
- if (type->contains_sampler()) {
- const unsigned count = MAX2(1, this->uniforms[id].array_elements);
- const unsigned shadow = (type->is_array())
- ? type->fields.array->sampler_shadow : type->sampler_shadow;
-
- for (unsigned i = 0; i < count; i++) {
- const unsigned s = this->uniforms[id].sampler + i;
-
- this->shader_samplers_used |= 1U << s;
- this->shader_shadow_samplers |= shadow << s;
- }
- }
-
- return;
- }
-
const glsl_type *base_type;
if (type->is_array()) {
this->uniforms[id].array_elements = type->length;
@@ -388,26 +396,16 @@ private:
base_type = type;
}
- if (base_type->is_sampler()) {
- this->uniforms[id].sampler = this->next_sampler;
+ /* This assigns sampler uniforms to sampler units. */
+ handle_samplers(base_type, &this->uniforms[id]);
- /* Increment the sampler by 1 for non-arrays and by the number of
- * array elements for arrays.
- */
- this->next_sampler += MAX2(1, this->uniforms[id].array_elements);
-
- const gl_texture_index target = base_type->sampler_index();
- const unsigned shadow = base_type->sampler_shadow;
- for (unsigned i = this->uniforms[id].sampler
- ; i < MIN2(this->next_sampler, MAX_SAMPLERS)
- ; i++) {
- this->targets[i] = target;
- this->shader_samplers_used |= 1U << i;
- this->shader_shadow_samplers |= shadow << i;
- }
-
- } else {
- this->uniforms[id].sampler = ~0;
+ /* If there is already storage associated with this uniform, it means
+ * that it was set while processing an earlier shader stage. For
+ * example, we may be processing the uniform in the fragment shader, but
+ * the uniform was already processed in the vertex shader.
+ */
+ if (this->uniforms[id].storage != NULL) {
+ return;
}
this->uniforms[id].name = ralloc_strdup(this->uniforms, name);
@@ -633,17 +631,6 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
prog->UniformHash = new string_to_uint_map;
}
- /* Uniforms that lack an initializer in the shader code have an initial
- * value of zero. This includes sampler uniforms.
- *
- * Page 24 (page 30 of the PDF) of the GLSL 1.20 spec says:
- *
- * "The link time initial value is either the value of the variable's
- * initializer, if present, or 0 if no initializer is present. Sampler
- * types cannot have initializers."
- */
- memset(prog->SamplerUnits, 0, sizeof(prog->SamplerUnits));
-
/* First pass: Count the uniform resources used by the user-defined
* uniforms. While this happens, each active uniform will have an index
* assigned to it.
@@ -656,6 +643,18 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
if (prog->_LinkedShaders[i] == NULL)
continue;
+ /* Uniforms that lack an initializer in the shader code have an initial
+ * value of zero. This includes sampler uniforms.
+ *
+ * Page 24 (page 30 of the PDF) of the GLSL 1.20 spec says:
+ *
+ * "The link time initial value is either the value of the variable's
+ * initializer, if present, or 0 if no initializer is present. Sampler
+ * types cannot have initializers."
+ */
+ memset(prog->_LinkedShaders[i]->SamplerUnits, 0,
+ sizeof(prog->_LinkedShaders[i]->SamplerUnits));
+
link_update_uniform_buffer_variables(prog->_LinkedShaders[i]);
/* Reset various per-shader target counts.
@@ -706,9 +705,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
if (prog->_LinkedShaders[i] == NULL)
continue;
- /* Reset various per-shader target counts.
- */
- parcel.start_shader();
+ parcel.start_shader((gl_shader_type)i);
foreach_list(node, prog->_LinkedShaders[i]->ir) {
ir_variable *const var = ((ir_instruction *) node)->as_variable();
@@ -726,10 +723,11 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
prog->_LinkedShaders[i]->active_samplers = parcel.shader_samplers_used;
prog->_LinkedShaders[i]->shadow_samplers = parcel.shader_shadow_samplers;
- }
- assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets));
- memcpy(prog->SamplerTargets, parcel.targets, sizeof(prog->SamplerTargets));
+ STATIC_ASSERT(sizeof(prog->_LinkedShaders[i]->SamplerTargets) == sizeof(parcel.targets));
+ memcpy(prog->_LinkedShaders[i]->SamplerTargets, parcel.targets,
+ sizeof(prog->_LinkedShaders[i]->SamplerTargets));
+ }
#ifndef NDEBUG
for (unsigned i = 0; i < num_user_uniforms; i++) {
diff --git a/mesalib/src/glsl/link_varyings.cpp b/mesalib/src/glsl/link_varyings.cpp
index 04c9fdd7c..34e3440d6 100644
--- a/mesalib/src/glsl/link_varyings.cpp
+++ b/mesalib/src/glsl/link_varyings.cpp
@@ -541,7 +541,7 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog,
class varying_matches
{
public:
- varying_matches(bool disable_varying_packing);
+ varying_matches(bool disable_varying_packing, bool consumer_is_fs);
~varying_matches();
void record(ir_variable *producer_var, ir_variable *consumer_var);
unsigned assign_locations();
@@ -621,11 +621,15 @@ private:
* it was allocated.
*/
unsigned matches_capacity;
+
+ const bool consumer_is_fs;
};
-varying_matches::varying_matches(bool disable_varying_packing)
- : disable_varying_packing(disable_varying_packing)
+varying_matches::varying_matches(bool disable_varying_packing,
+ bool consumer_is_fs)
+ : disable_varying_packing(disable_varying_packing),
+ consumer_is_fs(consumer_is_fs)
{
/* Note: this initial capacity is rather arbitrarily chosen to be large
* enough for many cases without wasting an unreasonable amount of space.
@@ -656,6 +660,10 @@ varying_matches::~varying_matches()
* If \c producer_var has already been paired up with a consumer_var, or
* producer_var is part of fixed pipeline functionality (and hence already has
* a location assigned), this function has no effect.
+ *
+ * Note: as a side effect this function may change the interpolation type of
+ * \c producer_var, but only when the change couldn't possibly affect
+ * rendering.
*/
void
varying_matches::record(ir_variable *producer_var, ir_variable *consumer_var)
@@ -668,6 +676,25 @@ varying_matches::record(ir_variable *producer_var, ir_variable *consumer_var)
return;
}
+ if ((consumer_var == NULL && producer_var->type->contains_integer()) ||
+ !consumer_is_fs) {
+ /* Since this varying is not being consumed by the fragment shader, its
+ * interpolation type varying cannot possibly affect rendering. Also,
+ * this variable is non-flat and is (or contains) an integer.
+ *
+ * lower_packed_varyings requires all integer varyings to flat,
+ * regardless of where they appear. We can trivially satisfy that
+ * requirement by changing the interpolation type to flat here.
+ */
+ producer_var->centroid = false;
+ producer_var->interpolation = INTERP_QUALIFIER_FLAT;
+
+ if (consumer_var) {
+ consumer_var->centroid = false;
+ consumer_var->interpolation = INTERP_QUALIFIER_FLAT;
+ }
+ }
+
if (this->num_matches == this->matches_capacity) {
this->matches_capacity *= 2;
this->matches = (match *)
@@ -960,11 +987,14 @@ assign_varying_locations(struct gl_context *ctx,
{
const unsigned producer_base = VARYING_SLOT_VAR0;
const unsigned consumer_base = VARYING_SLOT_VAR0;
- varying_matches matches(ctx->Const.DisableVaryingPacking);
+ varying_matches matches(ctx->Const.DisableVaryingPacking,
+ consumer && consumer->Type == GL_FRAGMENT_SHADER);
hash_table *tfeedback_candidates
= hash_table_ctor(0, hash_table_string_hash, hash_table_string_compare);
hash_table *consumer_inputs
= hash_table_ctor(0, hash_table_string_hash, hash_table_string_compare);
+ hash_table *consumer_interface_inputs
+ = hash_table_ctor(0, hash_table_string_hash, hash_table_string_compare);
/* Operate in a total of three passes.
*
@@ -983,8 +1013,17 @@ assign_varying_locations(struct gl_context *ctx,
((ir_instruction *) node)->as_variable();
if ((input_var != NULL) && (input_var->mode == ir_var_shader_in)) {
- hash_table_insert(consumer_inputs, input_var,
- ralloc_strdup(mem_ctx, input_var->name));
+ if (input_var->interface_type != NULL) {
+ char *const iface_field_name =
+ ralloc_asprintf(mem_ctx, "%s.%s",
+ input_var->interface_type->name,
+ input_var->name);
+ hash_table_insert(consumer_interface_inputs, input_var,
+ iface_field_name);
+ } else {
+ hash_table_insert(consumer_inputs, input_var,
+ ralloc_strdup(mem_ctx, input_var->name));
+ }
}
}
}
@@ -998,8 +1037,19 @@ assign_varying_locations(struct gl_context *ctx,
tfeedback_candidate_generator g(mem_ctx, tfeedback_candidates);
g.process(output_var);
- ir_variable *input_var =
- (ir_variable *) hash_table_find(consumer_inputs, output_var->name);
+ ir_variable *input_var;
+ if (output_var->interface_type != NULL) {
+ char *const iface_field_name =
+ ralloc_asprintf(mem_ctx, "%s.%s",
+ output_var->interface_type->name,
+ output_var->name);
+ input_var =
+ (ir_variable *) hash_table_find(consumer_interface_inputs,
+ iface_field_name);
+ } else {
+ input_var =
+ (ir_variable *) hash_table_find(consumer_inputs, output_var->name);
+ }
if (input_var && input_var->mode != ir_var_shader_in)
input_var = NULL;
@@ -1019,6 +1069,7 @@ assign_varying_locations(struct gl_context *ctx,
if (matched_candidate == NULL) {
hash_table_dtor(tfeedback_candidates);
hash_table_dtor(consumer_inputs);
+ hash_table_dtor(consumer_interface_inputs);
return false;
}
@@ -1036,12 +1087,14 @@ assign_varying_locations(struct gl_context *ctx,
if (!tfeedback_decls[i].assign_location(ctx, prog)) {
hash_table_dtor(tfeedback_candidates);
hash_table_dtor(consumer_inputs);
+ hash_table_dtor(consumer_interface_inputs);
return false;
}
}
hash_table_dtor(tfeedback_candidates);
hash_table_dtor(consumer_inputs);
+ hash_table_dtor(consumer_interface_inputs);
if (ctx->Const.DisableVaryingPacking) {
/* Transform feedback code assumes varyings are packed, so if the driver
diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp
index 2b30d2b65..982fe46bd 100644
--- a/mesalib/src/glsl/linker.cpp
+++ b/mesalib/src/glsl/linker.cpp
@@ -938,6 +938,12 @@ link_intrastage_shaders(void *mem_ctx,
if (!cross_validate_globals(prog, shader_list, num_shaders, false))
return NULL;
+ /* Check that interface blocks defined in multiple shaders are consistent.
+ */
+ if (!validate_intrastage_interface_blocks((const gl_shader **)shader_list,
+ num_shaders))
+ return NULL;
+
/* Check that uniform blocks between shaders for a stage agree. */
const int num_uniform_blocks =
link_uniform_blocks(mem_ctx, prog, shader_list, num_shaders,
@@ -1512,15 +1518,15 @@ check_resources(struct gl_context *ctx, struct gl_shader_program *prog)
};
const unsigned max_samplers[MESA_SHADER_TYPES] = {
- ctx->Const.MaxVertexTextureImageUnits,
- ctx->Const.MaxTextureImageUnits,
- ctx->Const.MaxGeometryTextureImageUnits
+ ctx->Const.VertexProgram.MaxTextureImageUnits,
+ ctx->Const.FragmentProgram.MaxTextureImageUnits,
+ ctx->Const.GeometryProgram.MaxTextureImageUnits
};
const unsigned max_uniform_components[MESA_SHADER_TYPES] = {
ctx->Const.VertexProgram.MaxUniformComponents,
ctx->Const.FragmentProgram.MaxUniformComponents,
- 0 /* FINISHME: Geometry shaders. */
+ ctx->Const.GeometryProgram.MaxUniformComponents
};
const unsigned max_uniform_blocks[MESA_SHADER_TYPES] = {
@@ -1722,6 +1728,12 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
if (prog->_LinkedShaders[i] == NULL)
continue;
+ if (!validate_interstage_interface_blocks(prog->_LinkedShaders[prev],
+ prog->_LinkedShaders[i])) {
+ linker_error(prog, "interface block mismatch between shader stages\n");
+ goto done;
+ }
+
if (!cross_validate_outputs_to_inputs(prog,
prog->_LinkedShaders[prev],
prog->_LinkedShaders[i]))
@@ -1733,6 +1745,12 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
prog->LinkStatus = true;
}
+
+ for (unsigned int i = 0; i < MESA_SHADER_TYPES; i++) {
+ if (prog->_LinkedShaders[i] != NULL)
+ lower_named_interface_blocks(mem_ctx, prog->_LinkedShaders[i]);
+ }
+
/* Implement the GLSL 1.30+ rule for discard vs infinite loops Do
* it before optimization because we want most of the checks to get
* dropped thanks to constant propagation.
@@ -1767,7 +1785,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
unsigned max_unroll = ctx->ShaderCompilerOptions[i].MaxUnrollIterations;
- while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, max_unroll))
+ while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, max_unroll, &ctx->ShaderCompilerOptions[i]))
;
}
diff --git a/mesalib/src/glsl/linker.h b/mesalib/src/glsl/linker.h
index f1ce50ace..2fe2410c2 100644
--- a/mesalib/src/glsl/linker.h
+++ b/mesalib/src/glsl/linker.h
@@ -60,6 +60,14 @@ link_uniform_blocks(void *mem_ctx,
unsigned num_shaders,
struct gl_uniform_block **blocks_ret);
+bool
+validate_intrastage_interface_blocks(const gl_shader **shader_list,
+ unsigned num_shaders);
+
+bool
+validate_interstage_interface_blocks(const gl_shader *producer,
+ const gl_shader *consumer);
+
/**
* Class for processing all of the leaf fields of a variable that corresponds
* to a program resource.
diff --git a/mesalib/src/glsl/lower_clip_distance.cpp b/mesalib/src/glsl/lower_clip_distance.cpp
index 643807de8..d6cf94438 100644
--- a/mesalib/src/glsl/lower_clip_distance.cpp
+++ b/mesalib/src/glsl/lower_clip_distance.cpp
@@ -46,10 +46,11 @@
*/
#include "glsl_symbol_table.h"
-#include "ir_hierarchical_visitor.h"
+#include "ir_rvalue_visitor.h"
#include "ir.h"
+#include "program/prog_instruction.h" /* For WRITEMASK_* */
-class lower_clip_distance_visitor : public ir_hierarchical_visitor {
+class lower_clip_distance_visitor : public ir_rvalue_visitor {
public:
lower_clip_distance_visitor()
: progress(false), old_clip_distance_var(NULL),
@@ -59,11 +60,14 @@ public:
virtual ir_visitor_status visit(ir_variable *);
void create_indices(ir_rvalue*, ir_rvalue *&, ir_rvalue *&);
- virtual ir_visitor_status visit_leave(ir_dereference_array *);
virtual ir_visitor_status visit_leave(ir_assignment *);
void visit_new_assignment(ir_assignment *ir);
virtual ir_visitor_status visit_leave(ir_call *);
+ virtual void handle_rvalue(ir_rvalue **rvalue);
+
+ void fix_lhs(ir_assignment *);
+
bool progress;
/**
@@ -173,35 +177,70 @@ lower_clip_distance_visitor::create_indices(ir_rvalue *old_index,
}
-/**
- * Replace any expression that indexes into the gl_ClipDistance array with an
- * expression that indexes into one of the vec4's in gl_ClipDistanceMESA and
- * accesses the appropriate component.
- */
-ir_visitor_status
-lower_clip_distance_visitor::visit_leave(ir_dereference_array *ir)
+void
+lower_clip_distance_visitor::handle_rvalue(ir_rvalue **rv)
{
/* If the gl_ClipDistance var hasn't been declared yet, then
* there's no way this deref can refer to it.
*/
- if (!this->old_clip_distance_var)
- return visit_continue;
+ if (!this->old_clip_distance_var || *rv == NULL)
+ return;
+
+ ir_dereference_array *const array_deref = (*rv)->as_dereference_array();
+ if (array_deref == NULL)
+ return;
- ir_dereference_variable *old_var_ref = ir->array->as_dereference_variable();
+ /* Replace any expression that indexes into the gl_ClipDistance array
+ * with an expression that indexes into one of the vec4's in
+ * gl_ClipDistanceMESA and accesses the appropriate component.
+ */
+ ir_dereference_variable *old_var_ref =
+ array_deref->array->as_dereference_variable();
if (old_var_ref && old_var_ref->var == this->old_clip_distance_var) {
this->progress = true;
ir_rvalue *array_index;
ir_rvalue *swizzle_index;
- this->create_indices(ir->array_index, array_index, swizzle_index);
- void *mem_ctx = ralloc_parent(ir);
- ir->array = new(mem_ctx) ir_dereference_array(
- this->new_clip_distance_var, array_index);
- ir->array_index = swizzle_index;
- }
+ this->create_indices(array_deref->array_index, array_index, swizzle_index);
+ void *mem_ctx = ralloc_parent(array_deref);
- return visit_continue;
+ ir_dereference_array *const ClipDistanceMESA_deref =
+ new(mem_ctx) ir_dereference_array(this->new_clip_distance_var,
+ array_index);
+
+ ir_expression *const expr =
+ new(mem_ctx) ir_expression(ir_binop_vector_extract,
+ ClipDistanceMESA_deref,
+ swizzle_index);
+
+ *rv = expr;
+ }
}
+void
+lower_clip_distance_visitor::fix_lhs(ir_assignment *ir)
+{
+ if (ir->lhs->ir_type == ir_type_expression) {
+ void *mem_ctx = ralloc_parent(ir);
+ ir_expression *const expr = (ir_expression *) ir->lhs;
+
+ /* The expression must be of the form:
+ *
+ * (vector_extract gl_ClipDistanceMESA[i], j).
+ */
+ assert(expr->operation == ir_binop_vector_extract);
+ assert(expr->operands[0]->ir_type == ir_type_dereference_array);
+ assert(expr->operands[0]->type == glsl_type::vec4_type);
+
+ ir_dereference *const new_lhs = (ir_dereference *) expr->operands[0];
+ ir->rhs = new(mem_ctx) ir_expression(ir_triop_vector_insert,
+ glsl_type::vec4_type,
+ new_lhs->clone(mem_ctx, NULL),
+ ir->rhs,
+ expr->operands[1]);
+ ir->set_lhs(new_lhs);
+ ir->write_mask = WRITEMASK_XYZW;
+ }
+}
/**
* Replace any assignment having gl_ClipDistance (undereferenced) as its LHS
@@ -223,29 +262,50 @@ lower_clip_distance_visitor::visit_leave(ir_assignment *ir)
* each of them.
*
* Note: to unroll into element-by-element assignments, we need to make
- * clones of the LHS and RHS. This is only safe if the LHS and RHS are
- * side-effect free. Fortunately, we know that they are, because the
- * only kind of rvalue that can have side effects is an ir_call, and
- * ir_calls only appear (a) as a statement on their own, or (b) as the
- * RHS of an assignment that stores the result of the call in a
- * temporary variable.
+ * clones of the LHS and RHS. This is safe because expressions and
+ * l-values are side-effect free.
*/
void *ctx = ralloc_parent(ir);
int array_size = this->old_clip_distance_var->type->array_size();
for (int i = 0; i < array_size; ++i) {
ir_dereference_array *new_lhs = new(ctx) ir_dereference_array(
ir->lhs->clone(ctx, NULL), new(ctx) ir_constant(i));
- new_lhs->accept(this);
ir_dereference_array *new_rhs = new(ctx) ir_dereference_array(
ir->rhs->clone(ctx, NULL), new(ctx) ir_constant(i));
- new_rhs->accept(this);
- this->base_ir->insert_before(
- new(ctx) ir_assignment(new_lhs, new_rhs));
+ this->handle_rvalue((ir_rvalue **) &new_rhs);
+
+ /* Handle the LHS after creating the new assignment. This must
+ * happen in this order because handle_rvalue may replace the old LHS
+ * with an ir_expression of ir_binop_vector_extract. Since this is
+ * not a valide l-value, this will cause an assertion in the
+ * ir_assignment constructor to fail.
+ *
+ * If this occurs, replace the mangled LHS with a dereference of the
+ * vector, and replace the RHS with an ir_triop_vector_insert.
+ */
+ ir_assignment *const assign = new(ctx) ir_assignment(new_lhs, new_rhs);
+ this->handle_rvalue((ir_rvalue **) &assign->lhs);
+ this->fix_lhs(assign);
+
+ this->base_ir->insert_before(assign);
}
ir->remove();
+
+ return visit_continue;
}
- return visit_continue;
+ /* Handle the LHS as if it were an r-value. Normally
+ * rvalue_visit(ir_assignment *) only visits the RHS, but we need to lower
+ * expressions in the LHS as well.
+ *
+ * This may cause the LHS to get replaced with an ir_expression of
+ * ir_binop_vector_extract. If this occurs, replace it with a dereference
+ * of the vector, and replace the RHS with an ir_triop_vector_insert.
+ */
+ handle_rvalue((ir_rvalue **)&ir->lhs);
+ this->fix_lhs(ir);
+
+ return rvalue_visit(ir);
}
@@ -330,7 +390,7 @@ lower_clip_distance_visitor::visit_leave(ir_call *ir)
}
}
- return visit_continue;
+ return rvalue_visit(ir);
}
diff --git a/mesalib/src/glsl/lower_instructions.cpp b/mesalib/src/glsl/lower_instructions.cpp
index 1ce7b7c9d..d32ec80d6 100644
--- a/mesalib/src/glsl/lower_instructions.cpp
+++ b/mesalib/src/glsl/lower_instructions.cpp
@@ -38,6 +38,7 @@
* - LOG_TO_LOG2
* - MOD_TO_FRACT
* - LRP_TO_ARITH
+ * - BITFIELD_INSERT_TO_BFM_BFI
*
* SUB_TO_ADD_NEG:
* ---------------
@@ -84,6 +85,15 @@
* LRP_TO_ARITH:
* -------------
* Converts ir_triop_lrp to (op0 * (1.0f - op2)) + (op1 * op2).
+ *
+ * BITFIELD_INSERT_TO_BFM_BFI:
+ * ---------------------------
+ * Breaks ir_quadop_bitfield_insert into ir_binop_bfm (bitfield mask) and
+ * ir_triop_bfi (bitfield insert).
+ *
+ * Many GPUs implement the bitfieldInsert() built-in from ARB_gpu_shader_5
+ * with a pair of instructions.
+ *
*/
#include "main/core.h" /* for M_LOG2E */
@@ -114,6 +124,7 @@ private:
void pow_to_exp2(ir_expression *);
void log_to_log2(ir_expression *);
void lrp_to_arith(ir_expression *);
+ void bitfield_insert_to_bfm_bfi(ir_expression *);
};
/**
@@ -298,6 +309,29 @@ lower_instructions_visitor::lrp_to_arith(ir_expression *ir)
this->progress = true;
}
+void
+lower_instructions_visitor::bitfield_insert_to_bfm_bfi(ir_expression *ir)
+{
+ /* Translates
+ * ir_quadop_bitfield_insert base insert offset bits
+ * into
+ * ir_triop_bfi (ir_binop_bfm bits offset) insert base
+ */
+
+ ir_rvalue *base_expr = ir->operands[0];
+
+ ir->operation = ir_triop_bfi;
+ ir->operands[0] = new(ir) ir_expression(ir_binop_bfm,
+ ir->type->get_base_type(),
+ ir->operands[3],
+ ir->operands[2]);
+ /* ir->operands[1] is still the value to insert. */
+ ir->operands[2] = base_expr;
+ ir->operands[3] = NULL;
+
+ this->progress = true;
+}
+
ir_visitor_status
lower_instructions_visitor::visit_leave(ir_expression *ir)
{
@@ -339,6 +373,11 @@ lower_instructions_visitor::visit_leave(ir_expression *ir)
lrp_to_arith(ir);
break;
+ case ir_quadop_bitfield_insert:
+ if (lowering(BITFIELD_INSERT_TO_BFM_BFI))
+ bitfield_insert_to_bfm_bfi(ir);
+ break;
+
default:
return visit_continue;
}
diff --git a/mesalib/src/glsl/lower_named_interface_blocks.cpp b/mesalib/src/glsl/lower_named_interface_blocks.cpp
new file mode 100644
index 000000000..eba667a8b
--- /dev/null
+++ b/mesalib/src/glsl/lower_named_interface_blocks.cpp
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2013 Intel Corporation
+ *
+ * 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.
+ */
+
+/**
+ * \file lower_named_interface_blocks.cpp
+ *
+ * This lowering pass converts all interface blocks with instance names
+ * into interface blocks without an instance name.
+ *
+ * For example, the following shader:
+ *
+ * out block {
+ * float block_var;
+ * } inst_name;
+ *
+ * main()
+ * {
+ * inst_name.block_var = 0.0;
+ * }
+ *
+ * Is rewritten to:
+ *
+ * out block {
+ * float block_var;
+ * };
+ *
+ * main()
+ * {
+ * block_var = 0.0;
+ * }
+ *
+ * This takes place after the shader code has already been verified with
+ * the interface name in place.
+ *
+ * The linking phase will use the interface block name rather than the
+ * interface's instance name when linking interfaces.
+ *
+ * This modification to the ir allows our currently existing dead code
+ * elimination to work with interface blocks without changes.
+ */
+
+#include "glsl_symbol_table.h"
+#include "ir.h"
+#include "ir_optimization.h"
+#include "ir_rvalue_visitor.h"
+#include "program/hash_table.h"
+
+class flatten_named_interface_blocks_declarations : public ir_rvalue_visitor
+{
+public:
+ void * const mem_ctx;
+ hash_table *interface_namespace;
+
+ flatten_named_interface_blocks_declarations(void *mem_ctx)
+ : mem_ctx(mem_ctx)
+ {
+ }
+
+ void run(exec_list *instructions);
+
+ virtual ir_visitor_status visit_leave(ir_assignment *);
+ virtual void handle_rvalue(ir_rvalue **rvalue);
+};
+
+void
+flatten_named_interface_blocks_declarations::run(exec_list *instructions)
+{
+ interface_namespace = hash_table_ctor(0, hash_table_string_hash,
+ hash_table_string_compare);
+
+ /* First pass: adjust instance block variables with an instance name
+ * to not have an instance name.
+ *
+ * The interface block variables are stored in the interface_namespace
+ * hash table so they can be used in the second pass.
+ */
+ foreach_list_safe(node, instructions) {
+ ir_variable *var = ((ir_instruction *) node)->as_variable();
+ if (!var || !var->is_interface_instance())
+ continue;
+
+ /* It should be possible to handle uniforms during this pass,
+ * but, this will require changes to the other uniform block
+ * support code.
+ */
+ if (var->mode == ir_var_uniform)
+ continue;
+
+ const glsl_type * iface_t = var->type;
+ const glsl_type * array_t = NULL;
+ exec_node *insert_pos = var;
+
+ if (iface_t->is_array()) {
+ array_t = iface_t;
+ iface_t = array_t->fields.array;
+ }
+
+ assert (iface_t->is_interface());
+
+ for (unsigned i = 0; i < iface_t->length; i++) {
+ const char * field_name = iface_t->fields.structure[i].name;
+ char *iface_field_name =
+ ralloc_asprintf(mem_ctx, "%s.%s",
+ iface_t->name, field_name);
+
+ ir_variable *found_var =
+ (ir_variable *) hash_table_find(interface_namespace,
+ iface_field_name);
+ if (!found_var) {
+ ir_variable *new_var;
+ if (array_t == NULL) {
+ char *var_name =
+ ralloc_strdup(mem_ctx, iface_t->fields.structure[i].name);
+ new_var =
+ new(mem_ctx) ir_variable(iface_t->fields.structure[i].type,
+ var_name,
+ (ir_variable_mode) var->mode);
+ } else {
+ const glsl_type *new_array_type =
+ glsl_type::get_array_instance(
+ iface_t->fields.structure[i].type,
+ array_t->length);
+ char *var_name =
+ ralloc_asprintf(mem_ctx, "%s[%d]",
+ iface_t->fields.structure[i].name,
+ array_t->length);
+ new_var =
+ new(mem_ctx) ir_variable(new_array_type,
+ var_name,
+ (ir_variable_mode) var->mode);
+ }
+
+ new_var->interface_type = iface_t;
+ hash_table_insert(interface_namespace, new_var,
+ iface_field_name);
+ insert_pos->insert_after(new_var);
+ insert_pos = new_var;
+ }
+ }
+ var->remove();
+ }
+
+ /* Second pass: visit all ir_dereference_record instances, and if they
+ * reference an interface block, then flatten the refererence out.
+ */
+ visit_list_elements(this, instructions);
+ hash_table_dtor(interface_namespace);
+ interface_namespace = NULL;
+}
+
+ir_visitor_status
+flatten_named_interface_blocks_declarations::visit_leave(ir_assignment *ir)
+{
+ ir_dereference_record *lhs_rec = ir->lhs->as_dereference_record();
+ if (lhs_rec) {
+ ir_rvalue *lhs_rec_tmp = lhs_rec;
+ handle_rvalue(&lhs_rec_tmp);
+ if (lhs_rec_tmp != lhs_rec) {
+ ir->set_lhs(lhs_rec_tmp);
+ }
+ }
+ return rvalue_visit(ir);
+}
+
+void
+flatten_named_interface_blocks_declarations::handle_rvalue(ir_rvalue **rvalue)
+{
+ if (*rvalue == NULL)
+ return;
+
+ ir_dereference_record *ir = (*rvalue)->as_dereference_record();
+ if (ir == NULL)
+ return;
+
+ ir_variable *var = ir->variable_referenced();
+
+ if (!var->is_interface_instance())
+ return;
+
+ /* It should be possible to handle uniforms during this pass,
+ * but, this will require changes to the other uniform block
+ * support code.
+ */
+ if (var->mode == ir_var_uniform)
+ return;
+
+ if (var->interface_type != NULL) {
+ char *iface_field_name =
+ ralloc_asprintf(mem_ctx, "%s.%s", var->interface_type->name,
+ ir->field);
+ /* Find the variable in the set of flattened interface blocks */
+ ir_variable *found_var =
+ (ir_variable *) hash_table_find(interface_namespace,
+ iface_field_name);
+ assert(found_var);
+
+ ir_dereference_variable *deref_var =
+ new(mem_ctx) ir_dereference_variable(found_var);
+
+ ir_dereference_array *deref_array =
+ ir->record->as_dereference_array();
+ if (deref_array != NULL) {
+ *rvalue =
+ new(mem_ctx) ir_dereference_array(deref_var,
+ deref_array->array_index);
+ } else {
+ *rvalue = deref_var;
+ }
+ }
+}
+
+void
+lower_named_interface_blocks(void *mem_ctx, gl_shader *shader)
+{
+ flatten_named_interface_blocks_declarations v_decl(mem_ctx);
+ v_decl.run(shader->ir);
+}
+
diff --git a/mesalib/src/glsl/lower_packed_varyings.cpp b/mesalib/src/glsl/lower_packed_varyings.cpp
index b4cc5cd0d..cdf2289b4 100644
--- a/mesalib/src/glsl/lower_packed_varyings.cpp
+++ b/mesalib/src/glsl/lower_packed_varyings.cpp
@@ -178,6 +178,14 @@ lower_packed_varyings_visitor::run(exec_list *instructions)
!this->needs_lowering(var))
continue;
+ /* This lowering pass is only capable of packing floats and ints
+ * together when their interpolation mode is "flat". Therefore, to be
+ * safe, caller should ensure that integral varyings always use flat
+ * interpolation, even when this is not required by GLSL.
+ */
+ assert(var->interpolation == INTERP_QUALIFIER_FLAT ||
+ !var->type->contains_integer());
+
/* Change the old varying into an ordinary global. */
var->mode = ir_var_auto;
diff --git a/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp b/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
index f85875f49..880859688 100644
--- a/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
+++ b/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
@@ -52,7 +52,12 @@ public:
progress = false;
}
- ir_rvalue *convert_vec_index_to_cond_assign(ir_rvalue *val);
+ ir_rvalue *convert_vec_index_to_cond_assign(void *mem_ctx,
+ ir_rvalue *orig_vector,
+ ir_rvalue *orig_index,
+ const glsl_type *type);
+
+ ir_rvalue *convert_vector_extract_to_cond_assign(ir_rvalue *ir);
virtual ir_visitor_status visit_enter(ir_expression *);
virtual ir_visitor_status visit_enter(ir_swizzle *);
@@ -65,24 +70,16 @@ public:
};
ir_rvalue *
-ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue *ir)
+ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(void *mem_ctx,
+ ir_rvalue *orig_vector,
+ ir_rvalue *orig_index,
+ const glsl_type *type)
{
- ir_dereference_array *orig_deref = ir->as_dereference_array();
ir_assignment *assign, *value_assign;
ir_variable *index, *var, *value;
ir_dereference *deref, *deref_value;
unsigned i;
- if (!orig_deref)
- return ir;
-
- if (orig_deref->array->type->is_matrix() ||
- orig_deref->array->type->is_array())
- return ir;
-
- void *mem_ctx = ralloc_parent(ir);
-
- assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
exec_list list;
@@ -92,19 +89,19 @@ ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue
ir_var_temporary);
list.push_tail(index);
deref = new(base_ir) ir_dereference_variable(index);
- assign = new(base_ir) ir_assignment(deref, orig_deref->array_index, NULL);
+ assign = new(base_ir) ir_assignment(deref, orig_index, NULL);
list.push_tail(assign);
/* Store the value inside a temp, thus avoiding matrixes duplication */
- value = new(base_ir) ir_variable(orig_deref->array->type, "vec_value_tmp",
- ir_var_temporary);
+ value = new(base_ir) ir_variable(orig_vector->type, "vec_value_tmp",
+ ir_var_temporary);
list.push_tail(value);
deref_value = new(base_ir) ir_dereference_variable(value);
- value_assign = new(base_ir) ir_assignment(deref_value, orig_deref->array);
+ value_assign = new(base_ir) ir_assignment(deref_value, orig_vector);
list.push_tail(value_assign);
/* Temporary where we store whichever value we swizzle out. */
- var = new(base_ir) ir_variable(ir->type, "vec_index_tmp_v",
+ var = new(base_ir) ir_variable(type, "vec_index_tmp_v",
ir_var_temporary);
list.push_tail(var);
@@ -113,13 +110,14 @@ ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue
*/
ir_rvalue *const cond_deref =
compare_index_block(&list, index, 0,
- orig_deref->array->type->vector_elements,
+ orig_vector->type->vector_elements,
mem_ctx);
/* Generate a conditional move of each vector element to the temp. */
- for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
+ for (i = 0; i < orig_vector->type->vector_elements; i++) {
ir_rvalue *condition_swizzle =
- new(base_ir) ir_swizzle(cond_deref->clone(ir, NULL), i, 0, 0, 0, 1);
+ new(base_ir) ir_swizzle(cond_deref->clone(mem_ctx, NULL),
+ i, 0, 0, 0, 1);
/* Just clone the rest of the deref chain when trying to get at the
* underlying variable.
@@ -142,13 +140,27 @@ ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue
return new(base_ir) ir_dereference_variable(var);
}
+ir_rvalue *
+ir_vec_index_to_cond_assign_visitor::convert_vector_extract_to_cond_assign(ir_rvalue *ir)
+{
+ ir_expression *const expr = ir->as_expression();
+
+ if (expr == NULL || expr->operation != ir_binop_vector_extract)
+ return ir;
+
+ return convert_vec_index_to_cond_assign(ralloc_parent(ir),
+ expr->operands[0],
+ expr->operands[1],
+ ir->type);
+}
+
ir_visitor_status
ir_vec_index_to_cond_assign_visitor::visit_enter(ir_expression *ir)
{
unsigned int i;
for (i = 0; i < ir->get_num_operands(); i++) {
- ir->operands[i] = convert_vec_index_to_cond_assign(ir->operands[i]);
+ ir->operands[i] = convert_vector_extract_to_cond_assign(ir->operands[i]);
}
return visit_continue;
@@ -161,7 +173,7 @@ ir_vec_index_to_cond_assign_visitor::visit_enter(ir_swizzle *ir)
* the result of indexing a vector is. But maybe at some point we'll end up
* using swizzling of scalars for vector construction.
*/
- ir->val = convert_vec_index_to_cond_assign(ir->val);
+ ir->val = convert_vector_extract_to_cond_assign(ir->val);
return visit_continue;
}
@@ -169,91 +181,12 @@ ir_vec_index_to_cond_assign_visitor::visit_enter(ir_swizzle *ir)
ir_visitor_status
ir_vec_index_to_cond_assign_visitor::visit_leave(ir_assignment *ir)
{
- ir_variable *index, *var;
- ir_dereference_variable *deref;
- ir_assignment *assign;
- unsigned i;
-
- ir->rhs = convert_vec_index_to_cond_assign(ir->rhs);
- if (ir->condition)
- ir->condition = convert_vec_index_to_cond_assign(ir->condition);
-
- /* Last, handle the LHS */
- ir_dereference_array *orig_deref = ir->lhs->as_dereference_array();
-
- if (!orig_deref ||
- orig_deref->array->type->is_matrix() ||
- orig_deref->array->type->is_array())
- return visit_continue;
-
- void *mem_ctx = ralloc_parent(ir);
-
- assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
-
- exec_list list;
-
- /* Store the index to a temporary to avoid reusing its tree. */
- index = new(ir) ir_variable(glsl_type::int_type, "vec_index_tmp_i",
- ir_var_temporary);
- list.push_tail(index);
- deref = new(ir) ir_dereference_variable(index);
- assign = new(ir) ir_assignment(deref, orig_deref->array_index, NULL);
- list.push_tail(assign);
-
- /* Store the RHS to a temporary to avoid reusing its tree. */
- var = new(ir) ir_variable(ir->rhs->type, "vec_index_tmp_v",
- ir_var_temporary);
- list.push_tail(var);
- deref = new(ir) ir_dereference_variable(var);
- assign = new(ir) ir_assignment(deref, ir->rhs, NULL);
- list.push_tail(assign);
-
- /* Generate a single comparison condition "mask" for all of the components
- * in the vector.
- */
- ir_rvalue *const cond_deref =
- compare_index_block(&list, index, 0,
- orig_deref->array->type->vector_elements,
- mem_ctx);
+ ir->rhs = convert_vector_extract_to_cond_assign(ir->rhs);
- /* Generate a conditional move of each vector element to the temp. */
- for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
- ir_rvalue *condition_swizzle =
- new(ir) ir_swizzle(cond_deref->clone(ir, NULL), i, 0, 0, 0, 1);
-
-
- /* Just clone the rest of the deref chain when trying to get at the
- * underlying variable.
- */
- ir_rvalue *swizzle =
- new(ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
- i, 0, 0, 0, 1);
-
- deref = new(ir) ir_dereference_variable(var);
- assign = new(ir) ir_assignment(swizzle, deref, condition_swizzle);
- list.push_tail(assign);
+ if (ir->condition) {
+ ir->condition = convert_vector_extract_to_cond_assign(ir->condition);
}
- /* If the original assignment has a condition, respect that original
- * condition! This is acomplished by wrapping the new conditional
- * assignments in an if-statement that uses the original condition.
- */
- if (ir->condition != NULL) {
- /* No need to clone the condition because the IR that it hangs on is
- * going to be removed from the instruction sequence.
- */
- ir_if *if_stmt = new(mem_ctx) ir_if(ir->condition);
-
- list.move_nodes_to(&if_stmt->then_instructions);
- ir->insert_before(if_stmt);
- } else {
- ir->insert_before(&list);
- }
-
- ir->remove();
-
- this->progress = true;
-
return visit_continue;
}
@@ -262,7 +195,7 @@ ir_vec_index_to_cond_assign_visitor::visit_enter(ir_call *ir)
{
foreach_iter(exec_list_iterator, iter, *ir) {
ir_rvalue *param = (ir_rvalue *)iter.get();
- ir_rvalue *new_param = convert_vec_index_to_cond_assign(param);
+ ir_rvalue *new_param = convert_vector_extract_to_cond_assign(param);
if (new_param != param) {
param->replace_with(new_param);
@@ -276,7 +209,7 @@ ir_visitor_status
ir_vec_index_to_cond_assign_visitor::visit_enter(ir_return *ir)
{
if (ir->value) {
- ir->value = convert_vec_index_to_cond_assign(ir->value);
+ ir->value = convert_vector_extract_to_cond_assign(ir->value);
}
return visit_continue;
@@ -285,7 +218,7 @@ ir_vec_index_to_cond_assign_visitor::visit_enter(ir_return *ir)
ir_visitor_status
ir_vec_index_to_cond_assign_visitor::visit_enter(ir_if *ir)
{
- ir->condition = convert_vec_index_to_cond_assign(ir->condition);
+ ir->condition = convert_vector_extract_to_cond_assign(ir->condition);
return visit_continue;
}
diff --git a/mesalib/src/glsl/lower_vec_index_to_swizzle.cpp b/mesalib/src/glsl/lower_vec_index_to_swizzle.cpp
index 264d6dc07..d5ad692c2 100644
--- a/mesalib/src/glsl/lower_vec_index_to_swizzle.cpp
+++ b/mesalib/src/glsl/lower_vec_index_to_swizzle.cpp
@@ -46,7 +46,7 @@ public:
progress = false;
}
- ir_rvalue *convert_vec_index_to_swizzle(ir_rvalue *val);
+ ir_rvalue *convert_vector_extract_to_swizzle(ir_rvalue *val);
virtual ir_visitor_status visit_enter(ir_expression *);
virtual ir_visitor_status visit_enter(ir_swizzle *);
@@ -59,20 +59,14 @@ public:
};
ir_rvalue *
-ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir)
+ir_vec_index_to_swizzle_visitor::convert_vector_extract_to_swizzle(ir_rvalue *ir)
{
- ir_dereference_array *deref = ir->as_dereference_array();
- ir_constant *ir_constant;
-
- if (!deref)
- return ir;
-
- if (deref->array->type->is_matrix() || deref->array->type->is_array())
+ ir_expression *const expr = ir->as_expression();
+ if (expr == NULL || expr->operation != ir_binop_vector_extract)
return ir;
- assert(deref->array_index->type->base_type == GLSL_TYPE_INT);
- ir_constant = deref->array_index->constant_expression_value();
- if (!ir_constant)
+ ir_constant *const idx = expr->operands[1]->constant_expression_value();
+ if (idx == NULL)
return ir;
void *ctx = ralloc_parent(ir);
@@ -92,10 +86,10 @@ ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir)
* The ir_swizzle constructor gets angry if the index is negative or too
* large. For simplicity sake, just clamp the index to [0, size-1].
*/
- const int i = MIN2(MAX2(ir_constant->value.i[0], 0),
- ((int) deref->array->type->vector_elements - 1));
+ const int i = CLAMP(idx->value.i[0], 0,
+ (int) expr->operands[0]->type->vector_elements - 1);
- return new(ctx) ir_swizzle(deref->array, i, 0, 0, 0, 1);
+ return new(ctx) ir_swizzle(expr->operands[0], i, 0, 0, 0, 1);
}
ir_visitor_status
@@ -104,7 +98,7 @@ ir_vec_index_to_swizzle_visitor::visit_enter(ir_expression *ir)
unsigned int i;
for (i = 0; i < ir->get_num_operands(); i++) {
- ir->operands[i] = convert_vec_index_to_swizzle(ir->operands[i]);
+ ir->operands[i] = convert_vector_extract_to_swizzle(ir->operands[i]);
}
return visit_continue;
@@ -117,7 +111,7 @@ ir_vec_index_to_swizzle_visitor::visit_enter(ir_swizzle *ir)
* the result of indexing a vector is. But maybe at some point we'll end up
* using swizzling of scalars for vector construction.
*/
- ir->val = convert_vec_index_to_swizzle(ir->val);
+ ir->val = convert_vector_extract_to_swizzle(ir->val);
return visit_continue;
}
@@ -125,8 +119,7 @@ ir_vec_index_to_swizzle_visitor::visit_enter(ir_swizzle *ir)
ir_visitor_status
ir_vec_index_to_swizzle_visitor::visit_enter(ir_assignment *ir)
{
- ir->set_lhs(convert_vec_index_to_swizzle(ir->lhs));
- ir->rhs = convert_vec_index_to_swizzle(ir->rhs);
+ ir->rhs = convert_vector_extract_to_swizzle(ir->rhs);
return visit_continue;
}
@@ -136,7 +129,7 @@ ir_vec_index_to_swizzle_visitor::visit_enter(ir_call *ir)
{
foreach_iter(exec_list_iterator, iter, *ir) {
ir_rvalue *param = (ir_rvalue *)iter.get();
- ir_rvalue *new_param = convert_vec_index_to_swizzle(param);
+ ir_rvalue *new_param = convert_vector_extract_to_swizzle(param);
if (new_param != param) {
param->replace_with(new_param);
@@ -150,7 +143,7 @@ ir_visitor_status
ir_vec_index_to_swizzle_visitor::visit_enter(ir_return *ir)
{
if (ir->value) {
- ir->value = convert_vec_index_to_swizzle(ir->value);
+ ir->value = convert_vector_extract_to_swizzle(ir->value);
}
return visit_continue;
@@ -159,7 +152,7 @@ ir_vec_index_to_swizzle_visitor::visit_enter(ir_return *ir)
ir_visitor_status
ir_vec_index_to_swizzle_visitor::visit_enter(ir_if *ir)
{
- ir->condition = convert_vec_index_to_swizzle(ir->condition);
+ ir->condition = convert_vector_extract_to_swizzle(ir->condition);
return visit_continue;
}
diff --git a/mesalib/src/glsl/lower_vector_insert.cpp b/mesalib/src/glsl/lower_vector_insert.cpp
new file mode 100644
index 000000000..0e640cc32
--- /dev/null
+++ b/mesalib/src/glsl/lower_vector_insert.cpp
@@ -0,0 +1,139 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * 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.
+ */
+#include "ir.h"
+#include "ir_builder.h"
+#include "ir_rvalue_visitor.h"
+#include "ir_optimization.h"
+
+using namespace ir_builder;
+
+class vector_insert_visitor : public ir_rvalue_visitor {
+public:
+ vector_insert_visitor(bool lower_nonconstant_index)
+ : progress(false), lower_nonconstant_index(lower_nonconstant_index)
+ {
+ factory.instructions = &factory_instructions;
+ }
+
+ virtual ~vector_insert_visitor()
+ {
+ assert(factory_instructions.is_empty());
+ }
+
+ virtual void handle_rvalue(ir_rvalue **rv);
+
+ ir_factory factory;
+ exec_list factory_instructions;
+ bool progress;
+ bool lower_nonconstant_index;
+};
+
+
+void
+vector_insert_visitor::handle_rvalue(ir_rvalue **rv)
+{
+ if (*rv == NULL || (*rv)->ir_type != ir_type_expression)
+ return;
+
+ ir_expression *const expr = (ir_expression *) *rv;
+
+ if (likely(expr->operation != ir_triop_vector_insert))
+ return;
+
+ factory.mem_ctx = ralloc_parent(expr);
+
+ ir_constant *const idx = expr->operands[2]->constant_expression_value();
+ if (idx != NULL) {
+ /* Replace (vector_insert (vec) (scalar) (index)) with a dereference of
+ * a new temporary. The new temporary gets assigned as
+ *
+ * t = vec
+ * t.mask = scalar
+ *
+ * where mask is the component selected by index.
+ */
+ ir_variable *const temp =
+ factory.make_temp(expr->operands[0]->type, "vec_tmp");
+
+ const int mask = 1 << idx->value.i[0];
+
+ factory.emit(assign(temp, expr->operands[0]));
+ factory.emit(assign(temp, expr->operands[1], mask));
+
+ this->progress = true;
+ *rv = new(factory.mem_ctx) ir_dereference_variable(temp);
+ } else if (this->lower_nonconstant_index) {
+ /* Replace (vector_insert (vec) (scalar) (index)) with a dereference of
+ * a new temporary. The new temporary gets assigned as
+ *
+ * t = vec
+ * if (index == 0)
+ * t.x = scalar
+ * if (index == 1)
+ * t.y = scalar
+ * if (index == 2)
+ * t.z = scalar
+ * if (index == 3)
+ * t.w = scalar
+ */
+ ir_variable *const temp =
+ factory.make_temp(expr->operands[0]->type, "vec_tmp");
+
+ ir_variable *const src_temp =
+ factory.make_temp(expr->operands[1]->type, "src_temp");
+
+ factory.emit(assign(temp, expr->operands[0]));
+ factory.emit(assign(src_temp, expr->operands[1]));
+
+ for (unsigned i = 0; i < expr->type->vector_elements; i++) {
+ ir_constant *const cmp_index =
+ new(factory.mem_ctx) ir_constant(int(i));
+
+ ir_variable *const cmp_result =
+ factory.make_temp(glsl_type::bool_type, "index_condition");
+
+ factory.emit(assign(cmp_result,
+ equal(expr->operands[2]->clone(factory.mem_ctx,
+ NULL),
+ cmp_index)));
+
+ factory.emit(if_tree(cmp_result,
+ assign(temp, src_temp, WRITEMASK_X << i)));
+ }
+
+ this->progress = true;
+ *rv = new(factory.mem_ctx) ir_dereference_variable(temp);
+ }
+
+ base_ir->insert_before(factory.instructions);
+}
+
+bool
+lower_vector_insert(exec_list *instructions, bool lower_nonconstant_index)
+{
+ vector_insert_visitor v(lower_nonconstant_index);
+
+ visit_list_elements(&v, instructions);
+
+ return v.progress;
+}
diff --git a/mesalib/src/glsl/main.cpp b/mesalib/src/glsl/main.cpp
index ce084b4d7..d7e35bcb3 100644
--- a/mesalib/src/glsl/main.cpp
+++ b/mesalib/src/glsl/main.cpp
@@ -174,9 +174,11 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader)
/* Optimization passes */
if (!state->error && !shader->ir->is_empty()) {
+ const struct gl_shader_compiler_options *opts =
+ &ctx->ShaderCompilerOptions[_mesa_shader_type_to_index(shader->Type)];
bool progress;
do {
- progress = do_common_optimization(shader->ir, false, false, 32);
+ progress = do_common_optimization(shader->ir, false, false, 32, opts);
} while (progress);
validate_ir_tree(shader->ir);
diff --git a/mesalib/src/glsl/opt_algebraic.cpp b/mesalib/src/glsl/opt_algebraic.cpp
index 70e016d22..d706a6ad1 100644
--- a/mesalib/src/glsl/opt_algebraic.cpp
+++ b/mesalib/src/glsl/opt_algebraic.cpp
@@ -186,12 +186,12 @@ ir_algebraic_visitor::swizzle_if_required(ir_expression *expr,
ir_rvalue *
ir_algebraic_visitor::handle_expression(ir_expression *ir)
{
- ir_constant *op_const[3] = {NULL, NULL, NULL};
- ir_expression *op_expr[3] = {NULL, NULL, NULL};
+ ir_constant *op_const[4] = {NULL, NULL, NULL, NULL};
+ ir_expression *op_expr[4] = {NULL, NULL, NULL, NULL};
ir_expression *temp;
unsigned int i;
- assert(ir->get_num_operands() <= 3);
+ assert(ir->get_num_operands() <= 4);
for (i = 0; i < ir->get_num_operands(); i++) {
if (ir->operands[i]->type->is_matrix())
return ir;
diff --git a/mesalib/src/glsl/opt_flip_matrices.cpp b/mesalib/src/glsl/opt_flip_matrices.cpp
new file mode 100644
index 000000000..497513fe8
--- /dev/null
+++ b/mesalib/src/glsl/opt_flip_matrices.cpp
@@ -0,0 +1,122 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * 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.
+ */
+
+/**
+ * \file opt_flip_matrices.cpp
+ *
+ * Convert (matrix * vector) operations to (vector * matrixTranspose),
+ * which can be done using dot products rather than multiplies and adds.
+ * On some hardware, this is more efficient.
+ *
+ * This currently only does the conversion for built-in matrices which
+ * already have transposed equivalents. Namely, gl_ModelViewProjectionMatrix
+ * and gl_TextureMatrix.
+ */
+#include "ir.h"
+#include "ir_optimization.h"
+#include "main/macros.h"
+
+namespace {
+class matrix_flipper : public ir_hierarchical_visitor {
+public:
+ matrix_flipper(exec_list *instructions)
+ {
+ progress = false;
+ mvp_transpose = NULL;
+ texmat_transpose = NULL;
+
+ foreach_list(n, instructions) {
+ ir_instruction *ir = (ir_instruction *) n;
+ ir_variable *var = ir->as_variable();
+ if (!var)
+ continue;
+ if (strcmp(var->name, "gl_ModelViewProjectionMatrixTranspose") == 0)
+ mvp_transpose = var;
+ if (strcmp(var->name, "gl_TextureMatrixTranspose") == 0)
+ texmat_transpose = var;
+ }
+ }
+
+ ir_visitor_status visit_enter(ir_expression *ir);
+
+ bool progress;
+
+private:
+ ir_variable *mvp_transpose;
+ ir_variable *texmat_transpose;
+};
+}
+
+ir_visitor_status
+matrix_flipper::visit_enter(ir_expression *ir)
+{
+ if (ir->operation != ir_binop_mul ||
+ !ir->operands[0]->type->is_matrix() ||
+ !ir->operands[1]->type->is_vector())
+ return visit_continue;
+
+ ir_variable *mat_var = ir->operands[0]->variable_referenced();
+ if (!mat_var)
+ return visit_continue;
+
+ if (mvp_transpose &&
+ strcmp(mat_var->name, "gl_ModelViewProjectionMatrix") == 0) {
+ ir_dereference_variable *deref = ir->operands[0]->as_dereference_variable();
+ assert(deref && deref->var == mat_var);
+
+ void *mem_ctx = ralloc_parent(ir);
+
+ ir->operands[0] = ir->operands[1];
+ ir->operands[1] = new(mem_ctx) ir_dereference_variable(mvp_transpose);
+
+ progress = true;
+ } else if (texmat_transpose &&
+ strcmp(mat_var->name, "gl_TextureMatrix") == 0) {
+ ir_dereference_array *array_ref = ir->operands[0]->as_dereference_array();
+ assert(array_ref != NULL);
+ ir_dereference_variable *var_ref = array_ref->array->as_dereference_variable();
+ assert(var_ref && var_ref->var == mat_var);
+
+ ir->operands[0] = ir->operands[1];
+ ir->operands[1] = array_ref;
+
+ var_ref->var = texmat_transpose;
+
+ texmat_transpose->max_array_access =
+ MAX2(texmat_transpose->max_array_access, mat_var->max_array_access);
+
+ progress = true;
+ }
+
+ return visit_continue;
+}
+
+bool
+opt_flip_matrices(struct exec_list *instructions)
+{
+ matrix_flipper v(instructions);
+
+ visit_list_elements(&v, instructions);
+
+ return v.progress;
+}
diff --git a/mesalib/src/glsl/opt_if_simplification.cpp b/mesalib/src/glsl/opt_if_simplification.cpp
index e1a23d94a..db59b131d 100644
--- a/mesalib/src/glsl/opt_if_simplification.cpp
+++ b/mesalib/src/glsl/opt_if_simplification.cpp
@@ -25,7 +25,8 @@
* \file opt_if_simplification.cpp
*
* Moves constant branches of if statements out to the surrounding
- * instruction stream.
+ * instruction stream, and inverts if conditionals to avoid empty
+ * "then" blocks.
*/
#include "ir.h"
@@ -101,6 +102,30 @@ ir_if_simplification_visitor::visit_leave(ir_if *ir)
}
ir->remove();
this->made_progress = true;
+ return visit_continue;
+ }
+
+ /* Turn:
+ *
+ * if (cond) {
+ * } else {
+ * do_work();
+ * }
+ *
+ * into :
+ *
+ * if (!cond)
+ * do_work();
+ *
+ * which avoids control flow for "else" (which is usually more
+ * expensive than normal operations), and the "not" can usually be
+ * folded into the generation of "cond" anyway.
+ */
+ if (ir->then_instructions.is_empty()) {
+ ir->condition = new(ralloc_parent(ir->condition))
+ ir_expression(ir_unop_logic_not, ir->condition);
+ ir->else_instructions.move_nodes_to(&ir->then_instructions);
+ this->made_progress = true;
}
return visit_continue;
diff --git a/mesalib/src/glsl/program.h b/mesalib/src/glsl/program.h
index 46ce9dccc..6a76d4d54 100644
--- a/mesalib/src/glsl/program.h
+++ b/mesalib/src/glsl/program.h
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "main/core.h"
diff --git a/mesalib/src/glsl/ralloc.c b/mesalib/src/glsl/ralloc.c
index 59e71c48b..e79dad764 100644
--- a/mesalib/src/glsl/ralloc.c
+++ b/mesalib/src/glsl/ralloc.c
@@ -107,9 +107,13 @@ void *
ralloc_size(const void *ctx, size_t size)
{
void *block = calloc(1, size + sizeof(ralloc_header));
+ ralloc_header *info;
+ ralloc_header *parent;
- ralloc_header *info = (ralloc_header *) block;
- ralloc_header *parent = ctx != NULL ? get_header(ctx) : NULL;
+ if (unlikely(block == NULL))
+ return NULL;
+ info = (ralloc_header *) block;
+ parent = ctx != NULL ? get_header(ctx) : NULL;
add_child(parent, info);
diff --git a/mesalib/src/glsl/standalone_scaffolding.cpp b/mesalib/src/glsl/standalone_scaffolding.cpp
index 0c1f52f48..11cd6cdc0 100644
--- a/mesalib/src/glsl/standalone_scaffolding.cpp
+++ b/mesalib/src/glsl/standalone_scaffolding.cpp
@@ -104,6 +104,7 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api)
ctx->Extensions.ARB_texture_cube_map_array = true;
ctx->Extensions.ARB_texture_multisample = true;
ctx->Extensions.ARB_texture_query_lod = true;
+ ctx->Extensions.ARB_gpu_shader5 = true;
ctx->Const.GLSLVersion = 120;
@@ -116,10 +117,22 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api)
ctx->Const.VertexProgram.MaxUniformComponents = 512;
ctx->Const.MaxVarying = 8; /* == gl_MaxVaryingFloats / 4 */
- ctx->Const.MaxVertexTextureImageUnits = 0;
+ ctx->Const.VertexProgram.MaxTextureImageUnits = 0;
ctx->Const.MaxCombinedTextureImageUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
+ ctx->Const.FragmentProgram.MaxTextureImageUnits = 2;
ctx->Const.FragmentProgram.MaxUniformComponents = 64;
ctx->Const.MaxDrawBuffers = 1;
+
+ /* Set up default shader compiler options. */
+ struct gl_shader_compiler_options options;
+ memset(&options, 0, sizeof(options));
+ options.MaxUnrollIterations = 32;
+ options.MaxIfDepth = UINT_MAX;
+
+ /* Default pragma settings */
+ options.DefaultPragmas.Optimize = true;
+
+ for (int sh = 0; sh < MESA_SHADER_TYPES; ++sh)
+ memcpy(&ctx->ShaderCompilerOptions[sh], &options, sizeof(options));
}
diff --git a/mesalib/src/glsl/standalone_scaffolding.h b/mesalib/src/glsl/standalone_scaffolding.h
index 0a2cde8a3..7afb1c313 100644
--- a/mesalib/src/glsl/standalone_scaffolding.h
+++ b/mesalib/src/glsl/standalone_scaffolding.h
@@ -31,6 +31,7 @@
#ifndef STANDALONE_SCAFFOLDING_H
#define STANDALONE_SCAFFOLDING_H
+#include <assert.h>
#include "main/mtypes.h"
extern "C" void
@@ -47,6 +48,22 @@ extern "C" void
_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id,
const char *msg, int len);
+static inline gl_shader_type
+_mesa_shader_type_to_index(GLenum v)
+{
+ switch (v) {
+ case GL_VERTEX_SHADER:
+ return MESA_SHADER_VERTEX;
+ case GL_FRAGMENT_SHADER:
+ return MESA_SHADER_FRAGMENT;
+ case GL_GEOMETRY_SHADER:
+ return MESA_SHADER_GEOMETRY;
+ default:
+ assert(!"bad value in _mesa_shader_type_to_index()");
+ return MESA_SHADER_TYPES;
+ }
+}
+
/**
* Initialize the given gl_context structure to a reasonable set of
* defaults representing the minimum capabilities required by the
diff --git a/mesalib/src/glsl/test_optpass.cpp b/mesalib/src/glsl/test_optpass.cpp
index 117b0b006..fc10cbbde 100644
--- a/mesalib/src/glsl/test_optpass.cpp
+++ b/mesalib/src/glsl/test_optpass.cpp
@@ -54,7 +54,8 @@ static string read_stdin_to_eof()
}
static GLboolean
-do_optimization(struct exec_list *ir, const char *optimization)
+do_optimization(struct exec_list *ir, const char *optimization,
+ const struct gl_shader_compiler_options *options)
{
int int_0;
int int_1;
@@ -64,7 +65,7 @@ do_optimization(struct exec_list *ir, const char *optimization)
if (sscanf(optimization, "do_common_optimization ( %d , %d ) ",
&int_0, &int_1) == 2) {
- return do_common_optimization(ir, int_0 != 0, false, int_1);
+ return do_common_optimization(ir, int_0 != 0, false, int_1, options);
} else if (strcmp(optimization, "do_algebraic") == 0) {
return do_algebraic(ir);
} else if (strcmp(optimization, "do_constant_folding") == 0) {
@@ -141,7 +142,8 @@ do_optimization(struct exec_list *ir, const char *optimization)
static GLboolean
do_optimization_passes(struct exec_list *ir, char **optimizations,
- int num_optimizations, bool quiet)
+ int num_optimizations, bool quiet,
+ const struct gl_shader_compiler_options *options)
{
GLboolean overall_progress = false;
@@ -150,7 +152,7 @@ do_optimization_passes(struct exec_list *ir, char **optimizations,
if (!quiet) {
printf("*** Running optimization %s...", optimization);
}
- GLboolean progress = do_optimization(ir, optimization);
+ GLboolean progress = do_optimization(ir, optimization, options);
if (!quiet) {
printf("%s\n", progress ? "progress" : "no progress");
}
@@ -240,9 +242,11 @@ int test_optpass(int argc, char **argv)
/* Optimization passes */
if (!state->error) {
GLboolean progress;
+ const struct gl_shader_compiler_options *options =
+ &ctx->ShaderCompilerOptions[_mesa_shader_type_to_index(shader_type)];
do {
progress = do_optimization_passes(shader->ir, &argv[optind],
- argc - optind, quiet != 0);
+ argc - optind, quiet != 0, options);
} while (loop && progress);
}
diff --git a/mesalib/src/mapi/Android.mk b/mesalib/src/mapi/Android.mk
index d1749a262..f10437874 100644
--- a/mesalib/src/mapi/Android.mk
+++ b/mesalib/src/mapi/Android.mk
@@ -36,12 +36,12 @@ include $(CLEAR_VARS)
abi_header := shared-glapi/glapi_mapi_tmp.h
LOCAL_SRC_FILES := \
- mapi/entry.c \
- mapi/mapi_glapi.c \
- mapi/stub.c \
- mapi/table.c \
- mapi/u_current.c \
- mapi/u_execmem.c
+ entry.c \
+ mapi_glapi.c \
+ stub.c \
+ table.c \
+ u_current.c \
+ u_execmem.c
LOCAL_CFLAGS := \
-DMAPI_MODE_GLAPI \
@@ -68,9 +68,9 @@ include $(BUILD_SHARED_LIBRARY)
mapi_abi_deps := \
$(wildcard $(LOCAL_PATH)/glapi/gen/*.py) \
$(wildcard $(LOCAL_PATH)/glapi/gen/*.xml) \
- $(LOCAL_PATH)/mapi/mapi_abi.py
+ $(LOCAL_PATH)/mapi_abi.py
-$(mapi_abi_headers): PRIVATE_SCRIPT := $(MESA_PYTHON2) $(LOCAL_PATH)/mapi/mapi_abi.py
+$(mapi_abi_headers): PRIVATE_SCRIPT := $(MESA_PYTHON2) $(LOCAL_PATH)/mapi_abi.py
$(mapi_abi_headers): PRIVATE_APIXML := $(LOCAL_PATH)/glapi/gen/gl_and_es_API.xml
$(mapi_abi_headers): $(mapi_abi_deps)
@mkdir -p $(dir $@)
diff --git a/mesalib/src/gallium/Makefile.am b/mesalib/src/mapi/Makefile.am
index e7cff8920..ef538039b 100644
--- a/mesalib/src/gallium/Makefile.am
+++ b/mesalib/src/mapi/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2012 Intel Corporation
+# Copyright © 2013 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
@@ -19,4 +19,24 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-SUBDIRS = $(GALLIUM_DIRS)
+SUBDIRS = glapi/gen
+
+if HAVE_SHARED_GLAPI
+SUBDIRS += shared-glapi
+endif
+
+if HAVE_OPENGL
+SUBDIRS += glapi
+endif
+
+if HAVE_OPENGL_ES1
+SUBDIRS += es1api
+endif
+
+if HAVE_OPENGL_ES2
+SUBDIRS += es2api
+endif
+
+if HAVE_OPENVG
+SUBDIRS += vgapi
+endif
diff --git a/mesalib/src/mapi/mapi/sources.mak b/mesalib/src/mapi/Makefile.sources
index 56f4afd3e..aff465a60 100644
--- a/mesalib/src/mapi/mapi/sources.mak
+++ b/mesalib/src/mapi/Makefile.sources
@@ -1,4 +1,4 @@
-# src/mapi/mapi/sources.mak
+# src/mapi/Makefile.sources
#
# mapi may be used in several ways
#
@@ -15,22 +15,22 @@
# this mode, compile MAPI_BRIDGE_FILES with MAPI_MODE_BRIDGE defined.
MAPI_UTIL_FILES = \
- $(TOP)/src/mapi/mapi/u_current.c \
- $(TOP)/src/mapi/mapi/u_execmem.c
+ $(TOP)/src/mapi/u_current.c \
+ $(TOP)/src/mapi/u_execmem.c
MAPI_FILES = \
- $(TOP)/src/mapi/mapi/entry.c \
- $(TOP)/src/mapi/mapi/mapi.c \
- $(TOP)/src/mapi/mapi/stub.c \
- $(TOP)/src/mapi/mapi/table.c \
+ $(TOP)/src/mapi/entry.c \
+ $(TOP)/src/mapi/mapi.c \
+ $(TOP)/src/mapi/stub.c \
+ $(TOP)/src/mapi/table.c \
$(MAPI_UTIL_FILES)
MAPI_GLAPI_FILES = \
- $(TOP)/src/mapi/mapi/entry.c \
- $(TOP)/src/mapi/mapi/mapi_glapi.c \
- $(TOP)/src/mapi/mapi/stub.c \
- $(TOP)/src/mapi/mapi/table.c \
+ $(TOP)/src/mapi/entry.c \
+ $(TOP)/src/mapi/mapi_glapi.c \
+ $(TOP)/src/mapi/stub.c \
+ $(TOP)/src/mapi/table.c \
$(MAPI_UTIL_FILES)
MAPI_BRIDGE_FILES = \
- $(TOP)/src/mapi/mapi/entry.c
+ $(TOP)/src/mapi/entry.c
diff --git a/mesalib/src/mapi/mapi/entry.c b/mesalib/src/mapi/entry.c
index 3d9168a72..3d9168a72 100644
--- a/mesalib/src/mapi/mapi/entry.c
+++ b/mesalib/src/mapi/entry.c
diff --git a/mesalib/src/mapi/mapi/entry.h b/mesalib/src/mapi/entry.h
index 9df810004..9df810004 100644
--- a/mesalib/src/mapi/mapi/entry.h
+++ b/mesalib/src/mapi/entry.h
diff --git a/mesalib/src/mapi/mapi/entry_x86-64_tls.h b/mesalib/src/mapi/entry_x86-64_tls.h
index 72d4125a6..36cad00c2 100644
--- a/mesalib/src/mapi/mapi/entry_x86-64_tls.h
+++ b/mesalib/src/mapi/entry_x86-64_tls.h
@@ -28,19 +28,6 @@
#include "u_macros.h"
-#ifdef __linux__
-__asm__(".section .note.ABI-tag, \"a\"\n\t"
- ".p2align 2\n\t"
- ".long 1f - 0f\n\t" /* name length */
- ".long 3f - 2f\n\t" /* data length */
- ".long 1\n\t" /* note length */
- "0: .asciz \"GNU\"\n\t" /* vendor name */
- "1: .p2align 2\n\t"
- "2: .long 0\n\t" /* note data: the ABI tag */
- ".long 2,4,20\n\t" /* Minimum kernel version w/TLS */
- "3: .p2align 2\n\t"); /* pad out section */
-#endif /* __linux__ */
-
__asm__(".text\n"
".balign 32\n"
"x86_64_entry_start:");
diff --git a/mesalib/src/mapi/mapi/entry_x86_tls.h b/mesalib/src/mapi/entry_x86_tls.h
index de918128e..58d09caa6 100644
--- a/mesalib/src/mapi/mapi/entry_x86_tls.h
+++ b/mesalib/src/mapi/entry_x86_tls.h
@@ -29,19 +29,6 @@
#include <string.h>
#include "u_macros.h"
-#ifdef __linux__
-__asm__(".section .note.ABI-tag, \"a\"\n\t"
- ".p2align 2\n\t"
- ".long 1f - 0f\n\t" /* name length */
- ".long 3f - 2f\n\t" /* data length */
- ".long 1\n\t" /* note length */
- "0: .asciz \"GNU\"\n\t" /* vendor name */
- "1: .p2align 2\n\t"
- "2: .long 0\n\t" /* note data: the ABI tag */
- ".long 2,4,20\n\t" /* Minimum kernel version w/TLS */
- "3: .p2align 2\n\t"); /* pad out section */
-#endif /* __linux__ */
-
__asm__(".text");
__asm__("x86_current_tls:\n\t"
diff --git a/mesalib/src/mapi/mapi/entry_x86_tsd.h b/mesalib/src/mapi/entry_x86_tsd.h
index c479c199e..c479c199e 100644
--- a/mesalib/src/mapi/mapi/entry_x86_tsd.h
+++ b/mesalib/src/mapi/entry_x86_tsd.h
diff --git a/mesalib/src/mapi/glapi/Makefile.am b/mesalib/src/mapi/glapi/Makefile.am
index bdb527d5c..1698d1474 100644
--- a/mesalib/src/mapi/glapi/Makefile.am
+++ b/mesalib/src/mapi/glapi/Makefile.am
@@ -20,8 +20,8 @@
# IN THE SOFTWARE.
TOP = $(top_srcdir)
-include sources.mak
-include ../mapi/sources.mak
+include Makefile.sources
+include ../Makefile.sources
AM_CPPFLAGS = \
$(DEFINES) \
diff --git a/mesalib/src/mapi/glapi/sources.mak b/mesalib/src/mapi/glapi/Makefile.sources
index aa8a4d40a..58d28c52c 100644
--- a/mesalib/src/mapi/glapi/sources.mak
+++ b/mesalib/src/mapi/glapi/Makefile.sources
@@ -1,4 +1,4 @@
-# src/mapi/glapi/sources.mak
+# src/mapi/glapi/Makefile.sources
GLAPI_SOURCES = \
glapi_dispatch.c \
diff --git a/mesalib/src/mapi/glapi/SConscript b/mesalib/src/mapi/glapi/SConscript
index 00cce3e7f..c4ac080aa 100644
--- a/mesalib/src/mapi/glapi/SConscript
+++ b/mesalib/src/mapi/glapi/SConscript
@@ -43,13 +43,14 @@ mapi_sources = [
'u_execmem.c',
]
for s in mapi_sources:
- o = env.SharedObject(s[:-2], '../mapi/' + s)
+ o = env.SharedObject(s[:-2], '../' + s)
glapi_sources.append(o)
#
# Assembly sources
#
-if env['gcc'] and env['platform'] not in ('cygwin', 'darwin', 'windows'):
+if (env['gcc'] or env['clang']) and \
+ env['platform'] not in ('cygwin', 'darwin', 'windows'):
GLAPI = '#src/mapi/glapi/'
if env['machine'] == 'x86':
@@ -94,11 +95,6 @@ if env['gcc'] and env['platform'] not in ('cygwin', 'darwin', 'windows'):
else:
pass
-if env['toolchain'] == 'crossmingw':
- # compile these files without -gstabs option
- glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_dispatch.c")
- glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_getproc.c")
-
glapi = env.ConvenienceLibrary(
target = 'glapi',
source = glapi_sources,
diff --git a/mesalib/src/mapi/glapi/gen/GL3x.xml b/mesalib/src/mapi/glapi/gen/GL3x.xml
index c17a64402..5078f7b6d 100644
--- a/mesalib/src/mapi/glapi/gen/GL3x.xml
+++ b/mesalib/src/mapi/glapi/gen/GL3x.xml
@@ -424,26 +424,26 @@
<function name="Uniform1uiv" es2="3.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLuint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLuint *" count="count"/>
</function>
<function name="Uniform2uiv" es2="3.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLuint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLuint *" count="count" count_scale="2"/>
</function>
<function name="Uniform3uiv" es2="3.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLuint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLuint *" count="count" count_scale="3"/>
</function>
<function name="Uniform4uiv" es2="3.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLuint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLuint *" count="count" count_scale="4"/>
</function>
<!-- These functions alias ones from GL_EXT_texture_integer -->
@@ -607,7 +607,7 @@
<param name="params" type="GLint64 *"/>
</function>
- <function name="FramebufferTexture" offset="assign" exec="skip">
+ <function name="FramebufferTexture" offset="assign">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="texture" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/Makefile.am b/mesalib/src/mapi/glapi/gen/Makefile.am
index 36e47e21e..97200598e 100644
--- a/mesalib/src/mapi/glapi/gen/Makefile.am
+++ b/mesalib/src/mapi/glapi/gen/Makefile.am
@@ -20,7 +20,7 @@ XORG_INDENT_FLAGS = -linux -bad -bap -blf -bli0 -cbi0 -cdw -nce -cs -i4 -lc80 -p
MESA_DIR = $(top_srcdir)/src/mesa
MESA_GLAPI_DIR = $(top_srcdir)/src/mapi/glapi
-MESA_MAPI_DIR = $(top_srcdir)/src/mapi/mapi
+MESA_MAPI_DIR = $(top_srcdir)/src/mapi
MESA_GLX_DIR = $(top_srcdir)/src/glx
MESA_GLAPI_OUTPUTS = \
diff --git a/mesalib/src/mapi/glapi/gen/es_EXT.xml b/mesalib/src/mapi/glapi/gen/es_EXT.xml
index ff378acf1..f412333df 100644
--- a/mesalib/src/mapi/glapi/gen/es_EXT.xml
+++ b/mesalib/src/mapi/glapi/gen/es_EXT.xml
@@ -689,22 +689,25 @@
<!-- 71. GL_OES_vertex_array_object -->
<category name="GL_OES_vertex_array_object" number="71">
- <function name="BindVertexArrayOES" alias="BindVertexArray" es2="2.0">
+ <function name="BindVertexArrayOES" alias="BindVertexArray"
+ static_dispatch="false" es2="2.0">
<param name="array" type="GLuint"/>
</function>
<function name="DeleteVertexArraysOES" alias="DeleteVertexArrays"
- es2="2.0">
+ static_dispatch="false" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="const GLuint *" count="n"/>
</function>
- <function name="GenVertexArraysOES" alias="GenVertexArrays" es2="2.0">
+ <function name="GenVertexArraysOES" alias="GenVertexArrays"
+ static_dispatch="false" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="GLuint *" output="true" count="n"/>
</function>
- <function name="IsVertexArrayOES" alias="IsVertexArray" es2="2.0">
+ <function name="IsVertexArrayOES" alias="IsVertexArray"
+ static_dispatch="false" es2="2.0">
<param name="array" type="GLuint"/>
<return type="GLboolean"/>
</function>
@@ -779,7 +782,8 @@
<size name="Get" mode="get"/>
</enum>
- <function name="DrawBuffersNV" alias="DrawBuffers" es2="2.0">
+ <function name="DrawBuffersNV" alias="DrawBuffers"
+ static_dispatch="false" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="bufs" type="const GLenum *" count="n"/>
</function>
@@ -787,7 +791,8 @@
<!-- 93. GL_NV_read_buffer -->
<category name="GL_NV_read_buffer">
- <function name="ReadBufferNV" alias="ReadBuffer" es2="2.0">
+ <function name="ReadBufferNV" alias="ReadBuffer"
+ static_dispatch="false" es2="2.0">
<param name="mode" type="GLenum"/>
</function>
</category>
@@ -815,8 +820,8 @@
<enum name="MAP_FLUSH_EXPLICIT_BIT_EXT" value="0x0010"/>
<enum name="MAP_UNSYNCHRONIZED_BIT_EXT" value="0x0020"/>
- <function name="MapBufferRangeEXT" alias="MapBufferRange" es1="1.0"
- es2="2.0">
+ <function name="MapBufferRangeEXT" alias="MapBufferRange"
+ static_dispatch="false" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="size" type="GLsizeiptr"/>
@@ -825,7 +830,7 @@
</function>
<function name="FlushMappedBufferRangeEXT" alias="FlushMappedBufferRange"
- es1="1.0" es2="2.0">
+ static_dispatch="false" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="length" type="GLsizeiptr"/>
diff --git a/mesalib/src/mapi/glapi/gen/gl_API.xml b/mesalib/src/mapi/glapi/gen/gl_API.xml
index df9592477..f7257978f 100644
--- a/mesalib/src/mapi/glapi/gen/gl_API.xml
+++ b/mesalib/src/mapi/glapi/gen/gl_API.xml
@@ -5685,83 +5685,83 @@
<function name="Uniform1fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLfloat *" count="count"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform2fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="2"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform3fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="3"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform4fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="4"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform1iv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLint *" count="count"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform2iv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLint *" count="count" count_scale="2"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform3iv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLint *" count="count" count_scale="3"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="Uniform4iv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
- <param name="value" type="const GLint *"/>
+ <param name="count" type="GLsizei" counter="true"/>
+ <param name="value" type="const GLint *" count="count" count_scale="4"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix2fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="4"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix3fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="9"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix4fv" es2="2.0" offset="assign">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="16"/>
<glx ignore="true"/>
<glx ignore="true"/>
</function>
@@ -6004,44 +6004,44 @@
<function name="UniformMatrix2x3fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix3x2fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix2x4fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix4x2fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="8"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix3x4fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="12"/>
<glx ignore="true"/>
</function>
<function name="UniformMatrix4x3fv" offset="assign" es2="3.0">
<param name="location" type="GLint"/>
- <param name="count" type="GLsizei"/>
+ <param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
- <param name="value" type="const GLfloat *"/>
+ <param name="value" type="const GLfloat *" count="count" count_scale="12"/>
<glx ignore="true"/>
</function>
@@ -7656,8 +7656,8 @@
<function name="BufferDataARB" alias="BufferData">
<param name="target" type="GLenum"/>
- <param name="size" type="GLsizeiptrARB"/>
- <param name="data" type="const GLvoid *"/>
+ <param name="size" type="GLsizeiptrARB" counter="true"/>
+ <param name="data" type="const GLvoid *" count="size"/>
<param name="usage" type="GLenum"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/gl_XML.py b/mesalib/src/mapi/glapi/gen/gl_XML.py
index 227e9fcd9..3bbc79439 100644
--- a/mesalib/src/mapi/glapi/gen/gl_XML.py
+++ b/mesalib/src/mapi/glapi/gen/gl_XML.py
@@ -802,6 +802,8 @@ class gl_function( gl_item ):
comma = ""
for p in self.parameterIterator():
+ if p.is_padding:
+ continue
p_string = p_string + comma + p.name
comma = ", "
diff --git a/mesalib/src/mapi/glapi/gen/gl_enums.py b/mesalib/src/mapi/glapi/gen/gl_enums.py
index 0bf8b0a9c..806d38445 100644
--- a/mesalib/src/mapi/glapi/gen/gl_enums.py
+++ b/mesalib/src/mapi/glapi/gen/gl_enums.py
@@ -43,7 +43,6 @@ class PrintGlEnums(gl_XML.gl_print_base):
def printRealHeader(self):
print '#include "main/glheader.h"'
- print '#include "main/mfeatures.h"'
print '#include "main/enums.h"'
print '#include "main/imports.h"'
print '#include "main/mtypes.h"'
@@ -115,7 +114,7 @@ const char *_mesa_lookup_enum_by_nr( int nr )
/**
* Primitive names
*/
-static const char *prim_names[PRIM_UNKNOWN + 1] = {
+static const char *prim_names[PRIM_MAX+3] = {
"GL_POINTS",
"GL_LINES",
"GL_LINE_LOOP",
@@ -126,8 +125,11 @@ static const char *prim_names[PRIM_UNKNOWN + 1] = {
"GL_QUADS",
"GL_QUAD_STRIP",
"GL_POLYGON",
+ "GL_LINES_ADJACENCY",
+ "GL_LINE_STRIP_ADJACENCY",
+ "GL_TRIANGLES_ADJACENCY",
+ "GL_TRIANGLE_STRIP_ADJACENCY",
"outside begin/end",
- "inside unknown primitive",
"unknown state"
};
diff --git a/mesalib/src/mapi/glapi/gen/gl_genexec.py b/mesalib/src/mapi/glapi/gen/gl_genexec.py
index a85b4471a..e91d4e9ac 100644
--- a/mesalib/src/mapi/glapi/gen/gl_genexec.py
+++ b/mesalib/src/mapi/glapi/gen/gl_genexec.py
@@ -44,7 +44,6 @@ header = """/**
*/
-#include "main/mfeatures.h"
#include "main/accum.h"
#include "main/api_loopback.h"
#include "main/api_exec.h"
@@ -110,6 +109,7 @@ header = """/**
#include "main/syncobj.h"
#include "main/formatquery.h"
#include "main/dispatch.h"
+#include "vbo/vbo.h"
/**
@@ -129,6 +129,8 @@ _mesa_initialize_exec_table(struct gl_context *ctx)
assert(exec != NULL);
assert(ctx->Version > 0);
+
+ vbo_initialize_exec_dispatch(ctx, exec);
"""
diff --git a/mesalib/src/mapi/glapi/gen/gl_table.py b/mesalib/src/mapi/glapi/gen/gl_table.py
index 382eaafd9..fd384689f 100644
--- a/mesalib/src/mapi/glapi/gen/gl_table.py
+++ b/mesalib/src/mapi/glapi/gen/gl_table.py
@@ -97,12 +97,6 @@ class PrintRemapTable(gl_XML.gl_print_base):
* can SET_FuncName, are used to get and set the dispatch pointer for the
* named function in the specified dispatch table.
*/
-
-/* GLXEXT is defined when building the GLX extension in the xserver.
- */
-#if !defined(GLXEXT)
-#include "main/mfeatures.h"
-#endif
"""
return
@@ -147,17 +141,6 @@ class PrintRemapTable(gl_XML.gl_print_base):
for f, index in abi_functions:
print '#define _gloffset_%s %d' % (f.name, f.offset)
- print ''
- print '#if !FEATURE_remap_table'
- print ''
-
- for f, index in functions:
- print '#define _gloffset_%s %d' % (f.name, f.offset)
-
- print ''
- print '#else /* !FEATURE_remap_table */'
- print ''
-
if self.es:
remap_table = "esLocalRemapTable"
@@ -180,8 +163,6 @@ class PrintRemapTable(gl_XML.gl_print_base):
print '#define _gloffset_%s %s[%s_remap_index]' % (f.name, remap_table, f.name)
print ''
- print '#endif /* !FEATURE_remap_table */'
- print ''
for f, index in abi_functions + functions:
arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
@@ -209,12 +190,10 @@ class PrintRemapTable(gl_XML.gl_print_base):
print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name)
print ''
- print '#if FEATURE_remap_table'
for f in alias_functions:
for name in f.entry_points:
if name != f.name:
print '#define %s_remap_index %s_remap_index' % (name, f.name)
- print '#endif /* FEATURE_remap_table */'
print ''
return
diff --git a/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py b/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
index a3548c295..19e0e15b0 100644
--- a/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
+++ b/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
@@ -181,19 +181,6 @@ class PrintGenericStubs(gl_XML.gl_print_base):
def printRealFooter(self):
print ''
- print '#if defined(GLX_USE_TLS) && defined(__linux__)'
- print ' .section ".note.ABI-tag", "a"'
- print ' .p2align 2'
- print ' .long 1f - 0f /* name length */'
- print ' .long 3f - 2f /* data length */'
- print ' .long 1 /* note length */'
- print '0: .asciz "GNU" /* vendor name */'
- print '1: .p2align 2'
- print '2: .long 0 /* note data: the ABI tag */'
- print ' .long 2,4,20 /* Minimum kernel version w/TLS */'
- print '3: .p2align 2 /* pad out section */'
- print '#endif /* GLX_USE_TLS */'
- print ''
print '#if defined (__ELF__) && defined (__linux__)'
print ' .section .note.GNU-stack,"",%progbits'
print '#endif'
diff --git a/mesalib/src/mapi/glapi/gen/gl_x86_asm.py b/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
index 8b0f6ee24..919bbc032 100644
--- a/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
+++ b/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
@@ -189,19 +189,6 @@ class PrintGenericStubs(gl_XML.gl_print_base):
print '\t\tALIGNTEXT16'
print 'GLNAME(gl_dispatch_functions_end):'
print ''
- print '#if defined(GLX_USE_TLS) && defined(__linux__)'
- print ' .section ".note.ABI-tag", "a"'
- print ' .p2align 2'
- print ' .long 1f - 0f /* name length */'
- print ' .long 3f - 2f /* data length */'
- print ' .long 1 /* note length */'
- print '0: .asciz "GNU" /* vendor name */'
- print '1: .p2align 2'
- print '2: .long 0 /* note data: the ABI tag */'
- print ' .long 2,4,20 /* Minimum kernel version w/TLS */'
- print '3: .p2align 2 /* pad out section */'
- print '#endif /* GLX_USE_TLS */'
- print ''
print '#if defined (__ELF__) && defined (__linux__)'
print ' .section .note.GNU-stack,"",%progbits'
print '#endif'
diff --git a/mesalib/src/mapi/glapi/gen/glapi_gen.mk b/mesalib/src/mapi/glapi/gen/glapi_gen.mk
index f65286fbd..242ae5fd9 100644
--- a/mesalib/src/mapi/glapi/gen/glapi_gen.mk
+++ b/mesalib/src/mapi/glapi/gen/glapi_gen.mk
@@ -4,7 +4,7 @@ glapi_gen_common_deps := \
$(wildcard $(top_srcdir)/src/mapi/glapi/gen/*.xml) \
$(wildcard $(top_srcdir)/src/mapi/glapi/gen/*.py)
-glapi_gen_mapi_script := $(top_srcdir)/src/mapi/mapi/mapi_abi.py
+glapi_gen_mapi_script := $(top_srcdir)/src/mapi/mapi_abi.py
glapi_gen_mapi_deps := \
$(glapi_gen_mapi_script) \
$(glapi_gen_common_deps)
diff --git a/mesalib/src/mapi/glapi/gen/mesadef.py b/mesalib/src/mapi/glapi/gen/mesadef.py
index 473baaee5..eefda7643 100644
--- a/mesalib/src/mapi/glapi/gen/mesadef.py
+++ b/mesalib/src/mapi/glapi/gen/mesadef.py
@@ -19,9 +19,10 @@
# 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
-# BRIAN PAUL 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.
+# 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.
# Generate the mesa.def file for Windows.
diff --git a/mesalib/src/mapi/glapi/glapi.c b/mesalib/src/mapi/glapi/glapi.c
index f7655c558..18a7d31a7 100644
--- a/mesalib/src/mapi/glapi/glapi.c
+++ b/mesalib/src/mapi/glapi/glapi.c
@@ -27,7 +27,7 @@
*/
#include "glapi/glapi.h"
-#include "mapi/u_current.h"
+#include "u_current.h"
/*
* Global variables, _glapi_get_context, and _glapi_get_dispatch are defined in
diff --git a/mesalib/src/mapi/glapi/glapi.h b/mesalib/src/mapi/glapi/glapi.h
index f6854754b..bacc4c5f6 100644
--- a/mesalib/src/mapi/glapi/glapi.h
+++ b/mesalib/src/mapi/glapi/glapi.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mapi/glapi/glapi_dispatch.c b/mesalib/src/mapi/glapi/glapi_dispatch.c
index be65ebedd..7f8056242 100644
--- a/mesalib/src/mapi/glapi/glapi_dispatch.c
+++ b/mesalib/src/mapi/glapi/glapi_dispatch.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mapi/glapi/glapi_entrypoint.c b/mesalib/src/mapi/glapi/glapi_entrypoint.c
index 7a0eb3537..6b03548fe 100644
--- a/mesalib/src/mapi/glapi/glapi_entrypoint.c
+++ b/mesalib/src/mapi/glapi/glapi_entrypoint.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -30,7 +31,7 @@
#include "glapi/glapi_priv.h"
-#include "mapi/u_execmem.h"
+#include "u_execmem.h"
#ifdef USE_X86_ASM
diff --git a/mesalib/src/mapi/glapi/glapi_getproc.c b/mesalib/src/mapi/glapi/glapi_getproc.c
index f976d5808..3cbd68fda 100644
--- a/mesalib/src/mapi/glapi/glapi_getproc.c
+++ b/mesalib/src/mapi/glapi/glapi_getproc.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mapi/glapi/glapi_nop.c b/mesalib/src/mapi/glapi/glapi_nop.c
index 69b1ae6dd..bdd1786fe 100644
--- a/mesalib/src/mapi/glapi/glapi_nop.c
+++ b/mesalib/src/mapi/glapi/glapi_nop.c
@@ -18,9 +18,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mapi/glapi/glapi_priv.h b/mesalib/src/mapi/glapi/glapi_priv.h
index 3ab553a2b..ea32f302f 100644
--- a/mesalib/src/mapi/glapi/glapi_priv.h
+++ b/mesalib/src/mapi/glapi/glapi_priv.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mapi/glapi/glthread.h b/mesalib/src/mapi/glapi/glthread.h
index 1c3f4e2bf..2399abb2b 100644
--- a/mesalib/src/mapi/glapi/glthread.h
+++ b/mesalib/src/mapi/glapi/glthread.h
@@ -1,7 +1,7 @@
#ifndef GLTHREAD_H
#define GLTHREAD_H
-#include "mapi/u_thread.h"
+#include "u_thread.h"
#ifdef __cplusplus
extern "C" {
diff --git a/mesalib/src/mapi/mapi/mapi.c b/mesalib/src/mapi/mapi.c
index b471c40b1..b471c40b1 100644
--- a/mesalib/src/mapi/mapi/mapi.c
+++ b/mesalib/src/mapi/mapi.c
diff --git a/mesalib/src/mapi/mapi/mapi.h b/mesalib/src/mapi/mapi.h
index c7e43e22e..c7e43e22e 100644
--- a/mesalib/src/mapi/mapi/mapi.h
+++ b/mesalib/src/mapi/mapi.h
diff --git a/mesalib/src/mapi/mapi/mapi_abi.py b/mesalib/src/mapi/mapi_abi.py
index c645c02f9..6bfcfa9af 100644
--- a/mesalib/src/mapi/mapi/mapi_abi.py
+++ b/mesalib/src/mapi/mapi_abi.py
@@ -29,7 +29,7 @@
import sys
# make it possible to import glapi
import os
-GLAPI = os.path.join(".", os.path.dirname(sys.argv[0]), "../glapi/gen")
+GLAPI = os.path.join(".", os.path.dirname(sys.argv[0]), "glapi/gen")
sys.path.append(GLAPI)
import re
diff --git a/mesalib/src/mapi/mapi/mapi_glapi.c b/mesalib/src/mapi/mapi_glapi.c
index 4627c4de0..a6838ce61 100644
--- a/mesalib/src/mapi/mapi/mapi_glapi.c
+++ b/mesalib/src/mapi/mapi_glapi.c
@@ -29,9 +29,9 @@
#include <string.h>
#include "glapi/glapi.h"
-#include "mapi/u_current.h"
-#include "mapi/table.h" /* for MAPI_TABLE_NUM_SLOTS */
-#include "mapi/stub.h"
+#include "u_current.h"
+#include "table.h" /* for MAPI_TABLE_NUM_SLOTS */
+#include "stub.h"
/*
* Global variables, _glapi_get_context, and _glapi_get_dispatch are defined in
diff --git a/mesalib/src/mapi/mapi/mapi_tmp.h b/mesalib/src/mapi/mapi_tmp.h
index f326b4a4e..f326b4a4e 100644
--- a/mesalib/src/mapi/mapi/mapi_tmp.h
+++ b/mesalib/src/mapi/mapi_tmp.h
diff --git a/mesalib/src/mapi/mapi/stub.c b/mesalib/src/mapi/stub.c
index 688dc8143..688dc8143 100644
--- a/mesalib/src/mapi/mapi/stub.c
+++ b/mesalib/src/mapi/stub.c
diff --git a/mesalib/src/mapi/mapi/stub.h b/mesalib/src/mapi/stub.h
index 98e2553ec..98e2553ec 100644
--- a/mesalib/src/mapi/mapi/stub.h
+++ b/mesalib/src/mapi/stub.h
diff --git a/mesalib/src/mapi/mapi/table.c b/mesalib/src/mapi/table.c
index 9bb9f654a..9bb9f654a 100644
--- a/mesalib/src/mapi/mapi/table.c
+++ b/mesalib/src/mapi/table.c
diff --git a/mesalib/src/mapi/mapi/table.h b/mesalib/src/mapi/table.h
index d84523f77..d84523f77 100644
--- a/mesalib/src/mapi/mapi/table.h
+++ b/mesalib/src/mapi/table.h
diff --git a/mesalib/src/mapi/mapi/u_compiler.h b/mesalib/src/mapi/u_compiler.h
index f376e97a0..f376e97a0 100644
--- a/mesalib/src/mapi/mapi/u_compiler.h
+++ b/mesalib/src/mapi/u_compiler.h
diff --git a/mesalib/src/mapi/mapi/u_current.c b/mesalib/src/mapi/u_current.c
index d902375f8..344344939 100644
--- a/mesalib/src/mapi/mapi/u_current.c
+++ b/mesalib/src/mapi/u_current.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mapi/mapi/u_current.h b/mesalib/src/mapi/u_current.h
index f9cffd8c3..f9cffd8c3 100644
--- a/mesalib/src/mapi/mapi/u_current.h
+++ b/mesalib/src/mapi/u_current.h
diff --git a/mesalib/src/mapi/mapi/u_execmem.c b/mesalib/src/mapi/u_execmem.c
index e5072e06e..b6751edb5 100644
--- a/mesalib/src/mapi/mapi/u_execmem.c
+++ b/mesalib/src/mapi/u_execmem.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -46,7 +47,7 @@ static unsigned int head = 0;
static unsigned char *exec_mem = (unsigned char *)0;
-#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun)
+#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun) || defined(__HAIKU__)
#include <unistd.h>
#include <sys/mman.h>
diff --git a/mesalib/src/mapi/mapi/u_execmem.h b/mesalib/src/mapi/u_execmem.h
index 13fff8df2..13fff8df2 100644
--- a/mesalib/src/mapi/mapi/u_execmem.h
+++ b/mesalib/src/mapi/u_execmem.h
diff --git a/mesalib/src/mapi/mapi/u_macros.h b/mesalib/src/mapi/u_macros.h
index 72345b5f1..72345b5f1 100644
--- a/mesalib/src/mapi/mapi/u_macros.h
+++ b/mesalib/src/mapi/u_macros.h
diff --git a/mesalib/src/mapi/mapi/u_thread.h b/mesalib/src/mapi/u_thread.h
index a5e504370..2f8154373 100644
--- a/mesalib/src/mapi/mapi/u_thread.h
+++ b/mesalib/src/mapi/u_thread.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/Android.gen.mk b/mesalib/src/mesa/Android.gen.mk
index 35f00da09..c6280f5cb 100644
--- a/mesalib/src/mesa/Android.gen.mk
+++ b/mesalib/src/mesa/Android.gen.mk
@@ -111,8 +111,7 @@ $(intermediates)/main/api_exec.c: $(dispatch_deps)
$(call es-gen)
GET_HASH_GEN := $(LOCAL_PATH)/main/get_hash_generator.py
-GET_HASH_GEN_FLAGS := $(patsubst %,-a %,$(MESA_ENABLED_APIS))
$(intermediates)/main/get_hash.h: $(glapi)/gl_and_es_API.xml \
$(LOCAL_PATH)/main/get_hash_params.py $(GET_HASH_GEN)
- @$(MESA_PYTHON2) $(GET_HASH_GEN) $(GET_HASH_GEN_FLAGS) -f $< > $@
+ @$(MESA_PYTHON2) $(GET_HASH_GEN) -f $< > $@
diff --git a/mesalib/src/mesa/Android.libmesa_dricore.mk b/mesalib/src/mesa/Android.libmesa_dricore.mk
index 093d7a189..00c06943c 100644
--- a/mesalib/src/mesa/Android.libmesa_dricore.mk
+++ b/mesalib/src/mesa/Android.libmesa_dricore.mk
@@ -31,7 +31,7 @@ LOCAL_PATH := $(call my-dir)
# Import the following variables:
# MESA_FILES
# X86_FILES
-include $(LOCAL_PATH)/sources.mak
+include $(LOCAL_PATH)/Makefile.sources
include $(CLEAR_VARS)
diff --git a/mesalib/src/mesa/Android.libmesa_st_mesa.mk b/mesalib/src/mesa/Android.libmesa_st_mesa.mk
index 79914caf1..e7203c41d 100644
--- a/mesalib/src/mesa/Android.libmesa_st_mesa.mk
+++ b/mesalib/src/mesa/Android.libmesa_st_mesa.mk
@@ -31,7 +31,7 @@ LOCAL_PATH := $(call my-dir)
# Import variables:
# MESA_GALLIUM_FILES.
# X86_FILES
-include $(LOCAL_PATH)/sources.mak
+include $(LOCAL_PATH)/Makefile.sources
include $(CLEAR_VARS)
diff --git a/mesalib/src/mesa/Makefile.am b/mesalib/src/mesa/Makefile.am
index c341c48e7..d5f5f5b86 100644
--- a/mesalib/src/mesa/Makefile.am
+++ b/mesalib/src/mesa/Makefile.am
@@ -23,7 +23,19 @@ if NEED_LIBDRICORE
DRICORE_SUBDIR = libdricore
endif
-SUBDIRS = program x86 x86-64 . $(DRICORE_SUBDIR) drivers
+SUBDIRS = program x86 x86-64 . $(DRICORE_SUBDIR)
+
+if HAVE_X11_DRIVER
+SUBDIRS += drivers/x11
+endif
+
+if HAVE_DRI
+SUBDIRS += drivers/dri
+endif
+
+if HAVE_OSMESA
+SUBDIRS += drivers/osmesa
+endif
gldir = $(includedir)/GL
gl_HEADERS = $(top_srcdir)/include/GL/*.h
@@ -59,14 +71,12 @@ CLEANFILES = \
git_sha1.h.tmp
GET_HASH_GEN = main/get_hash_generator.py
-GET_HASH_GEN_FLAGS := $(patsubst -DFEATURE_%=1,-a %, \
- $(patsubst -DFEATURE_%=0,,$(API_DEFINES)))
main/get_hash.h: $(GLAPI)/gl_and_es_API.xml main/get_hash_params.py \
$(GET_HASH_GEN) Makefile
$(AM_V_GEN)set -e; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/$(GET_HASH_GEN) \
- $(GET_HASH_GEN_FLAGS) -f $< > $@.tmp; \
+ $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/$(GET_HASH_GEN) \
+ -f $< > $@.tmp; \
mv $@.tmp $@;
noinst_LTLIBRARIES =
@@ -81,9 +91,9 @@ endif
SRCDIR = $(top_srcdir)/src/mesa/
BUILDDIR = $(top_builddir)/src/mesa/
-include sources.mak
+include Makefile.sources
-AM_CPPFLAGS = $(API_DEFINES) $(DEFINES) $(INCLUDE_DIRS)
+AM_CPPFLAGS = $(DEFINES) $(INCLUDE_DIRS)
AM_CFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CFLAGS)
AM_CXXFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CXXFLAGS)
diff --git a/mesalib/src/mesa/sources.mak b/mesalib/src/mesa/Makefile.sources
index 3c881082c..a5c1f5dea 100644
--- a/mesalib/src/mesa/sources.mak
+++ b/mesalib/src/mesa/Makefile.sources
@@ -224,6 +224,7 @@ STATETRACKER_FILES = \
$(SRCDIR)state_tracker/st_cb_eglimage.c \
$(SRCDIR)state_tracker/st_cb_fbo.c \
$(SRCDIR)state_tracker/st_cb_feedback.c \
+ $(SRCDIR)state_tracker/st_cb_msaa.c \
$(SRCDIR)state_tracker/st_cb_program.c \
$(SRCDIR)state_tracker/st_cb_queryobj.c \
$(SRCDIR)state_tracker/st_cb_rasterpos.c \
diff --git a/mesalib/src/mesa/SConscript b/mesalib/src/mesa/SConscript
index ca9b70bad..0f1543802 100644
--- a/mesalib/src/mesa/SConscript
+++ b/mesalib/src/mesa/SConscript
@@ -31,7 +31,6 @@ if env['platform'] == 'windows':
env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS'])
else:
env.Append(CPPDEFINES = [
- 'IN_DRI_DRIVER', # enable the remap table (for DRI drivers)
('HAVE_DLOPEN', '1'),
])
@@ -263,6 +262,7 @@ statetracker_sources = [
'state_tracker/st_cb_eglimage.c',
'state_tracker/st_cb_fbo.c',
'state_tracker/st_cb_feedback.c',
+ 'state_tracker/st_cb_msaa.c',
'state_tracker/st_cb_program.c',
'state_tracker/st_cb_queryobj.c',
'state_tracker/st_cb_rasterpos.c',
@@ -340,22 +340,18 @@ if env['gles']:
enabled_apis += ['ES1', 'ES2']
-env.Append(CPPDEFINES = ["FEATURE_%s=1" % api for api in enabled_apis])
-
-get_hash_gen_opts = ' '.join(["-a %s" % api for api in enabled_apis])
-
get_hash_header = env.CodeGenerate(
target = 'main/get_hash.h',
script = 'main/get_hash_generator.py',
source = GLAPI + 'gen/gl_and_es_API.xml',
- command = python_cmd + ' $SCRIPT ' + get_hash_gen_opts +
- ' -f $SOURCE > $TARGET'
+ command = python_cmd + ' $SCRIPT ' + ' -f $SOURCE > $TARGET'
)
#
# Assembly sources
#
-if env['gcc'] and env['platform'] not in ('cygwin', 'darwin', 'windows', 'haiku'):
+if (env['gcc'] or env['clang']) and \
+ env['platform'] not in ('cygwin', 'darwin', 'windows', 'haiku'):
if env['machine'] == 'x86':
env.Append(CPPDEFINES = [
'USE_X86_ASM',
diff --git a/mesalib/src/mesa/drivers/Makefile.am b/mesalib/src/mesa/drivers/Makefile.am
deleted file mode 100644
index 1bc74eadf..000000000
--- a/mesalib/src/mesa/drivers/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright © 2012 Intel Corporation
-#
-# 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.
-
-SUBDIRS = $(DRIVER_DIRS)
diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.c b/mesalib/src/mesa/drivers/common/driverfuncs.c
index a98dfc607..4f7696c4c 100644
--- a/mesalib/src/mesa/drivers/common/driverfuncs.c
+++ b/mesalib/src/mesa/drivers/common/driverfuncs.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -40,6 +41,7 @@
#include "main/texgetimage.h"
#include "main/teximage.h"
#include "main/texobj.h"
+#include "main/texstorage.h"
#include "main/texstore.h"
#include "main/bufferobj.h"
#include "main/fbobject.h"
@@ -209,7 +211,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
driver->EndCallList = NULL;
/* GL_ARB_texture_storage */
- driver->AllocTextureStorage = _swrast_AllocTextureStorage;
+ driver->AllocTextureStorage = _mesa_alloc_texture_storage;
/* GL_ARB_texture_multisample */
driver->GetSamplePosition = NULL;
diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.h b/mesalib/src/mesa/drivers/common/driverfuncs.h
index 212f30742..806c8b0af 100644
--- a/mesalib/src/mesa/drivers/common/driverfuncs.h
+++ b/mesalib/src/mesa/drivers/common/driverfuncs.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c
index e3ab82bfe..1250bd35c 100644
--- a/mesalib/src/mesa/drivers/common/meta.c
+++ b/mesalib/src/mesa/drivers/common/meta.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -3048,16 +3049,33 @@ _mesa_meta_check_generate_mipmap_fallback(struct gl_context *ctx, GLenum target,
GLenum status;
/* check for fallbacks */
- if (!ctx->Extensions.EXT_framebuffer_object ||
- target == GL_TEXTURE_3D ||
+ if (!ctx->Extensions.EXT_framebuffer_object) {
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() without FBOs\n");
+ return GL_TRUE;
+ }
+
+ if (target == GL_TEXTURE_3D ||
target == GL_TEXTURE_1D_ARRAY ||
target == GL_TEXTURE_2D_ARRAY) {
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() to %s target\n",
+ _mesa_lookup_enum_by_nr(target));
return GL_TRUE;
}
srcLevel = texObj->BaseLevel;
baseImage = _mesa_select_tex_image(ctx, texObj, target, srcLevel);
- if (!baseImage || _mesa_is_format_compressed(baseImage->TexFormat)) {
+ if (!baseImage) {
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() couldn't find base teximage\n");
+ return GL_TRUE;
+ }
+
+ if (_mesa_is_format_compressed(baseImage->TexFormat)) {
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() with %s format\n",
+ _mesa_get_format_name(baseImage->TexFormat));
return GL_TRUE;
}
@@ -3067,6 +3085,9 @@ _mesa_meta_check_generate_mipmap_fallback(struct gl_context *ctx, GLenum target,
* texture sample conversion. So we won't be able to generate the
* right colors when rendering. Need to use a fallback.
*/
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() of sRGB texture without "
+ "sRGB decode\n");
return GL_TRUE;
}
@@ -3103,6 +3124,8 @@ _mesa_meta_check_generate_mipmap_fallback(struct gl_context *ctx, GLenum target,
_mesa_BindFramebuffer(GL_FRAMEBUFFER_EXT, fboSave);
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
+ "glGenerateMipmap() got incomplete FBO\n");
return GL_TRUE;
}
@@ -3374,6 +3397,8 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
sizeof(struct vertex), OFFSET(x));
_mesa_VertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,
sizeof(struct vertex), OFFSET(tex));
+ _mesa_EnableVertexAttribArray(0);
+ _mesa_EnableVertexAttribArray(1);
}
/* Generate a fragment shader program appropriate for the texture target */
@@ -3445,8 +3470,6 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
_mesa_DeleteObjectARB(vs);
_mesa_BindAttribLocation(mipmap->ShaderProg, 0, "position");
_mesa_BindAttribLocation(mipmap->ShaderProg, 1, "texcoords");
- _mesa_EnableVertexAttribArray(0);
- _mesa_EnableVertexAttribArray(1);
link_program_with_debug(ctx, mipmap->ShaderProg);
sampler->shader_prog = mipmap->ShaderProg;
ralloc_free(mem_ctx);
@@ -3741,10 +3764,20 @@ get_temp_image_type(struct gl_context *ctx, gl_format format)
return datatype;
return GL_FLOAT;
}
- case GL_DEPTH_COMPONENT:
- return GL_UNSIGNED_INT;
- case GL_DEPTH_STENCIL:
- return GL_UNSIGNED_INT_24_8;
+ case GL_DEPTH_COMPONENT: {
+ GLenum datatype = _mesa_get_format_datatype(format);
+ if (datatype == GL_FLOAT)
+ return GL_FLOAT;
+ else
+ return GL_UNSIGNED_INT;
+ }
+ case GL_DEPTH_STENCIL: {
+ GLenum datatype = _mesa_get_format_datatype(format);
+ if (datatype == GL_FLOAT)
+ return GL_FLOAT_32_UNSIGNED_INT_24_8_REV;
+ else
+ return GL_UNSIGNED_INT_24_8;
+ }
default:
_mesa_problem(ctx, "Unexpected format %d in get_temp_image_type()",
baseFormat);
diff --git a/mesalib/src/mesa/drivers/common/meta.h b/mesalib/src/mesa/drivers/common/meta.h
index a6bdd3947..823be14c7 100644
--- a/mesalib/src/mesa/drivers/common/meta.h
+++ b/mesalib/src/mesa/drivers/common/meta.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/drivers/dri/common/Makefile.am b/mesalib/src/mesa/drivers/dri/common/Makefile.am
index dfc8f3b7a..ce4119d0f 100644
--- a/mesalib/src/mesa/drivers/dri/common/Makefile.am
+++ b/mesalib/src/mesa/drivers/dri/common/Makefile.am
@@ -27,7 +27,6 @@ AM_CFLAGS = \
-I$(top_srcdir)/src/mapi \
-I$(top_srcdir)/src/mesa/ \
$(DEFINES) \
- $(API_DEFINES) \
$(LIBDRM_CFLAGS) \
$(VISIBILITY_CFLAGS)
diff --git a/mesalib/src/mesa/drivers/dri/common/drisw_util.c b/mesalib/src/mesa/drivers/dri/common/drisw_util.c
index 6af101c31..89f03c310 100644
--- a/mesalib/src/mesa/drivers/dri/common/drisw_util.c
+++ b/mesalib/src/mesa/drivers/dri/common/drisw_util.c
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/drivers/dri/common/xmlpool.h b/mesalib/src/mesa/drivers/dri/common/xmlpool.h
index ffea43002..ebd4e7c86 100644
--- a/mesalib/src/mesa/drivers/dri/common/xmlpool.h
+++ b/mesalib/src/mesa/drivers/dri/common/xmlpool.h
@@ -60,6 +60,13 @@
#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"
diff --git a/mesalib/src/mesa/drivers/dri/common/xmlpool/t_options.h b/mesalib/src/mesa/drivers/dri/common/xmlpool/t_options.h
index 7b441c68f..ca4772003 100644
--- a/mesalib/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/mesalib/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -56,42 +56,42 @@ DRI_CONF_SECTION_BEGIN \
DRI_CONF_DESC(en,gettext("Debugging"))
#define DRI_CONF_NO_RAST(def) \
-DRI_CONF_OPT_BEGIN(no_rast,bool,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(performance_boxes,bool,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(always_flush_batch,bool,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(always_flush_cache,bool,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(disable_throttling,bool,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(force_glsl_extensions_warn,bool,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(disable_blend_func_extended,bool,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_DISABLE_GLSL_LINE_CONTINUATIONS(def) \
-DRI_CONF_OPT_BEGIN(disable_glsl_line_continuations,bool,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
@@ -105,7 +105,7 @@ DRI_CONF_SECTION_BEGIN \
DRI_CONF_DESC(en,gettext("Image Quality"))
#define DRI_CONF_EXCESS_MIPMAP(def) \
-DRI_CONF_OPT_BEGIN(excess_mipmap,bool,def) \
+DRI_CONF_OPT_BEGIN_B(excess_mipmap, def) \
DRI_CONF_DESC(en,"Enable extra mipmap level") \
DRI_CONF_OPT_END
@@ -129,12 +129,12 @@ DRI_CONF_OPT_BEGIN_V(def_max_anisotropy,float,def,range) \
DRI_CONF_OPT_END
#define DRI_CONF_NO_NEG_LOD_BIAS(def) \
-DRI_CONF_OPT_BEGIN(no_neg_lod_bias,bool,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(force_s3tc_enable,bool,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
@@ -171,7 +171,7 @@ DRI_CONF_OPT_BEGIN_V(dither_mode,enum,def,"0:2") \
DRI_CONF_OPT_END
#define DRI_CONF_FLOAT_DEPTH(def) \
-DRI_CONF_OPT_BEGIN(float_depth,bool,def) \
+DRI_CONF_OPT_BEGIN_B(float_depth, def) \
DRI_CONF_DESC(en,gettext("Floating point depth buffer")) \
DRI_CONF_OPT_END
@@ -257,7 +257,7 @@ 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(hyperz,bool,def) \
+DRI_CONF_OPT_BEGIN_B(hyperz, def) \
DRI_CONF_DESC(en,gettext("Use HyperZ to boost performance")) \
DRI_CONF_OPT_END
@@ -303,7 +303,7 @@ 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(arb_vertex_program,bool,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
@@ -317,6 +317,6 @@ DRI_CONF_SECTION_BEGIN \
DRI_CONF_DESC(en,gettext("Miscellaneous"))
#define DRI_CONF_ALWAYS_HAVE_DEPTH_BUFFER(def) \
-DRI_CONF_OPT_BEGIN(always_have_depth_buffer, bool, 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
diff --git a/mesalib/src/mesa/drivers/dri/swrast/Makefile.am b/mesalib/src/mesa/drivers/dri/swrast/Makefile.am
index 3e539073c..d3da19651 100644
--- a/mesalib/src/mesa/drivers/dri/swrast/Makefile.am
+++ b/mesalib/src/mesa/drivers/dri/swrast/Makefile.am
@@ -31,7 +31,6 @@ AM_CFLAGS = \
-I$(top_srcdir)/src/mesa/ \
-I$(top_srcdir)/src/mesa/drivers/dri/common \
$(DEFINES) \
- $(API_DEFINES) \
$(VISIBILITY_CFLAGS)
dridir = $(DRI_DRIVER_INSTALL_DIR)
diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast.c b/mesalib/src/mesa/drivers/dri/swrast/swrast.c
index b380de307..91bcc5944 100644
--- a/mesalib/src/mesa/drivers/dri/swrast/swrast.c
+++ b/mesalib/src/mesa/drivers/dri/swrast/swrast.c
@@ -14,9 +14,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h b/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h
index b25de931a..b51993c94 100644
--- a/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/accum.c b/mesalib/src/mesa/main/accum.c
index f5888017f..b4677397b 100644
--- a/mesalib/src/mesa/main/accum.c
+++ b/mesalib/src/mesa/main/accum.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "glheader.h"
@@ -30,7 +31,6 @@
#include "format_pack.h"
#include "imports.h"
#include "macros.h"
-#include "mfeatures.h"
#include "state.h"
#include "mtypes.h"
#include "main/dispatch.h"
diff --git a/mesalib/src/mesa/main/accum.h b/mesalib/src/mesa/main/accum.h
index 00c24b2db..7e4d9f6b9 100644
--- a/mesalib/src/mesa/main/accum.h
+++ b/mesalib/src/mesa/main/accum.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -38,7 +39,6 @@
#define ACCUM_H
#include "main/glheader.h"
-#include "main/mfeatures.h"
struct _glapi_table;
struct gl_context;
diff --git a/mesalib/src/mesa/main/api_arrayelt.c b/mesalib/src/mesa/main/api_arrayelt.c
index ea3361488..8e581c8d9 100644
--- a/mesalib/src/mesa/main/api_arrayelt.c
+++ b/mesalib/src/mesa/main/api_arrayelt.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -40,7 +41,6 @@
#include "context.h"
#include "imports.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "main/dispatch.h"
@@ -64,13 +64,19 @@ typedef struct {
AEattrib attribs[VERT_ATTRIB_MAX + 1];
GLuint NewState;
+ /* List of VBOs we need to map before executing ArrayElements */
struct gl_buffer_object *vbo[VERT_ATTRIB_MAX];
GLuint nr_vbos;
- GLboolean mapped_vbos;
-
+ GLboolean mapped_vbos; /**< Any currently mapped VBOs? */
} AEcontext;
-#define AE_CONTEXT(ctx) ((AEcontext *)(ctx)->aelt_context)
+
+/** Cast wrapper */
+static INLINE AEcontext *
+AE_CONTEXT(struct gl_context *ctx)
+{
+ return (AEcontext *) ctx->aelt_context;
+}
/*
@@ -78,7 +84,12 @@ typedef struct {
* in the range [0, 7]. Luckily these type tokens are sequentially
* numbered in gl.h, except for GL_DOUBLE.
*/
-#define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 )
+static INLINE int
+TYPE_IDX(GLenum t)
+{
+ return t == GL_DOUBLE ? 7 : t & 7;
+}
+
#define NUM_TYPES 8
@@ -1245,8 +1256,6 @@ VertexAttribI4uiv(GLuint index, const GLuint *v)
}
-
-
/*
* Array [unnormalized/normalized/integer][size][type] of VertexAttrib
* functions
@@ -1396,10 +1405,9 @@ static attrib_func AttribFuncsARB[3][4][NUM_TYPES] = {
}
};
-/**********************************************************************/
-
-GLboolean _ae_create_context( struct gl_context *ctx )
+GLboolean
+_ae_create_context(struct gl_context *ctx)
{
if (ctx->aelt_context)
return GL_TRUE;
@@ -1432,22 +1440,29 @@ GLboolean _ae_create_context( struct gl_context *ctx )
}
-void _ae_destroy_context( struct gl_context *ctx )
+void
+_ae_destroy_context(struct gl_context *ctx)
{
- if ( AE_CONTEXT( ctx ) ) {
+ if (AE_CONTEXT(ctx)) {
free(ctx->aelt_context);
ctx->aelt_context = NULL;
}
}
-static void check_vbo( AEcontext *actx,
- struct gl_buffer_object *vbo )
+
+/**
+ * Check if the given vertex buffer object exists and is not mapped.
+ * If so, add it to the list of buffers we must map before executing
+ * an glArrayElement call.
+ */
+static void
+check_vbo(AEcontext *actx, struct gl_buffer_object *vbo)
{
if (_mesa_is_bufferobj(vbo) && !_mesa_bufferobj_mapped(vbo)) {
GLuint i;
for (i = 0; i < actx->nr_vbos; i++)
- if (actx->vbo[i] == vbo)
- return;
+ if (actx->vbo[i] == vbo)
+ return; /* already in the list, we're done */
assert(actx->nr_vbos < VERT_ATTRIB_MAX);
actx->vbo[actx->nr_vbos++] = vbo;
}
@@ -1460,11 +1475,12 @@ static void check_vbo( AEcontext *actx,
* etc).
* Note: this may be called during display list construction.
*/
-static void _ae_update_state( struct gl_context *ctx )
+static void
+_ae_update_state(struct gl_context *ctx)
{
AEcontext *actx = AE_CONTEXT(ctx);
- AEarray *aa = actx->arrays;
- AEattrib *at = actx->attribs;
+ AEarray *aa = actx->arrays; /* non-indexed arrays (ex: glNormal) */
+ AEattrib *at = actx->attribs; /* indexed arrays (ex: glMultiTexCoord) */
GLuint i;
struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
@@ -1508,7 +1524,8 @@ static void _ae_update_state( struct gl_context *ctx )
aa++;
}
for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
- struct gl_client_array *attribArray = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(i)];
+ struct gl_client_array *attribArray =
+ &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(i)];
if (attribArray->Enabled) {
/* NOTE: we use generic glVertexAttribNV functions here.
* If we ever remove GL_NV_vertex_program this will have to change.
@@ -1524,9 +1541,10 @@ static void _ae_update_state( struct gl_context *ctx )
}
}
- /* generic vertex attribute arrays */
+ /* generic vertex attribute arrays */
for (i = 1; i < VERT_ATTRIB_GENERIC_MAX; i++) { /* skip zero! */
- struct gl_client_array *attribArray = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(i)];
+ struct gl_client_array *attribArray =
+ &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(i)];
if (attribArray->Enabled) {
GLint intOrNorm;
at->array = attribArray;
@@ -1580,11 +1598,17 @@ static void _ae_update_state( struct gl_context *ctx )
actx->NewState = 0;
}
-void _ae_map_vbos( struct gl_context *ctx )
+
+/**
+ * Before replaying glArrayElements calls we need to map (for reading) any
+ * VBOs referenced by the enabled vertex arrays.
+ */
+void
+_ae_map_vbos(struct gl_context *ctx)
{
AEcontext *actx = AE_CONTEXT(ctx);
GLuint i;
-
+
if (actx->mapped_vbos)
return;
@@ -1601,7 +1625,12 @@ void _ae_map_vbos( struct gl_context *ctx )
actx->mapped_vbos = GL_TRUE;
}
-void _ae_unmap_vbos( struct gl_context *ctx )
+
+/**
+ * Unmap VBOs
+ */
+void
+_ae_unmap_vbos(struct gl_context *ctx)
{
AEcontext *actx = AE_CONTEXT(ctx);
GLuint i;
@@ -1624,7 +1653,8 @@ void _ae_unmap_vbos( struct gl_context *ctx )
* for all enabled vertex arrays (for elt-th element).
* Note: this may be called during display list construction.
*/
-void GLAPIENTRY _ae_ArrayElement( GLint elt )
+void GLAPIENTRY
+_ae_ArrayElement(GLint elt)
{
GET_CURRENT_CONTEXT(ctx);
const AEcontext *actx = AE_CONTEXT(ctx);
@@ -1636,14 +1666,14 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
/* If PrimitiveRestart is enabled and the index is the RestartIndex
* then we call PrimitiveRestartNV and return.
*/
- if (ctx->Array._PrimitiveRestart && (elt == ctx->Array._RestartIndex)) {
+ if (ctx->Array.PrimitiveRestart && (elt == ctx->Array.RestartIndex)) {
CALL_PrimitiveRestartNV((struct _glapi_table *)disp, ());
return;
}
if (actx->NewState) {
assert(!actx->mapped_vbos);
- _ae_update_state( ctx );
+ _ae_update_state(ctx);
}
/* Determine if we need to map/unmap VBOs */
@@ -1651,13 +1681,13 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
if (do_map)
_ae_map_vbos(ctx);
-
+
/* emit generic attribute elements */
for (at = actx->attribs; at->func; at++) {
const GLubyte *src
= ADD_POINTERS(at->array->BufferObj->Pointer, at->array->Ptr)
+ elt * at->array->StrideB;
- at->func( at->index, src );
+ at->func(at->index, src);
}
/* emit conventional arrays elements */
@@ -1665,8 +1695,7 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
const GLubyte *src
= ADD_POINTERS(aa->array->BufferObj->Pointer, aa->array->Ptr)
+ elt * aa->array->StrideB;
- CALL_by_offset( disp, (array_func), aa->offset,
- ((const void *) src) );
+ CALL_by_offset(disp, (array_func), aa->offset, ((const void *) src));
}
if (do_map)
@@ -1674,16 +1703,16 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
}
-void _ae_invalidate_state( struct gl_context *ctx, GLuint new_state )
+void
+_ae_invalidate_state(struct gl_context *ctx, GLuint new_state)
{
AEcontext *actx = AE_CONTEXT(ctx);
-
/* Only interested in this subset of mesa state. Need to prune
* this down as both tnl/ and the drivers can raise statechanges
* for arcane reasons in the middle of seemingly atomic operations
* like DrawElements, over which we'd like to keep a known set of
- * arrays and vbo's mapped.
+ * arrays and vbo's mapped.
*
* Luckily, neither the drivers nor tnl muck with the state that
* concerns us here:
@@ -1696,8 +1725,9 @@ void _ae_invalidate_state( struct gl_context *ctx, GLuint new_state )
}
-void _mesa_install_arrayelt_vtxfmt(struct _glapi_table *disp,
- const GLvertexformat *vfmt)
+void
+_mesa_install_arrayelt_vtxfmt(struct _glapi_table *disp,
+ const GLvertexformat *vfmt)
{
SET_ArrayElement(disp, vfmt->ArrayElement);
}
diff --git a/mesalib/src/mesa/main/api_arrayelt.h b/mesalib/src/mesa/main/api_arrayelt.h
index 988703259..e250cb4c8 100644
--- a/mesalib/src/mesa/main/api_arrayelt.h
+++ b/mesalib/src/mesa/main/api_arrayelt.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -28,13 +29,8 @@
#define API_ARRAYELT_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
-#define _MESA_INIT_ARRAYELT_VTXFMT(vfmt, impl) \
- do { \
- (vfmt)->ArrayElement = impl ## ArrayElement; \
- } while (0)
extern GLboolean _ae_create_context( struct gl_context *ctx );
extern void _ae_destroy_context( struct gl_context *ctx );
diff --git a/mesalib/src/mesa/main/api_exec.h b/mesalib/src/mesa/main/api_exec.h
index 94f7f41c1..bcf461163 100644
--- a/mesalib/src/mesa/main/api_exec.h
+++ b/mesalib/src/mesa/main/api_exec.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/api_loopback.c b/mesalib/src/mesa/main/api_loopback.c
index 59d399b42..938e9b5c0 100644
--- a/mesalib/src/mesa/main/api_loopback.c
+++ b/mesalib/src/mesa/main/api_loopback.c
@@ -23,9 +23,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -36,7 +37,6 @@
#include "glapi/glapi.h"
#include "glapi/glthread.h"
#include "main/dispatch.h"
-#include "mfeatures.h"
#include "main/context.h"
/* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
diff --git a/mesalib/src/mesa/main/api_loopback.h b/mesalib/src/mesa/main/api_loopback.h
index c35d57bff..af6572d1b 100644
--- a/mesalib/src/mesa/main/api_loopback.h
+++ b/mesalib/src/mesa/main/api_loopback.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -28,14 +29,12 @@
#define API_LOOPBACK_H
#include "main/compiler.h"
-#include "main/mfeatures.h"
#include "main/glheader.h" // ?
#include "main/macros.h" // ?
#include "main/mtypes.h" // ?
#include "glapi/glapi.h" // ?
#include "glapi/glthread.h" // ?
#include "main/dispatch.h" // ?
-#include "main/mfeatures.h" // ?
#include "main/context.h" // ?
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/api_validate.c b/mesalib/src/mesa/main/api_validate.c
index 53b00211b..30a195350 100644
--- a/mesalib/src/mesa/main/api_validate.c
+++ b/mesalib/src/mesa/main/api_validate.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include <stdbool.h>
@@ -28,7 +29,6 @@
#include "bufferobj.h"
#include "context.h"
#include "imports.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "enums.h"
#include "vbo/vbo.h"
@@ -201,12 +201,11 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, GLenum type,
* Is 'mode' a valid value for glBegin(), glDrawArrays(), glDrawElements(),
* etc? The set of legal values depends on whether geometry shaders/programs
* are supported.
+ * Note: This may be called during display list compilation.
*/
-GLboolean
-_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
+bool
+_mesa_is_valid_prim_mode(struct gl_context *ctx, GLenum mode)
{
- bool valid_enum;
-
switch (mode) {
case GL_POINTS:
case GL_LINES:
@@ -215,24 +214,32 @@ _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
case GL_TRIANGLES:
case GL_TRIANGLE_STRIP:
case GL_TRIANGLE_FAN:
- valid_enum = true;
- break;
+ return true;
case GL_QUADS:
case GL_QUAD_STRIP:
case GL_POLYGON:
- valid_enum = (ctx->API == API_OPENGL_COMPAT);
- break;
+ return (ctx->API == API_OPENGL_COMPAT);
case GL_LINES_ADJACENCY:
case GL_LINE_STRIP_ADJACENCY:
case GL_TRIANGLES_ADJACENCY:
case GL_TRIANGLE_STRIP_ADJACENCY:
- valid_enum = _mesa_is_desktop_gl(ctx)
- && ctx->Extensions.ARB_geometry_shader4;
- break;
+ return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_geometry_shader4;
default:
- valid_enum = false;
- break;
+ return false;
}
+}
+
+
+/**
+ * Is 'mode' a valid value for glBegin(), glDrawArrays(), glDrawElements(),
+ * etc? Also, do additional checking related to transformation feedback.
+ * Note: this function cannot be called during glNewList(GL_COMPILE) because
+ * this code depends on current transform feedback state.
+ */
+GLboolean
+_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
+{
+ bool valid_enum = _mesa_is_valid_prim_mode(ctx, mode);
if (!valid_enum) {
_mesa_error(ctx, GL_INVALID_ENUM, "%s(mode=%x)", name, mode);
diff --git a/mesalib/src/mesa/main/api_validate.h b/mesalib/src/mesa/main/api_validate.h
index 0ca9c90d9..a5004b8a3 100644
--- a/mesalib/src/mesa/main/api_validate.h
+++ b/mesalib/src/mesa/main/api_validate.h
@@ -18,18 +18,18 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef API_VALIDATE_H
#define API_VALIDATE_H
-
+#include <stdbool.h>
#include "glheader.h"
-#include "mfeatures.h"
struct gl_buffer_object;
struct gl_context;
@@ -42,6 +42,9 @@ _mesa_max_buffer_index(struct gl_context *ctx, GLuint count, GLenum type,
struct gl_buffer_object *elementBuf);
+extern bool
+_mesa_is_valid_prim_mode(struct gl_context *ctx, GLenum mode);
+
extern GLboolean
_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name);
diff --git a/mesalib/src/mesa/main/arbprogram.c b/mesalib/src/mesa/main/arbprogram.c
index 5730ea495..327f582cb 100644
--- a/mesalib/src/mesa/main/arbprogram.c
+++ b/mesalib/src/mesa/main/arbprogram.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/main/arbprogram.h b/mesalib/src/mesa/main/arbprogram.h
index 4f40a70c5..2b31b9984 100644
--- a/mesalib/src/mesa/main/arbprogram.h
+++ b/mesalib/src/mesa/main/arbprogram.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/arrayobj.c b/mesalib/src/mesa/main/arrayobj.c
index ac3e7e666..34d50955f 100644
--- a/mesalib/src/mesa/main/arrayobj.c
+++ b/mesalib/src/mesa/main/arrayobj.c
@@ -19,10 +19,10 @@
* 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
- * BRIAN PAUL OR IBM 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.
+ * 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.
*/
@@ -44,7 +44,6 @@
#include "image.h"
#include "imports.h"
#include "context.h"
-#include "mfeatures.h"
#include "bufferobj.h"
#include "arrayobj.h"
#include "macros.h"
diff --git a/mesalib/src/mesa/main/arrayobj.h b/mesalib/src/mesa/main/arrayobj.h
index 0d58bb75a..d7ff35a56 100644
--- a/mesalib/src/mesa/main/arrayobj.h
+++ b/mesalib/src/mesa/main/arrayobj.h
@@ -19,10 +19,10 @@
* 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
- * BRIAN PAUL OR IBM 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.
+ * 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.
*/
#ifndef ARRAYOBJ_H
diff --git a/mesalib/src/mesa/main/atifragshader.c b/mesalib/src/mesa/main/atifragshader.c
index 2a0790862..7077c96f1 100644
--- a/mesalib/src/mesa/main/atifragshader.c
+++ b/mesalib/src/mesa/main/atifragshader.c
@@ -26,7 +26,6 @@
#include "main/hash.h"
#include "main/imports.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/enums.h"
#include "main/mtypes.h"
#include "main/dispatch.h"
diff --git a/mesalib/src/mesa/main/atifragshader.h b/mesalib/src/mesa/main/atifragshader.h
index c47a7d56e..afaea009d 100644
--- a/mesalib/src/mesa/main/atifragshader.h
+++ b/mesalib/src/mesa/main/atifragshader.h
@@ -10,7 +10,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
struct gl_context;
diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c
index a672845bf..249e88a4a 100644
--- a/mesalib/src/mesa/main/attrib.c
+++ b/mesalib/src/mesa/main/attrib.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "glheader.h"
@@ -43,7 +44,6 @@
#include "lines.h"
#include "macros.h"
#include "matrix.h"
-#include "mfeatures.h"
#include "multisample.h"
#include "points.h"
#include "polygon.h"
@@ -1399,7 +1399,6 @@ copy_array_attrib(struct gl_context *ctx,
dest->PrimitiveRestartFixedIndex = src->PrimitiveRestartFixedIndex;
dest->_PrimitiveRestart = src->_PrimitiveRestart;
dest->RestartIndex = src->RestartIndex;
- dest->_RestartIndex = src->_RestartIndex;
/* skip NewState */
/* skip RebindArrays */
@@ -1578,7 +1577,6 @@ _mesa_PopClientAttrib(void)
copy_pixelstore(ctx, &ctx->Pack, store);
_mesa_reference_buffer_object(ctx, &store->BufferObj, NULL);
}
- ctx->NewState |= _NEW_PACKUNPACK;
break;
case GL_CLIENT_UNPACK_BIT:
{
@@ -1587,7 +1585,6 @@ _mesa_PopClientAttrib(void)
copy_pixelstore(ctx, &ctx->Unpack, store);
_mesa_reference_buffer_object(ctx, &store->BufferObj, NULL);
}
- ctx->NewState |= _NEW_PACKUNPACK;
break;
case GL_CLIENT_VERTEX_ARRAY_BIT: {
struct gl_array_attrib * attr =
diff --git a/mesalib/src/mesa/main/attrib.h b/mesalib/src/mesa/main/attrib.h
index 1ecf3a591..bb9fc5a94 100644
--- a/mesalib/src/mesa/main/attrib.h
+++ b/mesalib/src/mesa/main/attrib.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef ATTRIB_H
@@ -28,7 +29,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
struct gl_context;
diff --git a/mesalib/src/mesa/main/bitset.h b/mesalib/src/mesa/main/bitset.h
index 28b3c127e..aceaa0d4d 100644
--- a/mesalib/src/mesa/main/bitset.h
+++ b/mesalib/src/mesa/main/bitset.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -42,8 +43,8 @@
/* bitset declarations
*/
-#define BITSET_DECLARE(name, size) \
- BITSET_WORD name[((size) + BITSET_WORDBITS - 1) / BITSET_WORDBITS]
+#define BITSET_WORDS(bits) (ALIGN(bits, BITSET_WORDBITS) / BITSET_WORDBITS)
+#define BITSET_DECLARE(name, bits) BITSET_WORD name[BITSET_WORDS(bits)]
/* bitset operations
*/
diff --git a/mesalib/src/mesa/main/blend.c b/mesalib/src/mesa/main/blend.c
index 09a1c9ae8..0c28352b2 100644
--- a/mesalib/src/mesa/main/blend.c
+++ b/mesalib/src/mesa/main/blend.c
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -783,7 +784,6 @@ _mesa_ClampColor(GLenum target, GLenum clamp)
_mesa_update_clamp_fragment_color(ctx);
break;
case GL_CLAMP_READ_COLOR_ARB:
- FLUSH_VERTICES(ctx, _NEW_COLOR);
ctx->Color.ClampReadColor = clamp;
break;
default:
@@ -856,6 +856,23 @@ _mesa_update_clamp_vertex_color(struct gl_context *ctx)
ctx->Light._ClampVertexColor = _mesa_get_clamp_vertex_color(ctx);
}
+/**
+ * Returns an appropriate gl_format for color rendering based on the
+ * GL_FRAMEBUFFER_SRGB state.
+ *
+ * Some drivers implement GL_FRAMEBUFFER_SRGB using a flag on the blend state
+ * (which GL_FRAMEBUFFER_SRGB maps to reasonably), but some have to do so by
+ * overriding the format of the surface. This is a helper for doing the
+ * surface format override variant.
+ */
+gl_format
+_mesa_get_render_format(const struct gl_context *ctx, gl_format format)
+{
+ if (ctx->Color.sRGBEnabled)
+ return format;
+ else
+ return _mesa_get_srgb_format_linear(format);
+}
/**********************************************************************/
/** \name Initialization */
diff --git a/mesalib/src/mesa/main/blend.h b/mesalib/src/mesa/main/blend.h
index 621311d55..b43b3ccb3 100644
--- a/mesalib/src/mesa/main/blend.h
+++ b/mesalib/src/mesa/main/blend.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -34,6 +35,7 @@
#include "glheader.h"
+#include "formats.h"
struct gl_context;
@@ -114,6 +116,9 @@ _mesa_update_clamp_fragment_color(struct gl_context *ctx);
extern void
_mesa_update_clamp_vertex_color(struct gl_context *ctx);
+extern gl_format
+_mesa_get_render_format(const struct gl_context *ctx, gl_format format);
+
extern void
_mesa_init_color( struct gl_context * ctx );
diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c
index b82ba7b4c..ffb67b9b3 100644
--- a/mesalib/src/mesa/main/bufferobj.c
+++ b/mesalib/src/mesa/main/bufferobj.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -39,7 +40,6 @@
#include "context.h"
#include "bufferobj.h"
#include "fbobject.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "texobj.h"
#include "transformfeedback.h"
@@ -619,13 +619,10 @@ _mesa_init_buffer_objects( struct gl_context *ctx )
_mesa_reference_buffer_object(ctx, &ctx->CopyWriteBuffer,
ctx->Shared->NullBufferObj);
- ctx->UniformBufferBindings = calloc(ctx->Const.MaxUniformBufferBindings,
- sizeof(*ctx->UniformBufferBindings));
-
_mesa_reference_buffer_object(ctx, &ctx->UniformBuffer,
ctx->Shared->NullBufferObj);
- for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) {
+ for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) {
_mesa_reference_buffer_object(ctx,
&ctx->UniformBufferBindings[i].BufferObject,
ctx->Shared->NullBufferObj);
@@ -647,14 +644,11 @@ _mesa_free_buffer_objects( struct gl_context *ctx )
_mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, NULL);
- for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) {
+ for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) {
_mesa_reference_buffer_object(ctx,
&ctx->UniformBufferBindings[i].BufferObject,
NULL);
}
-
- free(ctx->UniformBufferBindings);
- ctx->UniformBufferBindings = NULL;
}
static bool
@@ -2060,7 +2054,8 @@ set_ubo_binding(struct gl_context *ctx,
return;
}
- FLUSH_VERTICES(ctx, _NEW_BUFFER_OBJECT);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewUniformBuffer;
_mesa_reference_buffer_object(ctx, &binding->BufferObject, bufObj);
binding->Offset = offset;
diff --git a/mesalib/src/mesa/main/bufferobj.h b/mesalib/src/mesa/main/bufferobj.h
index e98e47670..249178a7a 100644
--- a/mesalib/src/mesa/main/bufferobj.h
+++ b/mesalib/src/mesa/main/bufferobj.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#define BUFFEROBJ_H
-#include "mfeatures.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/buffers.c b/mesalib/src/mesa/main/buffers.c
index 3f5cbcda7..12e636b17 100644
--- a/mesalib/src/mesa/main/buffers.c
+++ b/mesalib/src/mesa/main/buffers.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -226,8 +227,8 @@ read_buffer_enum_to_index(GLenum buffer)
* \param buffer buffer token such as GL_LEFT or GL_FRONT_AND_BACK, etc.
*
* Note that the behaviour of this function depends on whether the
- * current ctx->DrawBuffer is a window-system framebuffer (Name=0) or
- * a user-created framebuffer object (Name!=0).
+ * current ctx->DrawBuffer is a window-system framebuffer or a user-created
+ * framebuffer object.
* In the former case, we update the per-context ctx->Color.DrawBuffer
* state var _and_ the FB's ColorDrawBuffer state.
* In the later case, we update the FB's ColorDrawBuffer state only.
@@ -645,7 +646,6 @@ _mesa_ReadBuffer(GLenum buffer)
/* OK, all error checking has been completed now */
_mesa_readbuffer(ctx, buffer, srcBuffer);
- ctx->NewState |= _NEW_BUFFERS;
/*
* Call device driver function.
diff --git a/mesalib/src/mesa/main/buffers.h b/mesalib/src/mesa/main/buffers.h
index e9768f944..59fce4b05 100644
--- a/mesalib/src/mesa/main/buffers.h
+++ b/mesalib/src/mesa/main/buffers.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/clear.c b/mesalib/src/mesa/main/clear.c
index af9433306..fb3e576e6 100644
--- a/mesalib/src/mesa/main/clear.c
+++ b/mesalib/src/mesa/main/clear.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -46,10 +47,6 @@ _mesa_ClearIndex( GLfloat c )
{
GET_CURRENT_CONTEXT(ctx);
- if (ctx->Color.ClearIndex == (GLuint) c)
- return;
-
- FLUSH_VERTICES(ctx, _NEW_COLOR);
ctx->Color.ClearIndex = (GLuint) c;
}
@@ -71,19 +68,12 @@ _mesa_ClearIndex( GLfloat c )
void GLAPIENTRY
_mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
{
- GLfloat tmp[4];
GET_CURRENT_CONTEXT(ctx);
- tmp[0] = red;
- tmp[1] = green;
- tmp[2] = blue;
- tmp[3] = alpha;
-
- if (TEST_EQ_4V(tmp, ctx->Color.ClearColor.f))
- return; /* no change */
-
- FLUSH_VERTICES(ctx, _NEW_COLOR);
- COPY_4V(ctx->Color.ClearColor.f, tmp);
+ ctx->Color.ClearColor.f[0] = red;
+ ctx->Color.ClearColor.f[1] = green;
+ ctx->Color.ClearColor.f[2] = blue;
+ ctx->Color.ClearColor.f[3] = alpha;
}
@@ -93,19 +83,12 @@ _mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
void GLAPIENTRY
_mesa_ClearColorIiEXT(GLint r, GLint g, GLint b, GLint a)
{
- GLint tmp[4];
GET_CURRENT_CONTEXT(ctx);
- tmp[0] = r;
- tmp[1] = g;
- tmp[2] = b;
- tmp[3] = a;
-
- if (TEST_EQ_4V(tmp, ctx->Color.ClearColor.i))
- return; /* no change */
-
- FLUSH_VERTICES(ctx, _NEW_COLOR);
- COPY_4V(ctx->Color.ClearColor.i, tmp);
+ ctx->Color.ClearColor.i[0] = r;
+ ctx->Color.ClearColor.i[1] = g;
+ ctx->Color.ClearColor.i[2] = b;
+ ctx->Color.ClearColor.i[3] = a;
}
@@ -115,19 +98,12 @@ _mesa_ClearColorIiEXT(GLint r, GLint g, GLint b, GLint a)
void GLAPIENTRY
_mesa_ClearColorIuiEXT(GLuint r, GLuint g, GLuint b, GLuint a)
{
- GLuint tmp[4];
GET_CURRENT_CONTEXT(ctx);
- tmp[0] = r;
- tmp[1] = g;
- tmp[2] = b;
- tmp[3] = a;
-
- if (TEST_EQ_4V(tmp, ctx->Color.ClearColor.ui))
- return; /* no change */
-
- FLUSH_VERTICES(ctx, _NEW_COLOR);
- COPY_4V(ctx->Color.ClearColor.ui, tmp);
+ ctx->Color.ClearColor.ui[0] = r;
+ ctx->Color.ClearColor.ui[1] = g;
+ ctx->Color.ClearColor.ui[2] = b;
+ ctx->Color.ClearColor.ui[3] = a;
}
diff --git a/mesalib/src/mesa/main/clear.h b/mesalib/src/mesa/main/clear.h
index 783271920..e410ee6f1 100644
--- a/mesalib/src/mesa/main/clear.h
+++ b/mesalib/src/mesa/main/clear.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/clip.c b/mesalib/src/mesa/main/clip.c
index b01dd3c97..ebca202be 100644
--- a/mesalib/src/mesa/main/clip.c
+++ b/mesalib/src/mesa/main/clip.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/clip.h b/mesalib/src/mesa/main/clip.h
index a8e6d7687..dc65cf36c 100644
--- a/mesalib/src/mesa/main/clip.h
+++ b/mesalib/src/mesa/main/clip.h
@@ -21,9 +21,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/colormac.h b/mesalib/src/mesa/main/colormac.h
index 4294f3239..16c245225 100644
--- a/mesalib/src/mesa/main/colormac.h
+++ b/mesalib/src/mesa/main/colormac.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/colortab.c b/mesalib/src/mesa/main/colortab.c
index c201a27cb..18f993adf 100644
--- a/mesalib/src/mesa/main/colortab.c
+++ b/mesalib/src/mesa/main/colortab.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "context.h"
#include "image.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "pack.h"
#include "pbo.h"
diff --git a/mesalib/src/mesa/main/colortab.h b/mesalib/src/mesa/main/colortab.h
index f25fbe8a5..1c1854868 100644
--- a/mesalib/src/mesa/main/colortab.h
+++ b/mesalib/src/mesa/main/colortab.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/compiler.h b/mesalib/src/mesa/main/compiler.h
index 8431534c3..1e10f2749 100644
--- a/mesalib/src/mesa/main/compiler.h
+++ b/mesalib/src/mesa/main/compiler.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/config.h b/mesalib/src/mesa/main/config.h
index 99910d7f3..4a4fdc98c 100644
--- a/mesalib/src/mesa/main/config.h
+++ b/mesalib/src/mesa/main/config.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -90,9 +91,6 @@
/** Line width granularity */
#define LINE_WIDTH_GRANULARITY 0.1
-/** Max texture palette / color table size */
-#define MAX_COLOR_TABLE_SIZE 256
-
/** Max memory to allow for a single texture image (in megabytes) */
#define MAX_TEXTURE_MBYTES 1024
@@ -170,6 +168,9 @@
/*@{*/
#define MAX_PROGRAM_LOCAL_PARAMS 4096
#define MAX_UNIFORMS 4096
+#define MAX_UNIFORM_BUFFERS 15 /* + 1 default uniform buffer */
+/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */
+#define MAX_COMBINED_UNIFORM_BUFFERS (MAX_UNIFORM_BUFFERS * 6)
/*@}*/
/**
@@ -218,9 +219,8 @@
/** For GL_ARB_vertex_shader */
/*@{*/
#define MAX_VERTEX_GENERIC_ATTRIBS 16
-#define MAX_VERTEX_TEXTURE_IMAGE_UNITS MAX_TEXTURE_IMAGE_UNITS
-#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_VERTEX_TEXTURE_IMAGE_UNITS + \
- MAX_TEXTURE_IMAGE_UNITS)
+/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */
+#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_TEXTURE_IMAGE_UNITS * 6)
/*@}*/
@@ -245,9 +245,6 @@
/** For GL_ARB_geometry_shader4 */
/*@{*/
-#define MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 8
-#define MAX_GEOMETRY_VARYING_COMPONENTS 32
-#define MAX_VERTEX_VARYING_COMPONENTS 32
#define MAX_GEOMETRY_UNIFORM_COMPONENTS 512
#define MAX_GEOMETRY_OUTPUT_VERTICES 256
#define MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 1024
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c
index 053993421..0053525e8 100644
--- a/mesalib/src/mesa/main/context.c
+++ b/mesalib/src/mesa/main/context.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -77,7 +78,6 @@
#include "glheader.h"
-#include "mfeatures.h"
#include "imports.h"
#include "accum.h"
#include "api_exec.h"
@@ -552,9 +552,9 @@ _mesa_init_constants(struct gl_context *ctx)
ctx->Const.MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE;
ctx->Const.MaxArrayTextureLayers = MAX_ARRAY_TEXTURE_LAYERS;
ctx->Const.MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS;
- ctx->Const.MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
+ ctx->Const.FragmentProgram.MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
ctx->Const.MaxTextureUnits = MIN2(ctx->Const.MaxTextureCoordUnits,
- ctx->Const.MaxTextureImageUnits);
+ ctx->Const.FragmentProgram.MaxTextureImageUnits);
ctx->Const.MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY;
ctx->Const.MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS;
ctx->Const.MaxTextureBufferSize = 65536;
@@ -571,7 +571,6 @@ _mesa_init_constants(struct gl_context *ctx)
ctx->Const.MinLineWidthAA = MIN_LINE_WIDTH;
ctx->Const.MaxLineWidthAA = MAX_LINE_WIDTH;
ctx->Const.LineWidthGranularity = (GLfloat) LINE_WIDTH_GRANULARITY;
- ctx->Const.MaxColorTableSize = MAX_COLOR_TABLE_SIZE;
ctx->Const.MaxClipPlanes = 6;
ctx->Const.MaxLights = MAX_LIGHTS;
ctx->Const.MaxShininess = 128.0;
@@ -601,12 +600,10 @@ _mesa_init_constants(struct gl_context *ctx)
ctx->Const.MaxColorAttachments = MAX_COLOR_ATTACHMENTS;
ctx->Const.MaxRenderbufferSize = MAX_RENDERBUFFER_SIZE;
- ctx->Const.MaxVertexTextureImageUnits = MAX_VERTEX_TEXTURE_IMAGE_UNITS;
+ ctx->Const.VertexProgram.MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
ctx->Const.MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
ctx->Const.MaxVarying = 16; /* old limit not to break tnl and swrast */
- ctx->Const.MaxGeometryTextureImageUnits = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS;
- ctx->Const.MaxVertexVaryingComponents = MAX_VERTEX_VARYING_COMPONENTS;
- ctx->Const.MaxGeometryVaryingComponents = MAX_GEOMETRY_VARYING_COMPONENTS;
+ ctx->Const.GeometryProgram.MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
ctx->Const.MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES;
ctx->Const.MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS;
@@ -676,27 +673,25 @@ check_context_limits(struct gl_context *ctx)
assert(VARYING_SLOT_MAX <=
(8 * sizeof(ctx->FragmentProgram._Current->Base.InputsRead)));
- assert(MAX_COMBINED_TEXTURE_IMAGE_UNITS <= 8 * sizeof(GLbitfield));
-
/* shader-related checks */
assert(ctx->Const.FragmentProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS);
assert(ctx->Const.VertexProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS);
/* Texture unit checks */
- assert(ctx->Const.MaxTextureImageUnits > 0);
- assert(ctx->Const.MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS);
+ assert(ctx->Const.FragmentProgram.MaxTextureImageUnits > 0);
+ assert(ctx->Const.FragmentProgram.MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS);
assert(ctx->Const.MaxTextureCoordUnits > 0);
assert(ctx->Const.MaxTextureCoordUnits <= MAX_TEXTURE_COORD_UNITS);
assert(ctx->Const.MaxTextureUnits > 0);
assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_IMAGE_UNITS);
assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_COORD_UNITS);
- assert(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.MaxTextureImageUnits,
+ assert(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.FragmentProgram.MaxTextureImageUnits,
ctx->Const.MaxTextureCoordUnits));
assert(ctx->Const.MaxCombinedTextureImageUnits > 0);
assert(ctx->Const.MaxCombinedTextureImageUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS);
assert(ctx->Const.MaxTextureCoordUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS);
/* number of coord units cannot be greater than number of image units */
- assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.MaxTextureImageUnits);
+ assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.FragmentProgram.MaxTextureImageUnits);
/* Texture size checks */
@@ -924,7 +919,6 @@ create_beginend_table(const struct gl_context *ctx)
COPY_DISPATCH(MapBuffer);
COPY_DISPATCH(UnmapBuffer);
COPY_DISPATCH(MapBufferRange);
- COPY_DISPATCH(MapBufferRange);
COPY_DISPATCH(ObjectPurgeableAPPLE);
COPY_DISPATCH(ObjectUnpurgeableAPPLE);
@@ -1080,6 +1074,7 @@ _mesa_initialize_context(struct gl_context *ctx,
return GL_TRUE;
fail:
+ _mesa_reference_shared_state(ctx, &ctx->Shared, NULL);
free(ctx->BeginEnd);
free(ctx->Exec);
free(ctx->Save);
@@ -1180,6 +1175,7 @@ _mesa_free_context_data( struct gl_context *ctx )
_mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL);
/* free dispatch tables */
+ free(ctx->BeginEnd);
free(ctx->Exec);
free(ctx->Save);
@@ -1724,18 +1720,6 @@ _mesa_Flush(void)
}
-/**
- * Set mvp_with_dp4 flag. If a driver has a preference for DP4 over
- * MUL/MAD, or vice versa, call this function to register that.
- * Otherwise we default to MUL/MAD.
- */
-void
-_mesa_set_mvp_with_dp4( struct gl_context *ctx,
- GLboolean flag )
-{
- ctx->mvp_with_dp4 = flag;
-}
-
/*
* ARB_blend_func_extended - ERRORS section
* "The error INVALID_OPERATION is generated by Begin or any procedure that
diff --git a/mesalib/src/mesa/main/context.h b/mesalib/src/mesa/main/context.h
index 1b881f3f3..0118e5f6a 100644
--- a/mesalib/src/mesa/main/context.h
+++ b/mesalib/src/mesa/main/context.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -154,11 +155,6 @@ extern struct _glapi_table *
_mesa_get_dispatch(struct gl_context *ctx);
-void
-_mesa_set_mvp_with_dp4( struct gl_context *ctx,
- GLboolean flag );
-
-
extern GLboolean
_mesa_valid_to_render(struct gl_context *ctx, const char *where);
@@ -190,6 +186,28 @@ _mesa_Flush( void );
/**
+ * Are we currently between glBegin and glEnd?
+ * During execution, not display list compilation.
+ */
+static inline GLboolean
+_mesa_inside_begin_end(const struct gl_context *ctx)
+{
+ return ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END;
+}
+
+
+/**
+ * Are we currently between glBegin and glEnd in a display list?
+ */
+static inline GLboolean
+_mesa_inside_dlist_begin_end(const struct gl_context *ctx)
+{
+ return ctx->Driver.CurrentSavePrimitive <= PRIM_MAX;
+}
+
+
+
+/**
* \name Macros for flushing buffered rendering commands before state changes,
* checking if inside glBegin/glEnd, etc.
*/
@@ -242,7 +260,7 @@ do { \
*/
#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \
do { \
- if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \
+ if (_mesa_inside_begin_end(ctx)) { \
_mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \
return retval; \
} \
@@ -256,7 +274,7 @@ do { \
*/
#define ASSERT_OUTSIDE_BEGIN_END(ctx) \
do { \
- if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \
+ if (_mesa_inside_begin_end(ctx)) { \
_mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \
return; \
} \
diff --git a/mesalib/src/mesa/main/convolve.c b/mesalib/src/mesa/main/convolve.c
index dfc1b9465..5f1e85b6b 100644
--- a/mesalib/src/mesa/main/convolve.c
+++ b/mesalib/src/mesa/main/convolve.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -36,7 +37,6 @@
#include "colormac.h"
#include "convolve.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "main/dispatch.h"
diff --git a/mesalib/src/mesa/main/convolve.h b/mesalib/src/mesa/main/convolve.h
index 812debd61..3d4c999d9 100644
--- a/mesalib/src/mesa/main/convolve.h
+++ b/mesalib/src/mesa/main/convolve.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "compiler.h"
-#include "mfeatures.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/cpuinfo.c b/mesalib/src/mesa/main/cpuinfo.c
index 41505f637..3b4ff8cd1 100644
--- a/mesalib/src/mesa/main/cpuinfo.c
+++ b/mesalib/src/mesa/main/cpuinfo.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/cpuinfo.h b/mesalib/src/mesa/main/cpuinfo.h
index bf846ef40..31de9b2e4 100644
--- a/mesalib/src/mesa/main/cpuinfo.h
+++ b/mesalib/src/mesa/main/cpuinfo.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/dd.h b/mesalib/src/mesa/main/dd.h
index 8f3cd3d6b..13c7a83d4 100644
--- a/mesalib/src/mesa/main/dd.h
+++ b/mesalib/src/mesa/main/dd.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -354,7 +355,9 @@ struct dd_function_table {
* \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and
* GL_MAP_INVALIDATE_RANGE_BIT (if writing)
* \param mapOut returns start of mapping of region of interest
- * \param rowStrideOut returns row stride (in bytes)
+ * \param rowStrideOut returns row stride (in bytes). In the case of a
+ * compressed texture, this is the byte stride between one row of blocks
+ * and another.
*/
void (*MapTextureImage)(struct gl_context *ctx,
struct gl_texture_image *texImage,
@@ -622,7 +625,7 @@ struct dd_function_table {
struct gl_framebuffer *fb,
struct gl_renderbuffer_attachment *att);
void (*FinishRenderTexture)(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att);
+ struct gl_renderbuffer *rb);
void (*ValidateFramebuffer)(struct gl_context *ctx,
struct gl_framebuffer *fb);
/*@}*/
@@ -682,10 +685,9 @@ struct dd_function_table {
GLuint CurrentExecPrimitive;
/**
- * Current state of an in-progress compilation.
- *
- * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END,
- * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above.
+ * Current glBegin state of an in-progress compilation. May be
+ * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
+ * or PRIM_UNKNOWN.
*/
GLuint CurrentSavePrimitive;
@@ -694,15 +696,16 @@ struct dd_function_table {
#define FLUSH_UPDATE_CURRENT 0x2
/**
* Set by the driver-supplied T&L engine whenever vertices are buffered
- * between glBegin()/glEnd() objects or __struct gl_contextRec::Current is not
- * updated.
+ * between glBegin()/glEnd() objects or __struct gl_contextRec::Current
+ * is not updated. A bitmask of the FLUSH_x values above.
*
* The dd_function_table::FlushVertices call below may be used to resolve
* these conditions.
*/
- GLuint NeedFlush;
- GLuint SaveNeedFlush;
+ GLbitfield NeedFlush;
+ /** Need to call SaveFlushVertices() upon state change? */
+ GLboolean SaveNeedFlush;
/* Called prior to any of the GLvertexformat functions being
* called. Paired with Driver.FlushVertices().
@@ -848,28 +851,17 @@ struct dd_function_table {
/**
- * Transform/Clip/Lighting interface
- *
- * Drivers present a reduced set of the functions possible in
- * glBegin()/glEnd() objects. Core mesa provides translation stubs for the
- * remaining functions to map down to these entry points.
+ * Per-vertex functions.
*
- * These are the initial values to be installed into dispatch by
- * mesa. If the T&L driver wants to modify the dispatch table
- * while installed, it must do so itself. It would be possible for
- * the vertexformat to install its own initial values for these
- * functions, but this way there is an obvious list of what is
- * expected of the driver.
+ * These are the functions which can appear between glBegin and glEnd.
+ * Depending on whether we're inside or outside a glBegin/End pair
+ * and whether we're in immediate mode or building a display list, these
+ * functions behave differently. This structure allows us to switch
+ * between those modes more easily.
*
- * If the driver wants to hook in entry points other than those
- * listed, it must restore them to their original values in
- * the disable() callback, below.
+ * Generally, these pointers point to functions in the VBO module.
*/
typedef struct {
- /**
- * \name Vertex
- */
- /*@{*/
void (GLAPIENTRYP ArrayElement)( GLint );
void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
void (GLAPIENTRYP Color3fv)( const GLfloat * );
@@ -1017,84 +1009,6 @@ typedef struct {
void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type,
GLboolean normalized,
const GLuint *value);
-
- /*@}*/
-
- void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
-
- /**
- * \name Array
- */
- /*@{*/
- void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
- void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices );
- void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
- GLuint end, GLsizei count,
- GLenum type, const GLvoid *indices );
- void (GLAPIENTRYP MultiDrawElementsEXT)( GLenum mode, const GLsizei *count,
- GLenum type,
- const GLvoid **indices,
- GLsizei primcount);
- void (GLAPIENTRYP DrawElementsBaseVertex)( GLenum mode, GLsizei count,
- GLenum type,
- const GLvoid *indices,
- GLint basevertex );
- void (GLAPIENTRYP DrawRangeElementsBaseVertex)( GLenum mode, GLuint start,
- GLuint end, GLsizei count,
- GLenum type,
- const GLvoid *indices,
- GLint basevertex);
- void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode,
- const GLsizei *count,
- GLenum type,
- const GLvoid * const *indices,
- GLsizei primcount,
- const GLint *basevertex);
- void (GLAPIENTRYP DrawArraysInstanced)(GLenum mode, GLint first,
- GLsizei count, GLsizei primcount);
- void (GLAPIENTRYP DrawArraysInstancedBaseInstance)(GLenum mode, GLint first,
- GLsizei count, GLsizei primcount,
- GLuint baseinstance);
- void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count,
- GLenum type, const GLvoid *indices,
- GLsizei primcount);
- void (GLAPIENTRYP DrawElementsInstancedBaseInstance)(GLenum mode, GLsizei count,
- GLenum type, const GLvoid *indices,
- GLsizei primcount, GLuint baseinstance);
- void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count,
- GLenum type, const GLvoid *indices,
- GLsizei primcount, GLint basevertex);
- void (GLAPIENTRYP DrawElementsInstancedBaseVertexBaseInstance)(GLenum mode, GLsizei count,
- GLenum type, const GLvoid *indices,
- GLsizei primcount, GLint basevertex,
- GLuint baseinstance);
- void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint name);
- void (GLAPIENTRYP DrawTransformFeedbackStream)(GLenum mode, GLuint name,
- GLuint stream);
- void (GLAPIENTRYP DrawTransformFeedbackInstanced)(GLenum mode, GLuint name,
- GLsizei primcount);
- void (GLAPIENTRYP DrawTransformFeedbackStreamInstanced)(GLenum mode,
- GLuint name,
- GLuint stream,
- GLsizei primcount);
- /*@}*/
-
- /**
- * \name Eval
- *
- * If you don't support eval, fallback to the default vertex format
- * on receiving an eval call and use the pipeline mechanism to
- * provide partial T&L acceleration.
- *
- * Mesa will provide a set of helper functions to do eval within
- * accelerated vertex formats, eventually...
- */
- /*@{*/
- void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
- void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
- /*@}*/
-
} GLvertexformat;
diff --git a/mesalib/src/mesa/main/debug.c b/mesalib/src/mesa/main/debug.c
index aee8ae2dc..bd75e4158 100644
--- a/mesalib/src/mesa/main/debug.c
+++ b/mesalib/src/mesa/main/debug.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "mtypes.h"
@@ -66,7 +67,7 @@ void
_mesa_print_state( const char *msg, GLuint state )
{
_mesa_debug(NULL,
- "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
+ "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
msg,
state,
(state & _NEW_MODELVIEW) ? "ctx->ModelView, " : "",
@@ -88,7 +89,6 @@ _mesa_print_state( const char *msg, GLuint state )
(state & _NEW_TEXTURE) ? "ctx->Texture, " : "",
(state & _NEW_TRANSFORM) ? "ctx->Transform, " : "",
(state & _NEW_VIEWPORT) ? "ctx->Viewport, " : "",
- (state & _NEW_PACKUNPACK) ? "ctx->Pack/Unpack, " : "",
(state & _NEW_ARRAY) ? "ctx->Array, " : "",
(state & _NEW_RENDERMODE) ? "ctx->RenderMode, " : "",
(state & _NEW_BUFFERS) ? "ctx->Visual, ctx->DrawBuffer,, " : "");
@@ -96,27 +96,6 @@ _mesa_print_state( const char *msg, GLuint state )
-void
-_mesa_print_tri_caps( const char *name, GLuint flags )
-{
- _mesa_debug(NULL,
- "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s\n",
- name,
- flags,
- (flags & DD_SEPARATE_SPECULAR) ? "separate-specular, " : "",
- (flags & DD_TRI_LIGHT_TWOSIDE) ? "tri-light-twoside, " : "",
- (flags & DD_TRI_UNFILLED) ? "tri-unfilled, " : "",
- (flags & DD_TRI_STIPPLE) ? "tri-stipple, " : "",
- (flags & DD_TRI_OFFSET) ? "tri-offset, " : "",
- (flags & DD_TRI_SMOOTH) ? "tri-smooth, " : "",
- (flags & DD_LINE_SMOOTH) ? "line-smooth, " : "",
- (flags & DD_LINE_STIPPLE) ? "line-stipple, " : "",
- (flags & DD_POINT_SMOOTH) ? "point-smooth, " : "",
- (flags & DD_POINT_ATTEN) ? "point-atten, " : ""
- );
-}
-
-
/**
* Print information about this Mesa version and build options.
*/
diff --git a/mesalib/src/mesa/main/debug.h b/mesalib/src/mesa/main/debug.h
index 6bc536591..919a6f3a1 100644
--- a/mesalib/src/mesa/main/debug.h
+++ b/mesalib/src/mesa/main/debug.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -37,12 +38,10 @@
#define _DEBUG_H
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
struct gl_texture_image;
-extern void _mesa_print_tri_caps( const char *name, GLuint flags );
extern void _mesa_print_enable_flags( const char *msg, GLuint flags );
extern void _mesa_print_state( const char *msg, GLuint state );
extern void _mesa_print_info( void );
diff --git a/mesalib/src/mesa/main/depth.c b/mesalib/src/mesa/main/depth.c
index 8aec94a2d..68ad56184 100644
--- a/mesalib/src/mesa/main/depth.c
+++ b/mesalib/src/mesa/main/depth.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -46,13 +47,7 @@ _mesa_ClearDepth( GLclampd depth )
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glClearDepth(%f)\n", depth);
- depth = CLAMP( depth, 0.0, 1.0 );
-
- if (ctx->Depth.Clear == depth)
- return;
-
- FLUSH_VERTICES(ctx, _NEW_DEPTH);
- ctx->Depth.Clear = depth;
+ ctx->Depth.Clear = CLAMP( depth, 0.0, 1.0 );
}
diff --git a/mesalib/src/mesa/main/depth.h b/mesalib/src/mesa/main/depth.h
index fe6b33f36..80e753837 100644
--- a/mesalib/src/mesa/main/depth.h
+++ b/mesalib/src/mesa/main/depth.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,7 +34,6 @@
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
diff --git a/mesalib/src/mesa/main/dlist.c b/mesalib/src/mesa/main/dlist.c
index 4b20d890d..18e3eb760 100644
--- a/mesalib/src/mesa/main/dlist.c
+++ b/mesalib/src/mesa/main/dlist.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,7 +38,6 @@
#include "api_validate.h"
#include "atifragshader.h"
#include "config.h"
-#include "mfeatures.h"
#include "bufferobj.h"
#include "arrayobj.h"
#include "context.h"
@@ -69,6 +69,8 @@
#include "main/dispatch.h"
+#include "vbo/vbo.h"
+
/**
@@ -122,8 +124,7 @@ do { \
*/
#define ASSERT_OUTSIDE_SAVE_BEGIN_END_WITH_RETVAL(ctx, retval) \
do { \
- if (ctx->Driver.CurrentSavePrimitive <= GL_POLYGON || \
- ctx->Driver.CurrentSavePrimitive == PRIM_INSIDE_UNKNOWN_PRIM) { \
+ if (ctx->Driver.CurrentSavePrimitive <= PRIM_MAX) { \
_mesa_compile_error( ctx, GL_INVALID_OPERATION, "glBegin/End" ); \
return retval; \
} \
@@ -137,8 +138,7 @@ do { \
*/
#define ASSERT_OUTSIDE_SAVE_BEGIN_END(ctx) \
do { \
- if (ctx->Driver.CurrentSavePrimitive <= GL_POLYGON || \
- ctx->Driver.CurrentSavePrimitive == PRIM_INSIDE_UNKNOWN_PRIM) { \
+ if (ctx->Driver.CurrentSavePrimitive <= PRIM_MAX) { \
_mesa_compile_error( ctx, GL_INVALID_OPERATION, "glBegin/End" ); \
return; \
} \
@@ -1356,7 +1356,14 @@ save_DrawElementsInstancedBaseVertexBaseInstance(GLenum mode,
"glDrawElementsInstancedBaseVertexBaseInstance() during display list compile");
}
-static void invalidate_saved_current_state( struct gl_context *ctx )
+
+/**
+ * While building a display list we cache some OpenGL state.
+ * Under some circumstances we need to invalidate that state (immediately
+ * when we start compiling a list, or after glCallList(s)).
+ */
+static void
+invalidate_saved_current_state(struct gl_context *ctx)
{
GLint i;
@@ -1371,6 +1378,7 @@ static void invalidate_saved_current_state( struct gl_context *ctx )
ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
}
+
static void GLAPIENTRY
save_CallList(GLuint list)
{
@@ -3771,15 +3779,16 @@ save_ShadeModel(GLenum mode)
CALL_ShadeModel(ctx->Exec, (mode));
}
+ /* Don't compile this call if it's a no-op.
+ * By avoiding this state change we have a better chance of
+ * coalescing subsequent drawing commands into one batch.
+ */
if (ctx->ListState.Current.ShadeModel == mode)
return;
SAVE_FLUSH_VERTICES(ctx);
- /* Only save the value if we know the statechange will take effect:
- */
- if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END)
- ctx->ListState.Current.ShadeModel = mode;
+ ctx->ListState.Current.ShadeModel = mode;
n = alloc_instruction(ctx, OPCODE_SHADE_MODEL, 1);
if (n) {
@@ -5645,28 +5654,20 @@ static void GLAPIENTRY
save_Begin(GLenum mode)
{
GET_CURRENT_CONTEXT(ctx);
- Node *n;
- GLboolean error = GL_FALSE;
- if (ctx->ExecuteFlag && !_mesa_valid_prim_mode(ctx, mode, "glBegin")) {
- error = GL_TRUE;
+ if (!_mesa_is_valid_prim_mode(ctx, mode)) {
+ /* compile this error into the display list */
+ _mesa_compile_error(ctx, GL_INVALID_ENUM, "glBegin(mode)");
}
- else if (ctx->Driver.CurrentSavePrimitive == PRIM_UNKNOWN) {
- /* Typically the first begin. This may raise an error on
- * playback, depending on whether CallList is issued from inside
- * a begin/end or not.
- */
- ctx->Driver.CurrentSavePrimitive = PRIM_INSIDE_UNKNOWN_PRIM;
- }
- else if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END) {
- ctx->Driver.CurrentSavePrimitive = mode;
+ else if (_mesa_inside_dlist_begin_end(ctx)) {
+ /* compile this error into the display list */
+ _mesa_compile_error(ctx, GL_INVALID_OPERATION, "recursive glBegin");
}
else {
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "recursive begin");
- error = GL_TRUE;
- }
+ Node *n;
+
+ ctx->Driver.CurrentSavePrimitive = mode;
- if (!error) {
/* Give the driver an opportunity to hook in an optimized
* display list compiler.
*/
@@ -5678,10 +5679,10 @@ save_Begin(GLenum mode)
if (n) {
n[1].e = mode;
}
- }
- if (ctx->ExecuteFlag) {
- CALL_Begin(ctx->Exec, (mode));
+ if (ctx->ExecuteFlag) {
+ CALL_Begin(ctx->Exec, (mode));
+ }
}
}
@@ -5702,7 +5703,7 @@ save_Rectf(GLfloat a, GLfloat b, GLfloat c, GLfloat d)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
- SAVE_FLUSH_VERTICES(ctx);
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_RECTF, 4);
if (n) {
n[1].f = a;
@@ -7055,7 +7056,10 @@ save_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params)
static void GLAPIENTRY
save_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
{
- save_SamplerParameterfv(sampler, pname, &param);
+ GLfloat parray[4];
+ parray[0] = param;
+ parray[1] = parray[2] = parray[3] = 0.0F;
+ save_SamplerParameterfv(sampler, pname, parray);
}
static void GLAPIENTRY
@@ -8631,8 +8635,7 @@ _mesa_NewList(GLuint name, GLenum mode)
ctx->CompileFlag = GL_TRUE;
ctx->ExecuteFlag = (mode == GL_COMPILE_AND_EXECUTE);
- /* Reset acumulated list state:
- */
+ /* Reset accumulated list state */
invalidate_saved_current_state( ctx );
/* Allocate new display list */
@@ -8660,6 +8663,11 @@ _mesa_EndList(void)
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glEndList\n");
+ if (ctx->ExecuteFlag && _mesa_inside_dlist_begin_end(ctx)) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glEndList() called inside glBegin/End");
+ }
+
/* Check that a list is under construction */
if (!ctx->ListState.CurrentList) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glEndList");
@@ -8817,6 +8825,9 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
_mesa_loopback_init_api_table(ctx, table);
+ /* VBO functions */
+ vbo_initialize_save_dispatch(ctx, table);
+
/* GL 1.0 */
SET_Accum(table, save_Accum);
SET_AlphaFunc(table, save_AlphaFunc);
@@ -8927,6 +8938,7 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_RasterPos4s(table, save_RasterPos4s);
SET_RasterPos4sv(table, save_RasterPos4sv);
SET_ReadBuffer(table, save_ReadBuffer);
+ SET_Rectf(table, save_Rectf);
SET_Rotated(table, save_Rotated);
SET_Rotatef(table, save_Rotatef);
SET_Scaled(table, save_Scaled);
@@ -9256,6 +9268,18 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
/* GL_ARB_uniform_buffer_object */
SET_UniformBlockBinding(table, save_UniformBlockBinding);
+
+ /* GL_ARB_draw_instanced */
+ SET_DrawArraysInstancedARB(table, save_DrawArraysInstancedARB);
+ SET_DrawElementsInstancedARB(table, save_DrawElementsInstancedARB);
+
+ /* GL_ARB_draw_elements_base_vertex */
+ SET_DrawElementsInstancedBaseVertex(table, save_DrawElementsInstancedBaseVertexARB);
+
+ /* GL_ARB_base_instance */
+ SET_DrawArraysInstancedBaseInstance(table, save_DrawArraysInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseInstance(table, save_DrawElementsInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseVertexBaseInstance(table, save_DrawElementsInstancedBaseVertexBaseInstance);
}
@@ -9548,14 +9572,15 @@ mesa_print_display_list(GLuint list)
/***** Initialization *****/
/**********************************************************************/
-void
-_mesa_save_vtxfmt_init(GLvertexformat * vfmt)
+static void
+save_vtxfmt_init(GLvertexformat * vfmt)
{
- _MESA_INIT_ARRAYELT_VTXFMT(vfmt, _ae_);
+ vfmt->ArrayElement = _ae_ArrayElement;
vfmt->Begin = save_Begin;
- _MESA_INIT_DLIST_VTXFMT(vfmt, save_);
+ vfmt->CallList = save_CallList;
+ vfmt->CallLists = save_CallLists;
vfmt->Color3f = save_Color3f;
vfmt->Color3fv = save_Color3fv;
@@ -9564,7 +9589,12 @@ _mesa_save_vtxfmt_init(GLvertexformat * vfmt)
vfmt->EdgeFlag = save_EdgeFlag;
vfmt->End = save_End;
- _MESA_INIT_EVAL_VTXFMT(vfmt, save_);
+ vfmt->EvalCoord1f = save_EvalCoord1f;
+ vfmt->EvalCoord1fv = save_EvalCoord1fv;
+ vfmt->EvalCoord2f = save_EvalCoord2f;
+ vfmt->EvalCoord2fv = save_EvalCoord2fv;
+ vfmt->EvalPoint1 = save_EvalPoint1;
+ vfmt->EvalPoint2 = save_EvalPoint2;
vfmt->FogCoordfEXT = save_FogCoordfEXT;
vfmt->FogCoordfvEXT = save_FogCoordfvEXT;
@@ -9605,36 +9635,6 @@ _mesa_save_vtxfmt_init(GLvertexformat * vfmt)
vfmt->VertexAttrib3fvARB = save_VertexAttrib3fvARB;
vfmt->VertexAttrib4fARB = save_VertexAttrib4fARB;
vfmt->VertexAttrib4fvARB = save_VertexAttrib4fvARB;
-
- vfmt->Rectf = save_Rectf;
-
- /* GL_ARB_draw_instanced */
- vfmt->DrawArraysInstanced = save_DrawArraysInstancedARB;
- vfmt->DrawElementsInstanced = save_DrawElementsInstancedARB;
-
- /* GL_ARB_draw_elements_base_vertex */
- vfmt->DrawElementsInstancedBaseVertex = save_DrawElementsInstancedBaseVertexARB;
-
- /* GL_ARB_base_instance */
- vfmt->DrawArraysInstancedBaseInstance = save_DrawArraysInstancedBaseInstance;
- vfmt->DrawElementsInstancedBaseInstance = save_DrawElementsInstancedBaseInstance;
- vfmt->DrawElementsInstancedBaseVertexBaseInstance = save_DrawElementsInstancedBaseVertexBaseInstance;
-
- /* The driver is required to implement these as
- * 1) They can probably do a better job.
- * 2) A lot of new mechanisms would have to be added to this module
- * to support it. That code would probably never get used,
- * because of (1).
- */
-#if 0
- vfmt->DrawArrays = 0;
- vfmt->DrawElements = 0;
- vfmt->DrawRangeElements = 0;
- vfmt->MultiDrawElemementsEXT = 0;
- vfmt->DrawElementsBaseVertex = 0;
- vfmt->DrawRangeElementsBaseVertex = 0;
- vfmt->MultiDrawElemementsBaseVertex = 0;
-#endif
}
@@ -9674,7 +9674,7 @@ _mesa_init_display_list(struct gl_context *ctx)
/* Display List group */
ctx->List.ListBase = 0;
- _mesa_save_vtxfmt_init(&ctx->ListState.ListVtxfmt);
+ save_vtxfmt_init(&ctx->ListState.ListVtxfmt);
}
diff --git a/mesalib/src/mesa/main/dlist.h b/mesalib/src/mesa/main/dlist.h
index e049476c1..4672d3e60 100644
--- a/mesalib/src/mesa/main/dlist.h
+++ b/mesalib/src/mesa/main/dlist.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,16 +34,9 @@
#define DLIST_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
-#define _MESA_INIT_DLIST_VTXFMT(vfmt, impl) \
- do { \
- (vfmt)->CallList = impl ## CallList; \
- (vfmt)->CallLists = impl ## CallLists; \
- } while (0)
-
GLboolean GLAPIENTRY
_mesa_IsList(GLuint list);
void GLAPIENTRY
@@ -72,8 +66,6 @@ extern GLint _mesa_dlist_alloc_opcode( struct gl_context *ctx, GLuint sz,
extern void _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist);
-extern void _mesa_save_vtxfmt_init( GLvertexformat *vfmt );
-
extern void _mesa_initialize_save_table(const struct gl_context *);
extern void _mesa_install_dlist_vtxfmt(struct _glapi_table *disp,
diff --git a/mesalib/src/mesa/main/dlopen.h b/mesalib/src/mesa/main/dlopen.h
index a5366a14e..55a56f0d7 100644
--- a/mesalib/src/mesa/main/dlopen.h
+++ b/mesalib/src/mesa/main/dlopen.h
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/drawpix.c b/mesalib/src/mesa/main/drawpix.c
index d9f55d3af..e69113bb1 100644
--- a/mesalib/src/mesa/main/drawpix.c
+++ b/mesalib/src/mesa/main/drawpix.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "glheader.h"
@@ -31,7 +32,6 @@
#include "feedback.h"
#include "framebuffer.h"
#include "image.h"
-#include "mfeatures.h"
#include "pbo.h"
#include "state.h"
#include "dispatch.h"
diff --git a/mesalib/src/mesa/main/drawpix.h b/mesalib/src/mesa/main/drawpix.h
index 087b3a8c9..57accbf0a 100644
--- a/mesalib/src/mesa/main/drawpix.h
+++ b/mesalib/src/mesa/main/drawpix.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef DRAWPIX_H
@@ -27,7 +28,6 @@
#include "compiler.h"
-#include "mfeatures.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/drawtex.c b/mesalib/src/mesa/main/drawtex.c
index 7285805c8..7c0ec832b 100644
--- a/mesalib/src/mesa/main/drawtex.c
+++ b/mesalib/src/mesa/main/drawtex.c
@@ -24,7 +24,6 @@
#include "main/drawtex.h"
#include "main/state.h"
#include "main/imports.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
diff --git a/mesalib/src/mesa/main/drawtex.h b/mesalib/src/mesa/main/drawtex.h
index b916150b7..28e2435c8 100644
--- a/mesalib/src/mesa/main/drawtex.h
+++ b/mesalib/src/mesa/main/drawtex.h
@@ -26,7 +26,6 @@
#include "glheader.h"
-#include "mfeatures.h"
extern void GLAPIENTRY
diff --git a/mesalib/src/mesa/main/enable.c b/mesalib/src/mesa/main/enable.c
index b688f050b..fdde24e36 100644
--- a/mesalib/src/mesa/main/enable.c
+++ b/mesalib/src/mesa/main/enable.c
@@ -21,9 +21,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,7 +34,6 @@
#include "enable.h"
#include "light.h"
#include "simple_list.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "enums.h"
#include "api_arrayelt.h"
@@ -53,11 +53,6 @@ update_derived_primitive_restart_state(struct gl_context *ctx)
{
/* Update derived primitive restart state.
*/
- if (ctx->Array.PrimitiveRestart)
- ctx->Array._RestartIndex = ctx->Array.RestartIndex;
- else
- ctx->Array._RestartIndex = ~0;
-
ctx->Array._PrimitiveRestart = ctx->Array.PrimitiveRestart
|| ctx->Array.PrimitiveRestartFixedIndex;
}
@@ -140,8 +135,6 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
else
arrayObj->_Enabled &= ~flag;
- arrayObj->NewArrays |= flag;
-
if (ctx->Driver.Enable) {
ctx->Driver.Enable( ctx, cap, state );
}
@@ -419,10 +412,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_LIGHT);
ctx->Light.Enabled = state;
- if (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
- ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE;
- else
- ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;
break;
case GL_LINE_SMOOTH:
if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
@@ -431,7 +420,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_LINE);
ctx->Line.SmoothFlag = state;
- ctx->_TriangleCaps ^= DD_LINE_SMOOTH;
break;
case GL_LINE_STIPPLE:
if (ctx->API != API_OPENGL_COMPAT)
@@ -440,7 +428,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_LINE);
ctx->Line.StippleFlag = state;
- ctx->_TriangleCaps ^= DD_LINE_STIPPLE;
break;
case GL_INDEX_LOGIC_OP:
if (ctx->API != API_OPENGL_COMPAT)
@@ -617,7 +604,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_POINT);
ctx->Point.SmoothFlag = state;
- ctx->_TriangleCaps ^= DD_POINT_SMOOTH;
break;
case GL_POLYGON_SMOOTH:
if (!_mesa_is_desktop_gl(ctx))
@@ -626,7 +612,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_POLYGON);
ctx->Polygon.SmoothFlag = state;
- ctx->_TriangleCaps ^= DD_TRI_SMOOTH;
break;
case GL_POLYGON_STIPPLE:
if (ctx->API != API_OPENGL_COMPAT)
@@ -635,7 +620,6 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
return;
FLUSH_VERTICES(ctx, _NEW_POLYGON);
ctx->Polygon.StippleFlag = state;
- ctx->_TriangleCaps ^= DD_TRI_STIPPLE;
break;
case GL_POLYGON_OFFSET_POINT:
if (!_mesa_is_desktop_gl(ctx))
@@ -966,7 +950,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
goto invalid_enum_error;
CHECK_EXTENSION(EXT_transform_feedback, cap);
if (ctx->RasterDiscard != state) {
- FLUSH_VERTICES(ctx, _NEW_RASTERIZER_DISCARD);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewRasterizerDiscard;
ctx->RasterDiscard = state;
}
break;
diff --git a/mesalib/src/mesa/main/enable.h b/mesalib/src/mesa/main/enable.h
index 5b2515d59..060da5656 100644
--- a/mesalib/src/mesa/main/enable.h
+++ b/mesalib/src/mesa/main/enable.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/enums.h b/mesalib/src/mesa/main/enums.h
index 8f4069426..b2f373a4c 100644
--- a/mesalib/src/mesa/main/enums.h
+++ b/mesalib/src/mesa/main/enums.h
@@ -27,16 +27,16 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef _ENUMS_H_
#define _ENUMS_H_
-#include "mfeatures.h"
extern const char *_mesa_lookup_enum_by_nr( int nr );
diff --git a/mesalib/src/mesa/main/errors.c b/mesalib/src/mesa/main/errors.c
index 5c6a393e4..0ee3daef3 100644
--- a/mesalib/src/mesa/main/errors.c
+++ b/mesalib/src/mesa/main/errors.c
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/errors.h b/mesalib/src/mesa/main/errors.h
index 7d8be5aca..b21a44c98 100644
--- a/mesalib/src/mesa/main/errors.h
+++ b/mesalib/src/mesa/main/errors.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -73,6 +74,16 @@ _mesa_gl_debug(struct gl_context *ctx,
enum mesa_debug_severity severity,
const char *fmtString, ...) PRINTFLIKE(5, 6);
+#define _mesa_perf_debug(ctx, sev, ...) do { \
+ static GLuint msg_id = 0; \
+ if (unlikely(ctx->Const.ContextFlags & GL_CONTEXT_FLAG_DEBUG_BIT)) { \
+ _mesa_gl_debug(ctx, &msg_id, \
+ MESA_DEBUG_TYPE_PERFORMANCE, \
+ sev, \
+ __VA_ARGS__); \
+ } \
+} while (0)
+
extern void
_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id,
const char *msg, int len);
diff --git a/mesalib/src/mesa/main/es1_conversion.c b/mesalib/src/mesa/main/es1_conversion.c
index cd527dd78..60a60e287 100644
--- a/mesalib/src/mesa/main/es1_conversion.c
+++ b/mesalib/src/mesa/main/es1_conversion.c
@@ -1,5 +1,4 @@
#include <stdbool.h>
-#include "main/mfeatures.h"
#include "api_loopback.h"
#include "api_exec.h"
diff --git a/mesalib/src/mesa/main/eval.c b/mesalib/src/mesa/main/eval.c
index b3c284175..349331f00 100644
--- a/mesalib/src/mesa/main/eval.c
+++ b/mesalib/src/mesa/main/eval.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -43,7 +44,6 @@
#include "context.h"
#include "eval.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "main/dispatch.h"
@@ -824,8 +824,7 @@ _mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
void
_mesa_install_eval_vtxfmt(struct _glapi_table *disp,
- const GLvertexformat *vfmt,
- bool beginend)
+ const GLvertexformat *vfmt)
{
SET_EvalCoord1f(disp, vfmt->EvalCoord1f);
SET_EvalCoord1fv(disp, vfmt->EvalCoord1fv);
@@ -833,13 +832,6 @@ _mesa_install_eval_vtxfmt(struct _glapi_table *disp,
SET_EvalCoord2fv(disp, vfmt->EvalCoord2fv);
SET_EvalPoint1(disp, vfmt->EvalPoint1);
SET_EvalPoint2(disp, vfmt->EvalPoint2);
-
- /* glEvalMesh1 and glEvalMesh2 are not allowed between glBegin and glEnd.
- */
- if (!beginend) {
- SET_EvalMesh1(disp, vfmt->EvalMesh1);
- SET_EvalMesh2(disp, vfmt->EvalMesh2);
- }
}
diff --git a/mesalib/src/mesa/main/eval.h b/mesalib/src/mesa/main/eval.h
index cfde53fd6..33240f00d 100644
--- a/mesalib/src/mesa/main/eval.h
+++ b/mesalib/src/mesa/main/eval.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,23 +38,10 @@
#define EVAL_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include <stdbool.h>
-#define _MESA_INIT_EVAL_VTXFMT(vfmt, impl) \
- do { \
- (vfmt)->EvalCoord1f = impl ## EvalCoord1f; \
- (vfmt)->EvalCoord1fv = impl ## EvalCoord1fv; \
- (vfmt)->EvalCoord2f = impl ## EvalCoord2f; \
- (vfmt)->EvalCoord2fv = impl ## EvalCoord2fv; \
- (vfmt)->EvalPoint1 = impl ## EvalPoint1; \
- (vfmt)->EvalPoint2 = impl ## EvalPoint2; \
- (vfmt)->EvalMesh1 = impl ## EvalMesh1; \
- (vfmt)->EvalMesh2 = impl ## EvalMesh2; \
- } while (0)
-
extern GLuint _mesa_evaluator_components( GLenum target );
@@ -77,8 +65,7 @@ extern GLfloat *_mesa_copy_map_points2d(GLenum target,
extern void
_mesa_install_eval_vtxfmt(struct _glapi_table *disp,
- const GLvertexformat *vfmt,
- bool beginend);
+ const GLvertexformat *vfmt);
extern void _mesa_init_eval( struct gl_context *ctx );
extern void _mesa_free_eval_data( struct gl_context *ctx );
diff --git a/mesalib/src/mesa/main/execmem.c b/mesalib/src/mesa/main/execmem.c
index ccd6ab43f..5f319661e 100644
--- a/mesalib/src/mesa/main/execmem.c
+++ b/mesalib/src/mesa/main/execmem.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -36,7 +37,7 @@
-#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun)
+#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun) || defined(__HAIKU__)
/*
* Allocate a large block of memory which can hold code then dole it out
diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c
index c7f038b88..39aaad48a 100644
--- a/mesalib/src/mesa/main/extensions.c
+++ b/mesalib/src/mesa/main/extensions.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "context.h"
#include "extensions.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
enum {
@@ -102,6 +102,7 @@ static const struct extension extension_table[] = {
{ "GL_ARB_framebuffer_object", o(ARB_framebuffer_object), GL, 2005 },
{ "GL_ARB_framebuffer_sRGB", o(EXT_framebuffer_sRGB), GL, 1998 },
{ "GL_ARB_get_program_binary", o(ARB_shader_objects), GL, 2010 },
+ { "GL_ARB_gpu_shader5", o(ARB_gpu_shader5), GL, 2010 },
{ "GL_ARB_half_float_pixel", o(ARB_half_float_pixel), GL, 2003 },
{ "GL_ARB_half_float_vertex", o(ARB_half_float_vertex), GL, 2008 },
{ "GL_ARB_instanced_arrays", o(ARB_instanced_arrays), GL, 2008 },
@@ -183,6 +184,7 @@ static const struct extension extension_table[] = {
{ "GL_EXT_fog_coord", o(EXT_fog_coord), GLL, 1999 },
{ "GL_EXT_framebuffer_blit", o(EXT_framebuffer_blit), GL, 2005 },
{ "GL_EXT_framebuffer_multisample", o(EXT_framebuffer_multisample), GL, 2005 },
+ { "GL_EXT_framebuffer_multisample_blit_scaled", o(EXT_framebuffer_multisample_blit_scaled), GL, 2011 },
{ "GL_EXT_framebuffer_object", o(EXT_framebuffer_object), GL, 2000 },
{ "GL_EXT_framebuffer_sRGB", o(EXT_framebuffer_sRGB), GL, 1998 },
{ "GL_EXT_gpu_program_parameters", o(EXT_gpu_program_parameters), GLL, 2006 },
@@ -278,7 +280,7 @@ static const struct extension extension_table[] = {
{ "GL_OES_texture_cube_map", o(ARB_texture_cube_map), ES1, 2007 },
{ "GL_OES_texture_env_crossbar", o(ARB_texture_env_crossbar), ES1, 2005 },
{ "GL_OES_texture_mirrored_repeat", o(dummy_true), ES1, 2005 },
- { "GL_OES_texture_npot", o(ARB_texture_non_power_of_two), ES2, 2005 },
+ { "GL_OES_texture_npot", o(ARB_texture_non_power_of_two), ES1 | ES2, 2005 },
{ "GL_OES_vertex_array_object", o(dummy_true), ES1 | ES2, 2010 },
/* Vendor extensions */
@@ -287,6 +289,7 @@ static const struct extension extension_table[] = {
{ "GL_AMD_draw_buffers_blend", o(ARB_draw_buffers_blend), GL, 2009 },
{ "GL_AMD_seamless_cubemap_per_texture", o(AMD_seamless_cubemap_per_texture), GL, 2009 },
{ "GL_AMD_shader_stencil_export", o(ARB_shader_stencil_export), GL, 2009 },
+ { "GL_AMD_vertex_shader_layer", o(AMD_vertex_shader_layer), GL, 2012 },
{ "GL_APPLE_object_purgeable", o(APPLE_object_purgeable), GL, 2006 },
{ "GL_APPLE_packed_pixels", o(dummy_true), GLL, 2002 },
{ "GL_APPLE_texture_max_level", o(dummy_true), ES1 | ES2, 2009 },
@@ -398,7 +401,9 @@ _mesa_enable_sw_extensions(struct gl_context *ctx)
ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
- /*ctx->Extensions.ARB_texture_float = GL_TRUE;*/
+#ifdef TEXTURE_FLOAT_ENABLED
+ ctx->Extensions.ARB_texture_float = GL_TRUE;
+#endif
ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
ctx->Extensions.ARB_texture_rg = GL_TRUE;
ctx->Extensions.ARB_texture_compression_rgtc = GL_TRUE;
diff --git a/mesalib/src/mesa/main/extensions.h b/mesalib/src/mesa/main/extensions.h
index 8acbd4b68..6e99116da 100644
--- a/mesalib/src/mesa/main/extensions.h
+++ b/mesalib/src/mesa/main/extensions.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,7 +38,6 @@
#define _EXTENSIONS_H_
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c
index fc2b2620b..39fa242f7 100644
--- a/mesalib/src/mesa/main/fbobject.c
+++ b/mesalib/src/mesa/main/fbobject.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -42,7 +43,6 @@
#include "glformats.h"
#include "hash.h"
#include "macros.h"
-#include "mfeatures.h"
#include "multisample.h"
#include "mtypes.h"
#include "renderbuffer.h"
@@ -323,12 +323,14 @@ void
_mesa_remove_attachment(struct gl_context *ctx,
struct gl_renderbuffer_attachment *att)
{
+ struct gl_renderbuffer *rb = att->Renderbuffer;
+
+ /* tell driver that we're done rendering to this texture. */
+ if (rb && rb->NeedsFinishRenderTexture)
+ ctx->Driver.FinishRenderTexture(ctx, rb);
+
if (att->Type == GL_TEXTURE) {
ASSERT(att->Texture);
- if (ctx->Driver.FinishRenderTexture) {
- /* tell driver that we're done rendering to this texture. */
- ctx->Driver.FinishRenderTexture(ctx, att);
- }
_mesa_reference_texobj(&att->Texture, NULL); /* unbind */
ASSERT(!att->Texture);
}
@@ -341,6 +343,57 @@ _mesa_remove_attachment(struct gl_context *ctx,
att->Complete = GL_TRUE;
}
+/**
+ * Create a renderbuffer which will be set up by the driver to wrap the
+ * texture image slice.
+ *
+ * By using a gl_renderbuffer (like user-allocated renderbuffers), drivers get
+ * to share most of their framebuffer rendering code between winsys,
+ * renderbuffer, and texture attachments.
+ *
+ * The allocated renderbuffer uses a non-zero Name so that drivers can check
+ * it for determining vertical orientation, but we use ~0 to make it fairly
+ * unambiguous with actual user (non-texture) renderbuffers.
+ */
+void
+_mesa_update_texture_renderbuffer(struct gl_context *ctx,
+ struct gl_framebuffer *fb,
+ struct gl_renderbuffer_attachment *att)
+{
+ struct gl_texture_image *texImage;
+ struct gl_renderbuffer *rb;
+
+ texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+ if (!texImage)
+ return;
+
+ rb = att->Renderbuffer;
+ if (!rb) {
+ rb = ctx->Driver.NewRenderbuffer(ctx, ~0);
+ if (!rb) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()");
+ return;
+ }
+ _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
+
+ /* This can't get called on a texture renderbuffer, so set it to NULL
+ * for clarity compared to user renderbuffers.
+ */
+ rb->AllocStorage = NULL;
+
+ rb->NeedsFinishRenderTexture = ctx->Driver.FinishRenderTexture != NULL;
+ }
+
+ rb->_BaseFormat = texImage->_BaseFormat;
+ rb->Format = texImage->TexFormat;
+ rb->InternalFormat = texImage->InternalFormat;
+ rb->Width = texImage->Width2;
+ rb->Height = texImage->Height2;
+ rb->NumSamples = texImage->NumSamples;
+ rb->TexImage = texImage;
+
+ ctx->Driver.RenderTexture(ctx, fb, att);
+}
/**
* Bind a texture object to an attachment point.
@@ -351,35 +404,35 @@ _mesa_set_texture_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
struct gl_renderbuffer_attachment *att,
struct gl_texture_object *texObj,
- GLenum texTarget, GLuint level, GLuint zoffset)
+ GLenum texTarget, GLuint level, GLuint zoffset,
+ GLboolean layered)
{
+ struct gl_renderbuffer *rb = att->Renderbuffer;
+
+ if (rb && rb->NeedsFinishRenderTexture)
+ ctx->Driver.FinishRenderTexture(ctx, rb);
+
if (att->Texture == texObj) {
/* re-attaching same texture */
ASSERT(att->Type == GL_TEXTURE);
- if (ctx->Driver.FinishRenderTexture)
- ctx->Driver.FinishRenderTexture(ctx, att);
}
else {
/* new attachment */
- if (ctx->Driver.FinishRenderTexture && att->Texture)
- ctx->Driver.FinishRenderTexture(ctx, att);
_mesa_remove_attachment(ctx, att);
att->Type = GL_TEXTURE;
assert(!att->Texture);
_mesa_reference_texobj(&att->Texture, texObj);
}
+ invalidate_framebuffer(fb);
/* always update these fields */
att->TextureLevel = level;
att->CubeMapFace = _mesa_tex_target_to_face(texTarget);
att->Zoffset = zoffset;
+ att->Layered = layered;
att->Complete = GL_FALSE;
- if (_mesa_get_attachment_teximage(att)) {
- ctx->Driver.RenderTexture(ctx, fb, att);
- }
-
- invalidate_framebuffer(fb);
+ _mesa_update_texture_renderbuffer(ctx, fb, att);
}
@@ -775,6 +828,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
GLint fixedSampleLocations = -1;
GLint i;
GLuint j;
+ bool layer_count_valid = false;
+ GLuint layer_count = 0, att_layer_count;
assert(_mesa_is_user_fbo(fb));
@@ -835,8 +890,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
/* get width, height, format of the renderbuffer/texture
*/
if (att->Type == GL_TEXTURE) {
- const struct gl_texture_image *texImg =
- _mesa_get_attachment_teximage(att);
+ const struct gl_texture_image *texImg = att->Renderbuffer->TexImage;
minWidth = MIN2(minWidth, texImg->Width);
maxWidth = MAX2(maxWidth, texImg->Width);
minHeight = MIN2(minHeight, texImg->Height);
@@ -947,8 +1001,26 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fbo_incomplete("unsupported renderbuffer format", i);
return;
}
+
+ /* Check that layered rendering is consistent. */
+ att_layer_count = att->Layered ? att->Renderbuffer->Depth : 0;
+ if (!layer_count_valid) {
+ layer_count = att_layer_count;
+ layer_count_valid = true;
+ } else if (layer_count != att_layer_count) {
+ if (layer_count == 0 || att_layer_count == 0) {
+ fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
+ fbo_incomplete("framebuffer attachment layer mode is inconsistent", i);
+ } else {
+ fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB;
+ fbo_incomplete("framebuffer attachment layer count is inconsistent", i);
+ }
+ return;
+ }
}
+ fb->Layered = layer_count > 0;
+
if (_mesa_is_desktop_gl(ctx) && !ctx->Extensions.ARB_ES2_compatibility) {
/* Check that all DrawBuffers are present */
for (j = 0; j < ctx->Const.MaxDrawBuffers; j++) {
@@ -1790,7 +1862,7 @@ check_begin_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
for (i = 0; i < BUFFER_COUNT; i++) {
struct gl_renderbuffer_attachment *att = fb->Attachment + i;
- if (att->Texture && _mesa_get_attachment_teximage(att)) {
+ if (att->Texture && att->Renderbuffer->TexImage) {
ctx->Driver.RenderTexture(ctx, fb, att);
}
}
@@ -1812,8 +1884,9 @@ check_end_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
GLuint i;
for (i = 0; i < BUFFER_COUNT; i++) {
struct gl_renderbuffer_attachment *att = fb->Attachment + i;
- if (att->Texture && att->Renderbuffer) {
- ctx->Driver.FinishRenderTexture(ctx, att);
+ struct gl_renderbuffer *rb = att->Renderbuffer;
+ if (rb && rb->NeedsFinishRenderTexture) {
+ ctx->Driver.FinishRenderTexture(ctx, rb);
}
}
}
@@ -2103,7 +2176,7 @@ reuse_framebuffer_texture_attachment(struct gl_framebuffer *fb,
static void
framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLint zoffset)
+ GLint level, GLint zoffset, GLboolean layered)
{
struct gl_renderbuffer_attachment *att;
struct gl_texture_object *texObj = NULL;
@@ -2230,7 +2303,7 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
BUFFER_DEPTH);
} else {
_mesa_set_texture_attachment(ctx, fb, att, texObj, textarget,
- level, zoffset);
+ level, zoffset, layered);
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
/* Above we created a new renderbuffer and attached it to the
* depth attachment point. Now attach it to the stencil attachment
@@ -2296,7 +2369,7 @@ _mesa_FramebufferTexture1D(GLenum target, GLenum attachment,
}
framebuffer_texture(ctx, "1D", target, attachment, textarget, texture,
- level, 0);
+ level, 0, GL_FALSE);
}
@@ -2347,7 +2420,7 @@ _mesa_FramebufferTexture2D(GLenum target, GLenum attachment,
}
framebuffer_texture(ctx, "2D", target, attachment, textarget, texture,
- level, 0);
+ level, 0, GL_FALSE);
}
@@ -2365,7 +2438,7 @@ _mesa_FramebufferTexture3D(GLenum target, GLenum attachment,
}
framebuffer_texture(ctx, "3D", target, attachment, textarget, texture,
- level, zoffset);
+ level, zoffset, GL_FALSE);
}
@@ -2376,7 +2449,23 @@ _mesa_FramebufferTextureLayer(GLenum target, GLenum attachment,
GET_CURRENT_CONTEXT(ctx);
framebuffer_texture(ctx, "Layer", target, attachment, 0, texture,
- level, layer);
+ level, layer, GL_FALSE);
+}
+
+
+void GLAPIENTRY
+_mesa_FramebufferTexture(GLenum target, GLenum attachment,
+ GLuint texture, GLint level)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (ctx->Version >= 32 || ctx->Extensions.ARB_geometry_shader4) {
+ framebuffer_texture(ctx, "Layer", target, attachment, 0, texture,
+ level, 0, GL_TRUE);
+ } else {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "unsupported function (glFramebufferTexture) called");
+ }
}
@@ -2725,7 +2814,7 @@ _mesa_GenerateMipmap(GLenum target)
GET_CURRENT_CONTEXT(ctx);
- FLUSH_VERTICES(ctx, _NEW_BUFFERS);
+ FLUSH_VERTICES(ctx, 0);
switch (target) {
case GL_TEXTURE_1D:
@@ -2891,6 +2980,20 @@ compatible_resolve_formats(const struct gl_renderbuffer *readRb,
return GL_FALSE;
}
+static GLboolean
+is_valid_blit_filter(const struct gl_context *ctx, GLenum filter)
+{
+ switch (filter) {
+ case GL_NEAREST:
+ case GL_LINEAR:
+ return true;
+ case GL_SCALED_RESOLVE_FASTEST_EXT:
+ case GL_SCALED_RESOLVE_NICEST_EXT:
+ return ctx->Extensions.EXT_framebuffer_multisample_blit_scaled;
+ default:
+ return false;
+ }
+}
/**
* Blit rectangular region, optionally from one framebuffer to another.
@@ -2909,7 +3012,7 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
const struct gl_framebuffer *readFb, *drawFb;
GET_CURRENT_CONTEXT(ctx);
- FLUSH_VERTICES(ctx, _NEW_BUFFERS);
+ FLUSH_VERTICES(ctx, 0);
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx,
@@ -2940,8 +3043,17 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
return;
}
- if (filter != GL_NEAREST && filter != GL_LINEAR) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(filter)");
+ if (!is_valid_blit_filter(ctx, filter)) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(%s)",
+ _mesa_lookup_enum_by_nr(filter));
+ return;
+ }
+
+ if ((filter == GL_SCALED_RESOLVE_FASTEST_EXT ||
+ filter == GL_SCALED_RESOLVE_NICEST_EXT) &&
+ (readFb->Visual.samples == 0 || drawFb->Visual.samples > 0)) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT(%s)",
+ _mesa_lookup_enum_by_nr(filter));
return;
}
@@ -3013,10 +3125,10 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
}
}
}
- if (filter == GL_LINEAR) {
- /* 3.1 spec, page 199:
+ if (filter != GL_NEAREST) {
+ /* From EXT_framebuffer_multisample_blit_scaled specification:
* "Calling BlitFramebuffer will result in an INVALID_OPERATION error
- * if filter is LINEAR and read buffer contains integer data."
+ * if filter is not NEAREST and read buffer contains integer data."
*/
GLenum type = _mesa_get_format_datatype(colorReadRb->Format);
if (type == GL_INT || type == GL_UNSIGNED_INT) {
@@ -3174,7 +3286,8 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
}
/* extra checks for multisample copies... */
- if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) {
+ if ((readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) &&
+ (filter == GL_NEAREST || filter == GL_LINEAR)) {
/* src and dest region sizes must be the same */
if (abs(srcX1 - srcX0) != abs(dstX1 - dstX0) ||
abs(srcY1 - srcY0) != abs(dstY1 - dstY0)) {
diff --git a/mesalib/src/mesa/main/fbobject.h b/mesalib/src/mesa/main/fbobject.h
index 0358864d7..dfd795a3a 100644
--- a/mesalib/src/mesa/main/fbobject.h
+++ b/mesalib/src/mesa/main/fbobject.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -70,25 +71,6 @@ extern struct gl_renderbuffer_attachment *
_mesa_get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb,
GLenum attachment);
-
-/** Return the texture image for a renderbuffer attachment */
-static inline struct gl_texture_image *
-_mesa_get_attachment_teximage(struct gl_renderbuffer_attachment *att)
-{
- assert(att->Type == GL_TEXTURE);
- return att->Texture->Image[att->CubeMapFace][att->TextureLevel];
-}
-
-
-/** Return the (const) texture image for a renderbuffer attachment */
-static inline const struct gl_texture_image *
-_mesa_get_attachment_teximage_const(const struct gl_renderbuffer_attachment *att)
-{
- assert(att->Type == GL_TEXTURE);
- return att->Texture->Image[att->CubeMapFace][att->TextureLevel];
-}
-
-
extern void
_mesa_remove_attachment(struct gl_context *ctx,
struct gl_renderbuffer_attachment *att);
@@ -98,13 +80,19 @@ _mesa_set_texture_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
struct gl_renderbuffer_attachment *att,
struct gl_texture_object *texObj,
- GLenum texTarget, GLuint level, GLuint zoffset);
+ GLenum texTarget, GLuint level, GLuint zoffset,
+ GLboolean layered);
extern void
_mesa_set_renderbuffer_attachment(struct gl_context *ctx,
struct gl_renderbuffer_attachment *att,
struct gl_renderbuffer *rb);
+void
+_mesa_update_texture_renderbuffer(struct gl_context *ctx,
+ struct gl_framebuffer *fb,
+ struct gl_renderbuffer_attachment *att);
+
extern void
_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
struct gl_framebuffer *fb,
@@ -191,6 +179,10 @@ _mesa_FramebufferTextureLayer(GLenum target, GLenum attachment,
GLuint texture, GLint level, GLint layer);
extern void GLAPIENTRY
+_mesa_FramebufferTexture(GLenum target, GLenum attachment,
+ GLuint texture, GLint level);
+
+extern void GLAPIENTRY
_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer);
diff --git a/mesalib/src/mesa/main/feedback.c b/mesalib/src/mesa/main/feedback.c
index 5d4c6e40d..990d1da6c 100644
--- a/mesalib/src/mesa/main/feedback.c
+++ b/mesalib/src/mesa/main/feedback.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -35,7 +36,6 @@
#include "enums.h"
#include "feedback.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "main/dispatch.h"
diff --git a/mesalib/src/mesa/main/feedback.h b/mesalib/src/mesa/main/feedback.h
index a697dc0d2..48c0efc7d 100644
--- a/mesalib/src/mesa/main/feedback.h
+++ b/mesalib/src/mesa/main/feedback.h
@@ -18,16 +18,16 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef FEEDBACK_H
#define FEEDBACK_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
diff --git a/mesalib/src/mesa/main/ff_fragment_shader.cpp b/mesalib/src/mesa/main/ff_fragment_shader.cpp
index 01a4542d7..91c425be6 100644
--- a/mesalib/src/mesa/main/ff_fragment_shader.cpp
+++ b/mesalib/src/mesa/main/ff_fragment_shader.cpp
@@ -1336,7 +1336,10 @@ create_new_program(struct gl_context *ctx, struct state_key *key)
validate_ir_tree(p.shader->ir);
- while (do_common_optimization(p.shader->ir, false, false, 32))
+ const struct gl_shader_compiler_options *options =
+ &ctx->ShaderCompilerOptions[MESA_SHADER_FRAGMENT];
+
+ while (do_common_optimization(p.shader->ir, false, false, 32, options))
;
reparent_ir(p.shader->ir, p.shader->ir);
diff --git a/mesalib/src/mesa/main/ffvertex_prog.c b/mesalib/src/mesa/main/ffvertex_prog.c
index 093bc6651..be6ac0f2a 100644
--- a/mesalib/src/mesa/main/ffvertex_prog.c
+++ b/mesalib/src/mesa/main/ffvertex_prog.c
@@ -36,7 +36,6 @@
#include "main/glheader.h"
#include "main/mtypes.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/enums.h"
#include "main/ffvertex_prog.h"
#include "program/program.h"
@@ -608,7 +607,6 @@ static void emit_op3fn(struct tnl_program *p,
inst = &p->program->Base.Instructions[nr];
inst->Opcode = (enum prog_opcode) op;
- inst->Data = 0;
emit_arg( &inst->SrcReg[0], src0 );
emit_arg( &inst->SrcReg[1], src1 );
@@ -700,16 +698,11 @@ static void emit_normalize_vec3( struct tnl_program *p,
struct ureg dest,
struct ureg src )
{
-#if 0
- /* XXX use this when drivers are ready for NRM3 */
- emit_op1(p, OPCODE_NRM3, dest, WRITEMASK_XYZ, src);
-#else
struct ureg tmp = get_temp(p);
emit_op2(p, OPCODE_DP3, tmp, WRITEMASK_X, src, src);
emit_op1(p, OPCODE_RSQ, tmp, WRITEMASK_X, tmp);
emit_op2(p, OPCODE_MUL, dest, 0, src, swizzle1(tmp, X));
release_temp(p, tmp);
-#endif
}
@@ -1681,7 +1674,7 @@ _mesa_get_fixed_func_vertex_program(struct gl_context *ctx)
return NULL;
create_new_program( &key, prog,
- ctx->mvp_with_dp4,
+ ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4,
ctx->Const.VertexProgram.MaxTemps );
#if 0
diff --git a/mesalib/src/mesa/main/fog.c b/mesalib/src/mesa/main/fog.c
index 3c5228ad5..7601651c3 100644
--- a/mesalib/src/mesa/main/fog.c
+++ b/mesalib/src/mesa/main/fog.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/fog.h b/mesalib/src/mesa/main/fog.h
index 20a75e96b..6bd1cc5ad 100644
--- a/mesalib/src/mesa/main/fog.h
+++ b/mesalib/src/mesa/main/fog.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -38,7 +39,6 @@
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
diff --git a/mesalib/src/mesa/main/format_pack.c b/mesalib/src/mesa/main/format_pack.c
index 1a14b98b7..826fc10a6 100644
--- a/mesalib/src/mesa/main/format_pack.c
+++ b/mesalib/src/mesa/main/format_pack.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/format_pack.h b/mesalib/src/mesa/main/format_pack.h
index 20b2ad8a5..ebd103d03 100644
--- a/mesalib/src/mesa/main/format_pack.h
+++ b/mesalib/src/mesa/main/format_pack.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/format_unpack.c b/mesalib/src/mesa/main/format_unpack.c
index 0933b4e87..0a8b8b183 100644
--- a/mesalib/src/mesa/main/format_unpack.c
+++ b/mesalib/src/mesa/main/format_unpack.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -610,6 +611,20 @@ unpack_ARGB2101010(const void *src, GLfloat dst[][4], GLuint n)
static void
+unpack_ARGB2101010_UINT(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat)((s[i] >> 20) & 0x3ff);
+ dst[i][GCOMP] = (GLfloat)((s[i] >> 10) & 0x3ff);
+ dst[i][BCOMP] = (GLfloat)((s[i] >> 0) & 0x3ff);
+ dst[i][ACOMP] = (GLfloat)((s[i] >> 30) & 0x03);
+ }
+}
+
+
+static void
unpack_ABGR2101010_UINT(const void *src, GLfloat dst[][4], GLuint n)
{
const GLuint *s = ((const GLuint *) src);
@@ -1060,6 +1075,344 @@ unpack_RG_FLOAT16(const void *src, GLfloat dst[][4], GLuint n)
}
}
+static void
+unpack_ALPHA_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_ALPHA_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_ALPHA_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_ALPHA_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_ALPHA_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_ALPHA_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_INTENSITY_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] =
+ dst[i][ACOMP] = (GLfloat) s[i];
+ }
+}
+
+static void
+unpack_LUMINANCE_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = dst[i][GCOMP] = dst[i][BCOMP] = (GLfloat) s[i];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_LUMINANCE_ALPHA_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] =
+ dst[i][GCOMP] =
+ dst[i][BCOMP] = (GLfloat) s[2*i+0];
+ dst[i][ACOMP] = (GLfloat) s[2*i+1];
+ }
+}
+
+static void
+unpack_R_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_INT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLbyte *s = (const GLbyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
static void
unpack_RGBA_INT8(const void *src, GLfloat dst[][4], GLuint n)
@@ -1075,6 +1428,45 @@ unpack_RGBA_INT8(const void *src, GLfloat dst[][4], GLuint n)
}
static void
+unpack_R_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_INT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLshort *s = (const GLshort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
unpack_RGBA_INT16(const void *src, GLfloat dst[][4], GLuint n)
{
const GLshort *s = (const GLshort *) src;
@@ -1088,6 +1480,46 @@ unpack_RGBA_INT16(const void *src, GLfloat dst[][4], GLuint n)
}
static void
+unpack_R_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_INT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLint *s = (const GLint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+
+static void
unpack_RGBA_INT32(const void *src, GLfloat dst[][4], GLuint n)
{
const GLint *s = (const GLint *) src;
@@ -1101,6 +1533,45 @@ unpack_RGBA_INT32(const void *src, GLfloat dst[][4], GLuint n)
}
static void
+unpack_R_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_UINT8(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLubyte *s = (const GLubyte *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
unpack_RGBA_UINT8(const void *src, GLfloat dst[][4], GLuint n)
{
const GLubyte *s = (const GLubyte *) src;
@@ -1114,6 +1585,45 @@ unpack_RGBA_UINT8(const void *src, GLfloat dst[][4], GLuint n)
}
static void
+unpack_R_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_UINT16(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLushort *s = (const GLushort *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
unpack_RGBA_UINT16(const void *src, GLfloat dst[][4], GLuint n)
{
const GLushort *s = (const GLushort *) src;
@@ -1127,6 +1637,45 @@ unpack_RGBA_UINT16(const void *src, GLfloat dst[][4], GLuint n)
}
static void
+unpack_R_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i];
+ dst[i][GCOMP] = 0.0;
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RG_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*2+0];
+ dst[i][GCOMP] = (GLfloat) s[i*2+1];
+ dst[i][BCOMP] = 0.0;
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
+unpack_RGB_UINT32(const void *src, GLfloat dst[][4], GLuint n)
+{
+ const GLuint *s = (const GLuint *) src;
+ GLuint i;
+ for (i = 0; i < n; i++) {
+ dst[i][RCOMP] = (GLfloat) s[i*3+0];
+ dst[i][GCOMP] = (GLfloat) s[i*3+1];
+ dst[i][BCOMP] = (GLfloat) s[i*3+2];
+ dst[i][ACOMP] = 1.0;
+ }
+}
+
+static void
unpack_RGBA_UINT32(const void *src, GLfloat dst[][4], GLuint n)
{
const GLuint *s = (const GLuint *) src;
@@ -1770,6 +2319,7 @@ get_unpack_rgba_function(gl_format format)
table[MESA_FORMAT_GR1616] = unpack_GR1616;
table[MESA_FORMAT_RG1616] = unpack_RG1616;
table[MESA_FORMAT_ARGB2101010] = unpack_ARGB2101010;
+ table[MESA_FORMAT_ARGB2101010_UINT] = unpack_ARGB2101010_UINT;
table[MESA_FORMAT_ABGR2101010_UINT] = unpack_ABGR2101010_UINT;
table[MESA_FORMAT_Z24_S8] = unpack_Z24_S8;
table[MESA_FORMAT_S8_Z24] = unpack_S8_Z24;
@@ -1812,11 +2362,57 @@ get_unpack_rgba_function(gl_format format)
table[MESA_FORMAT_RG_FLOAT32] = unpack_RG_FLOAT32;
table[MESA_FORMAT_RG_FLOAT16] = unpack_RG_FLOAT16;
+ table[MESA_FORMAT_ALPHA_UINT8] = unpack_ALPHA_UINT8;
+ table[MESA_FORMAT_ALPHA_UINT16] = unpack_ALPHA_UINT16;
+ table[MESA_FORMAT_ALPHA_UINT32] = unpack_ALPHA_UINT32;
+ table[MESA_FORMAT_ALPHA_INT8] = unpack_ALPHA_INT8;
+ table[MESA_FORMAT_ALPHA_INT16] = unpack_ALPHA_INT16;
+ table[MESA_FORMAT_ALPHA_INT32] = unpack_ALPHA_INT32;
+
+ table[MESA_FORMAT_INTENSITY_UINT8] = unpack_INTENSITY_UINT8;
+ table[MESA_FORMAT_INTENSITY_UINT16] = unpack_INTENSITY_UINT16;
+ table[MESA_FORMAT_INTENSITY_UINT32] = unpack_INTENSITY_UINT32;
+ table[MESA_FORMAT_INTENSITY_INT8] = unpack_INTENSITY_INT8;
+ table[MESA_FORMAT_INTENSITY_INT16] = unpack_INTENSITY_INT16;
+ table[MESA_FORMAT_INTENSITY_INT32] = unpack_INTENSITY_INT32;
+
+ table[MESA_FORMAT_LUMINANCE_UINT8] = unpack_LUMINANCE_UINT8;
+ table[MESA_FORMAT_LUMINANCE_UINT16] = unpack_LUMINANCE_UINT16;
+ table[MESA_FORMAT_LUMINANCE_UINT32] = unpack_LUMINANCE_UINT32;
+ table[MESA_FORMAT_LUMINANCE_INT8] = unpack_LUMINANCE_INT8;
+ table[MESA_FORMAT_LUMINANCE_INT16] = unpack_LUMINANCE_INT16;
+ table[MESA_FORMAT_LUMINANCE_INT32] = unpack_LUMINANCE_INT32;
+
+ table[MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = unpack_LUMINANCE_ALPHA_UINT8;
+ table[MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = unpack_LUMINANCE_ALPHA_UINT16;
+ table[MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = unpack_LUMINANCE_ALPHA_UINT32;
+ table[MESA_FORMAT_LUMINANCE_ALPHA_INT8] = unpack_LUMINANCE_ALPHA_INT8;
+ table[MESA_FORMAT_LUMINANCE_ALPHA_INT16] = unpack_LUMINANCE_ALPHA_INT16;
+ table[MESA_FORMAT_LUMINANCE_ALPHA_INT32] = unpack_LUMINANCE_ALPHA_INT32;
+
+ table[MESA_FORMAT_R_INT8] = unpack_R_INT8;
+ table[MESA_FORMAT_RG_INT8] = unpack_RG_INT8;
+ table[MESA_FORMAT_RGB_INT8] = unpack_RGB_INT8;
table[MESA_FORMAT_RGBA_INT8] = unpack_RGBA_INT8;
+ table[MESA_FORMAT_R_INT16] = unpack_R_INT16;
+ table[MESA_FORMAT_RG_INT16] = unpack_RG_INT16;
+ table[MESA_FORMAT_RGB_INT16] = unpack_RGB_INT16;
table[MESA_FORMAT_RGBA_INT16] = unpack_RGBA_INT16;
+ table[MESA_FORMAT_R_INT32] = unpack_R_INT32;
+ table[MESA_FORMAT_RG_INT32] = unpack_RG_INT32;
+ table[MESA_FORMAT_RGB_INT32] = unpack_RGB_INT32;
table[MESA_FORMAT_RGBA_INT32] = unpack_RGBA_INT32;
+ table[MESA_FORMAT_R_UINT8] = unpack_R_UINT8;
+ table[MESA_FORMAT_RG_UINT8] = unpack_RG_UINT8;
+ table[MESA_FORMAT_RGB_UINT8] = unpack_RGB_UINT8;
table[MESA_FORMAT_RGBA_UINT8] = unpack_RGBA_UINT8;
+ table[MESA_FORMAT_R_UINT16] = unpack_R_UINT16;
+ table[MESA_FORMAT_RG_UINT16] = unpack_RG_UINT16;
+ table[MESA_FORMAT_RGB_UINT16] = unpack_RGB_UINT16;
table[MESA_FORMAT_RGBA_UINT16] = unpack_RGBA_UINT16;
+ table[MESA_FORMAT_R_UINT32] = unpack_R_UINT32;
+ table[MESA_FORMAT_RG_UINT32] = unpack_RG_UINT32;
+ table[MESA_FORMAT_RGB_UINT32] = unpack_RGB_UINT32;
table[MESA_FORMAT_RGBA_UINT32] = unpack_RGBA_UINT32;
table[MESA_FORMAT_DUDV8] = unpack_DUDV8;
@@ -1852,7 +2448,7 @@ get_unpack_rgba_function(gl_format format)
table[MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = unpack_ETC2_SIGNED_RG11_EAC;
table[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] =
unpack_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
- table[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] =
+ table[MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] =
unpack_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
table[MESA_FORMAT_SIGNED_A8] = unpack_SIGNED_A8;
table[MESA_FORMAT_SIGNED_L8] = unpack_SIGNED_L8;
diff --git a/mesalib/src/mesa/main/format_unpack.h b/mesalib/src/mesa/main/format_unpack.h
index 29c526319..1da03caa8 100644
--- a/mesalib/src/mesa/main/format_unpack.h
+++ b/mesalib/src/mesa/main/format_unpack.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
#ifndef FORMAT_UNPACK_H
diff --git a/mesalib/src/mesa/main/formatquery.c b/mesalib/src/mesa/main/formatquery.c
index e45dc8680..40eca8711 100644
--- a/mesalib/src/mesa/main/formatquery.c
+++ b/mesalib/src/mesa/main/formatquery.c
@@ -25,7 +25,6 @@
#include "context.h"
#include "glformats.h"
#include "macros.h"
-#include "mfeatures.h"
#include "enums.h"
#include "fbobject.h"
#include "formatquery.h"
diff --git a/mesalib/src/mesa/main/formats.c b/mesalib/src/mesa/main/formats.c
index 68ce98430..fee52c1ea 100644
--- a/mesalib/src/mesa/main/formats.c
+++ b/mesalib/src/mesa/main/formats.c
@@ -18,15 +18,15 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "imports.h"
#include "formats.h"
-#include "mfeatures.h"
#include "macros.h"
#include "glformats.h"
diff --git a/mesalib/src/mesa/main/formats.h b/mesalib/src/mesa/main/formats.h
index 2961ffa9f..8dd71a086 100644
--- a/mesalib/src/mesa/main/formats.h
+++ b/mesalib/src/mesa/main/formats.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
@@ -288,21 +289,21 @@ typedef enum
MESA_FORMAT_ARGB2101010_UINT,
MESA_FORMAT_ABGR2101010_UINT,
- MESA_FORMAT_XRGB4444_UNORM,
- MESA_FORMAT_XRGB1555_UNORM,
- MESA_FORMAT_XBGR8888_SNORM,
- MESA_FORMAT_XBGR8888_SRGB,
- MESA_FORMAT_XBGR8888_UINT,
- MESA_FORMAT_XBGR8888_SINT,
- MESA_FORMAT_XRGB2101010_UNORM,
- MESA_FORMAT_XBGR16161616_UNORM,
- MESA_FORMAT_XBGR16161616_SNORM,
- MESA_FORMAT_XBGR16161616_FLOAT,
- MESA_FORMAT_XBGR16161616_UINT,
- MESA_FORMAT_XBGR16161616_SINT,
- MESA_FORMAT_XBGR32323232_FLOAT,
- MESA_FORMAT_XBGR32323232_UINT,
- MESA_FORMAT_XBGR32323232_SINT,
+ MESA_FORMAT_XRGB4444_UNORM, /* xxxx RRRR GGGG BBBB */
+ MESA_FORMAT_XRGB1555_UNORM, /* xRRR RRGG GGGB BBBB */
+ MESA_FORMAT_XBGR8888_SNORM, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
+ MESA_FORMAT_XBGR8888_SRGB, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
+ MESA_FORMAT_XBGR8888_UINT, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
+ MESA_FORMAT_XBGR8888_SINT, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
+ MESA_FORMAT_XRGB2101010_UNORM, /* xxRR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */
+ MESA_FORMAT_XBGR16161616_UNORM,/* ushort[3]=x, [2]=B, [1]=G, [0]=R */
+ MESA_FORMAT_XBGR16161616_SNORM,/* ... */
+ MESA_FORMAT_XBGR16161616_FLOAT,/* ... */
+ MESA_FORMAT_XBGR16161616_UINT, /* ... */
+ MESA_FORMAT_XBGR16161616_SINT, /* ... */
+ MESA_FORMAT_XBGR32323232_FLOAT,/* float[3]=x, [2]=B, [1]=G, [0]=R */
+ MESA_FORMAT_XBGR32323232_UINT, /* ... */
+ MESA_FORMAT_XBGR32323232_SINT, /* ... */
MESA_FORMAT_COUNT
} gl_format;
diff --git a/mesalib/src/mesa/main/framebuffer.c b/mesalib/src/mesa/main/framebuffer.c
index 6c6977431..0337b8b08 100644
--- a/mesalib/src/mesa/main/framebuffer.c
+++ b/mesalib/src/mesa/main/framebuffer.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -877,18 +878,29 @@ _mesa_dest_buffer_exists(struct gl_context *ctx, GLenum format)
GLenum
_mesa_get_color_read_format(struct gl_context *ctx)
{
- const GLenum data_type = _mesa_get_format_datatype(
- ctx->ReadBuffer->_ColorReadBuffer->Format);
-
- switch (ctx->ReadBuffer->_ColorReadBuffer->Format) {
- case MESA_FORMAT_ARGB8888:
- return GL_BGRA;
- case MESA_FORMAT_RGB565:
- return GL_BGR;
- default:
- if (data_type == GL_UNSIGNED_INT || data_type == GL_INT) {
+ if (!ctx->ReadBuffer || !ctx->ReadBuffer->_ColorReadBuffer) {
+ /* The spec is unclear how to handle this case, but NVIDIA's
+ * driver generates GL_INVALID_OPERATION.
+ */
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT: "
+ "no GL_READ_BUFFER)");
+ return GL_NONE;
+ }
+ else {
+ const GLenum format = ctx->ReadBuffer->_ColorReadBuffer->Format;
+ const GLenum data_type = _mesa_get_format_datatype(format);
+
+ if (format == MESA_FORMAT_ARGB8888)
+ return GL_BGRA;
+ else if (format == MESA_FORMAT_RGB565)
+ return GL_BGR;
+
+ switch (data_type) {
+ case GL_UNSIGNED_INT:
+ case GL_INT:
return GL_RGBA_INTEGER;
- } else {
+ default:
return GL_RGBA;
}
}
@@ -901,26 +913,33 @@ _mesa_get_color_read_format(struct gl_context *ctx)
GLenum
_mesa_get_color_read_type(struct gl_context *ctx)
{
- const GLenum data_type = _mesa_get_format_datatype(
- ctx->ReadBuffer->_ColorReadBuffer->Format);
-
- switch (ctx->ReadBuffer->_ColorReadBuffer->Format) {
- case MESA_FORMAT_RGB565:
- return GL_UNSIGNED_SHORT_5_6_5_REV;
- default:
- break;
+ if (!ctx->ReadBuffer || !ctx->ReadBuffer->_ColorReadBuffer) {
+ /* The spec is unclear how to handle this case, but NVIDIA's
+ * driver generates GL_INVALID_OPERATION.
+ */
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE: "
+ "no GL_READ_BUFFER)");
+ return GL_NONE;
}
-
- switch (data_type) {
- case GL_SIGNED_NORMALIZED:
- return GL_BYTE;
- case GL_UNSIGNED_INT:
- case GL_INT:
- case GL_FLOAT:
- return data_type;
- case GL_UNSIGNED_NORMALIZED:
- default:
- return GL_UNSIGNED_BYTE;
+ else {
+ const GLenum format = ctx->ReadBuffer->_ColorReadBuffer->Format;
+ const GLenum data_type = _mesa_get_format_datatype(format);
+
+ if (format == MESA_FORMAT_RGB565)
+ return GL_UNSIGNED_SHORT_5_6_5_REV;
+
+ switch (data_type) {
+ case GL_SIGNED_NORMALIZED:
+ return GL_BYTE;
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_FLOAT:
+ return data_type;
+ case GL_UNSIGNED_NORMALIZED:
+ default:
+ return GL_UNSIGNED_BYTE;
+ }
}
}
@@ -961,8 +980,7 @@ _mesa_print_framebuffer(const struct gl_framebuffer *fb)
for (i = 0; i < BUFFER_COUNT; i++) {
const struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
if (att->Type == GL_TEXTURE) {
- const struct gl_texture_image *texImage =
- _mesa_get_attachment_teximage_const(att);
+ const struct gl_texture_image *texImage = att->Renderbuffer->TexImage;
fprintf(stderr,
" %2d: Texture %u, level %u, face %u, slice %u, complete %d\n",
i, att->Texture->Name, att->TextureLevel, att->CubeMapFace,
diff --git a/mesalib/src/mesa/main/framebuffer.h b/mesalib/src/mesa/main/framebuffer.h
index 9b94452d6..962f2a4e2 100644
--- a/mesalib/src/mesa/main/framebuffer.h
+++ b/mesalib/src/mesa/main/framebuffer.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c
index 2ba868c0d..593c75be2 100644
--- a/mesalib/src/mesa/main/get.c
+++ b/mesalib/src/mesa/main/get.c
@@ -15,9 +15,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Author: Kristian Høgsberg <krh@bitplanet.net>
*/
@@ -30,12 +31,12 @@
#include "extensions.h"
#include "get.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "state.h"
#include "texcompress.h"
#include "framebuffer.h"
#include "samplerobj.h"
+#include "stencil.h"
/* This is a table driven implemetation of the glGet*v() functions.
* The basic idea is that most getters just look up an int somewhere
@@ -141,6 +142,7 @@ enum value_extra {
EXTRA_VALID_CLIP_DISTANCE,
EXTRA_FLUSH_CURRENT,
EXTRA_GLSL_130,
+ EXTRA_EXT_UBO_GS4,
};
#define NO_EXTRA NULL
@@ -226,7 +228,13 @@ union value {
* extensions or specific gl versions) or actions (flush current, new
* buffers) that we need to do before looking up an enum. We need to
* declare them all up front so we can refer to them in the value_desc
- * structs below. */
+ * structs below.
+ *
+ * Each EXTRA_ will be executed. For EXTRA_* enums of extensions and API
+ * versions, listing multiple ones in an array means an error will be thrown
+ * only if none of them are available. If you need to check for "AND"
+ * behavior, you would need to make a custom EXTRA_ enum.
+ */
static const int extra_new_buffers[] = {
EXTRA_NEW_BUFFERS,
@@ -281,6 +289,12 @@ static const int extra_EXT_texture_integer[] = {
EXTRA_END
};
+static const int extra_EXT_texture_integer_and_new_buffers[] = {
+ EXT(EXT_texture_integer),
+ EXTRA_NEW_BUFFERS,
+ EXTRA_END
+};
+
static const int extra_GLSL_130[] = {
EXTRA_GLSL_130,
EXTRA_END
@@ -300,8 +314,7 @@ static const int extra_ARB_transform_feedback2_api_es3[] = {
};
static const int extra_ARB_uniform_buffer_object_and_geometry_shader[] = {
- EXT(ARB_uniform_buffer_object),
- EXT(ARB_geometry_shader4),
+ EXTRA_EXT_UBO_GS4,
EXTRA_END
};
@@ -317,6 +330,12 @@ static const int extra_ARB_ES3_compatibility_api_es3[] = {
EXTRA_END
};
+static const int extra_EXT_framebuffer_sRGB_and_new_buffers[] = {
+ EXT(EXT_framebuffer_sRGB),
+ EXTRA_NEW_BUFFERS,
+ EXTRA_END
+};
+
EXTRA_EXT(ARB_texture_cube_map);
EXTRA_EXT(MESA_texture_array);
EXTRA_EXT2(EXT_secondary_color, ARB_vertex_program);
@@ -397,6 +416,13 @@ extra_NV_read_buffer_api_gl[] = {
EXTRA_END
};
+static const int extra_core_ARB_color_buffer_float_and_new_buffers[] = {
+ EXTRA_API_GL_CORE,
+ EXT(ARB_color_buffer_float),
+ EXTRA_NEW_BUFFERS,
+ EXTRA_END
+};
+
/* This is the big table describing all the enums we accept in
* glGet*v(). The table is partitioned into six parts: enums
* understood by all GL APIs (OpenGL, GLES and GLES2), enums shared
@@ -404,8 +430,7 @@ extra_NV_read_buffer_api_gl[] = {
* remaining combinations. To look up the enums valid in a given API
* we will use a hash table specific to that API. These tables are in
* turn generated at build time and included through get_hash.h.
- * The different sections are guarded by #if FEATURE_GL etc to make
- * sure we only compile in the enums we may need. */
+ */
#include "get_hash.h"
@@ -651,7 +676,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
v->value_enum = ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace];
break;
case GL_STENCIL_REF:
- v->value_int = ctx->Stencil.Ref[ctx->Stencil.ActiveFace];
+ v->value_int = _mesa_get_stencil_ref(ctx, ctx->Stencil.ActiveFace);
+ break;
+ case GL_STENCIL_BACK_REF:
+ v->value_int = _mesa_get_stencil_ref(ctx, 1);
break;
case GL_STENCIL_VALUE_MASK:
v->value_int = ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace];
@@ -883,58 +911,50 @@ static GLboolean
check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d)
{
const GLuint version = ctx->Version;
- int total, enabled;
+ GLboolean api_check = GL_FALSE;
+ GLboolean api_found = GL_FALSE;
const int *e;
- total = 0;
- enabled = 0;
- for (e = d->extra; *e != EXTRA_END; e++)
+ for (e = d->extra; *e != EXTRA_END; e++) {
switch (*e) {
case EXTRA_VERSION_30:
- if (version >= 30) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (version >= 30)
+ api_found = GL_TRUE;
break;
case EXTRA_VERSION_31:
- if (version >= 31) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (version >= 31)
+ api_found = GL_TRUE;
break;
case EXTRA_VERSION_32:
- if (version >= 32) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (version >= 32)
+ api_found = GL_TRUE;
break;
case EXTRA_NEW_FRAG_CLAMP:
if (ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP))
_mesa_update_state(ctx);
break;
case EXTRA_API_ES2:
- if (ctx->API == API_OPENGLES2) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (ctx->API == API_OPENGLES2)
+ api_found = GL_TRUE;
break;
case EXTRA_API_ES3:
- if (_mesa_is_gles3(ctx)) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (_mesa_is_gles3(ctx))
+ api_found = GL_TRUE;
break;
case EXTRA_API_GL:
- if (_mesa_is_desktop_gl(ctx)) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (_mesa_is_desktop_gl(ctx))
+ api_found = GL_TRUE;
break;
case EXTRA_API_GL_CORE:
- if (ctx->API == API_OPENGL_CORE) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (ctx->API == API_OPENGL_CORE)
+ api_found = GL_TRUE;
break;
case EXTRA_NEW_BUFFERS:
if (ctx->NewState & _NEW_BUFFERS)
@@ -965,21 +985,26 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d
}
break;
case EXTRA_GLSL_130:
- if (ctx->Const.GLSLVersion >= 130) {
- total++;
- enabled++;
- }
+ api_check = GL_TRUE;
+ if (ctx->Const.GLSLVersion >= 130)
+ api_found = GL_TRUE;
break;
+ case EXTRA_EXT_UBO_GS4:
+ api_check = GL_TRUE;
+ api_found = (ctx->Extensions.ARB_uniform_buffer_object &&
+ ctx->Extensions.ARB_geometry_shader4);
+ break;
case EXTRA_END:
break;
default: /* *e is a offset into the extension struct */
- total++;
+ api_check = GL_TRUE;
if (*(GLboolean *) ((char *) &ctx->Extensions + *e))
- enabled++;
+ api_found = GL_TRUE;
break;
}
+ }
- if (total > 0 && enabled == 0) {
+ if (api_check && !api_found) {
_mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=%s)", func,
_mesa_lookup_enum_by_nr(d->pname));
return GL_FALSE;
diff --git a/mesalib/src/mesa/main/get.h b/mesalib/src/mesa/main/get.h
index 6b0158f37..f58bb9409 100644
--- a/mesalib/src/mesa/main/get.h
+++ b/mesalib/src/mesa/main/get.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/get_hash_generator.py b/mesalib/src/mesa/main/get_hash_generator.py
index 04bf9ffe6..96bc49587 100644
--- a/mesalib/src/mesa/main/get_hash_generator.py
+++ b/mesalib/src/mesa/main/get_hash_generator.py
@@ -179,54 +179,34 @@ def generate_hash_tables(enum_list, enabled_apis, param_descriptors):
return params, merge_tables(sorted_tables)
-def opt_to_apis(feature):
- _map = {"ES1": "GLES", "ES2": "GLES2", "GL": "GL"}
- if feature not in _map:
- return None
-
- apis = set([_map[feature]])
- if "GL" in apis:
- apis.add("GL_CORE")
- if "GLES2" in apis:
- apis.add("GLES3")
-
- return apis
def show_usage():
sys.stderr.write(
"""Usage: %s [OPTIONS]
-f <file> specify GL API XML file
- -a [GL|ES1|ES2] specify APIs to generate hash tables for
""" % (program))
exit(1)
if __name__ == '__main__':
try:
- (opts, args) = getopt.getopt(sys.argv[1:], "f:a:")
+ (opts, args) = getopt.getopt(sys.argv[1:], "f:")
except Exception,e:
show_usage()
if len(args) != 0:
show_usage()
- enabled_apis = set([])
api_desc_file = ""
for opt_name, opt_val in opts:
if opt_name == "-f":
api_desc_file = opt_val
- if opt_name == "-a":
- apis = opt_to_apis(opt_val.upper())
- if not apis:
- die("invalid API %s\n" % opt_val)
-
- enabled_apis |= apis
if not api_desc_file:
die("missing descriptor file (-f)\n")
- if len(enabled_apis) == 0:
- die("need at least a single enabled API\n")
+ # generate the code for all APIs
+ enabled_apis = set(["GLES", "GLES2", "GLES3", "GL", "GL_CORE"])
try:
api_desc = gl_XML.parse_GL_API(api_desc_file)
diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py
index 4ef23247b..ef1ab02e1 100644
--- a/mesalib/src/mesa/main/get_hash_params.py
+++ b/mesalib/src/mesa/main/get_hash_params.py
@@ -8,7 +8,7 @@ descriptor=[
[ "COLOR_WRITEMASK", "LOC_CUSTOM, TYPE_INT_4, 0, NO_EXTRA" ],
[ "CULL_FACE", "CONTEXT_BOOL(Polygon.CullFlag), NO_EXTRA" ],
[ "CULL_FACE_MODE", "CONTEXT_ENUM(Polygon.CullFaceMode), NO_EXTRA" ],
- [ "DEPTH_BITS", "BUFFER_INT(Visual.depthBits), NO_EXTRA" ],
+ [ "DEPTH_BITS", "BUFFER_INT(Visual.depthBits), extra_new_buffers" ],
[ "DEPTH_CLEAR_VALUE", "CONTEXT_FIELD(Depth.Clear, TYPE_DOUBLEN), NO_EXTRA" ],
[ "DEPTH_FUNC", "CONTEXT_ENUM(Depth.Func), NO_EXTRA" ],
[ "DEPTH_RANGE", "CONTEXT_FIELD(Viewport.Near, TYPE_FLOATN_2), NO_EXTRA" ],
@@ -31,7 +31,7 @@ descriptor=[
[ "RED_BITS", "BUFFER_INT(Visual.redBits), extra_new_buffers" ],
[ "SCISSOR_BOX", "LOC_CUSTOM, TYPE_INT_4, 0, NO_EXTRA" ],
[ "SCISSOR_TEST", "CONTEXT_BOOL(Scissor.Enabled), NO_EXTRA" ],
- [ "STENCIL_BITS", "BUFFER_INT(Visual.stencilBits), NO_EXTRA" ],
+ [ "STENCIL_BITS", "BUFFER_INT(Visual.stencilBits), extra_new_buffers" ],
[ "STENCIL_CLEAR_VALUE", "CONTEXT_INT(Stencil.Clear), NO_EXTRA" ],
[ "STENCIL_FAIL", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
[ "STENCIL_FUNC", "LOC_CUSTOM, TYPE_ENUM, NO_OFFSET, NO_EXTRA" ],
@@ -80,8 +80,8 @@ descriptor=[
[ "SAMPLE_COVERAGE_ARB", "CONTEXT_BOOL(Multisample.SampleCoverage), NO_EXTRA" ],
[ "SAMPLE_COVERAGE_VALUE_ARB", "CONTEXT_FLOAT(Multisample.SampleCoverageValue), NO_EXTRA" ],
[ "SAMPLE_COVERAGE_INVERT_ARB", "CONTEXT_BOOL(Multisample.SampleCoverageInvert), NO_EXTRA" ],
- [ "SAMPLE_BUFFERS_ARB", "BUFFER_INT(Visual.sampleBuffers), NO_EXTRA" ],
- [ "SAMPLES_ARB", "BUFFER_INT(Visual.samples), NO_EXTRA" ],
+ [ "SAMPLE_BUFFERS_ARB", "BUFFER_INT(Visual.sampleBuffers), extra_new_buffers" ],
+ [ "SAMPLES_ARB", "BUFFER_INT(Visual.samples), extra_new_buffers" ],
# GL_SGIS_generate_mipmap
[ "GENERATE_MIPMAP_HINT_SGIS", "CONTEXT_ENUM(Hint.GenerateMipmap), NO_EXTRA" ],
@@ -273,8 +273,8 @@ descriptor=[
# GL_ARB_fragment_program
# == GL_MAX_TEXTURE_IMAGE_UNITS_NV
- [ "MAX_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.MaxTextureImageUnits), extra_ARB_fragment_program" ],
- [ "MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.MaxVertexTextureImageUnits), extra_ARB_vertex_shader" ],
+ [ "MAX_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.FragmentProgram.MaxTextureImageUnits), extra_ARB_fragment_program" ],
+ [ "MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.VertexProgram.MaxTextureImageUnits), extra_ARB_vertex_shader" ],
[ "MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.MaxCombinedTextureImageUnits), extra_ARB_vertex_shader" ],
# GL_ARB_shader_objects
@@ -286,7 +286,7 @@ descriptor=[
[ "STENCIL_BACK_FUNC", "CONTEXT_ENUM(Stencil.Function[1]), NO_EXTRA" ],
[ "STENCIL_BACK_VALUE_MASK", "CONTEXT_INT(Stencil.ValueMask[1]), NO_EXTRA" ],
[ "STENCIL_BACK_WRITEMASK", "CONTEXT_INT(Stencil.WriteMask[1]), NO_EXTRA" ],
- [ "STENCIL_BACK_REF", "CONTEXT_INT(Stencil.Ref[1]), NO_EXTRA" ],
+ [ "STENCIL_BACK_REF", "LOC_CUSTOM, TYPE_INT, NO_OFFSET, NO_EXTRA" ],
[ "STENCIL_BACK_FAIL", "CONTEXT_ENUM(Stencil.FailFunc[1]), NO_EXTRA" ],
[ "STENCIL_BACK_PASS_DEPTH_FAIL", "CONTEXT_ENUM(Stencil.ZFailFunc[1]), NO_EXTRA" ],
[ "STENCIL_BACK_PASS_DEPTH_PASS", "CONTEXT_ENUM(Stencil.ZPassFunc[1]), NO_EXTRA" ],
@@ -630,22 +630,22 @@ descriptor=[
[ "TEXTURE_CUBE_MAP_SEAMLESS", "CONTEXT_BOOL(Texture.CubeMapSeamless), extra_ARB_seamless_cube_map" ],
# GL_EXT_texture_integer
- [ "RGBA_INTEGER_MODE_EXT", "BUFFER_BOOL(_IntegerColor), extra_EXT_texture_integer" ],
+ [ "RGBA_INTEGER_MODE_EXT", "BUFFER_BOOL(_IntegerColor), extra_EXT_texture_integer_and_new_buffers" ],
# GL_ARB_transform_feedback3
[ "MAX_TRANSFORM_FEEDBACK_BUFFERS", "CONTEXT_INT(Const.MaxTransformFeedbackBuffers), extra_ARB_transform_feedback3" ],
[ "MAX_VERTEX_STREAMS", "CONTEXT_INT(Const.MaxVertexStreams), extra_ARB_transform_feedback3" ],
# GL_ARB_geometry_shader4
- [ "MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.MaxGeometryTextureImageUnits), extra_ARB_geometry_shader4" ],
+ [ "MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.GeometryProgram.MaxTextureImageUnits), extra_ARB_geometry_shader4" ],
[ "MAX_GEOMETRY_OUTPUT_VERTICES_ARB", "CONTEXT_INT(Const.MaxGeometryOutputVertices), extra_ARB_geometry_shader4" ],
[ "MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxGeometryTotalOutputComponents), extra_ARB_geometry_shader4" ],
[ "MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB", "CONTEXT_INT(Const.GeometryProgram.MaxUniformComponents), extra_ARB_geometry_shader4" ],
- [ "MAX_GEOMETRY_VARYING_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxGeometryVaryingComponents), extra_ARB_geometry_shader4" ],
- [ "MAX_VERTEX_VARYING_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxVertexVaryingComponents), extra_ARB_geometry_shader4" ],
+ [ "MAX_GEOMETRY_VARYING_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxVaryingComponents), extra_ARB_geometry_shader4" ],
+ [ "MAX_VERTEX_VARYING_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxVaryingComponents), extra_ARB_geometry_shader4" ],
# GL_ARB_color_buffer_float
- [ "RGBA_FLOAT_MODE_ARB", "BUFFER_FIELD(Visual.floatMode, TYPE_BOOLEAN), 0" ],
+ [ "RGBA_FLOAT_MODE_ARB", "BUFFER_FIELD(Visual.floatMode, TYPE_BOOLEAN), extra_core_ARB_color_buffer_float_and_new_buffers" ],
# GL_EXT_gpu_shader4 / GLSL 1.30
[ "MIN_PROGRAM_TEXEL_OFFSET", "CONTEXT_INT(Const.MinProgramTexelOffset), extra_GLSL_130" ],
@@ -676,7 +676,7 @@ descriptor=[
# GL3.0 / GL_EXT_framebuffer_sRGB
[ "FRAMEBUFFER_SRGB_EXT", "CONTEXT_BOOL(Color.sRGBEnabled), extra_EXT_framebuffer_sRGB" ],
- [ "FRAMEBUFFER_SRGB_CAPABLE_EXT", "BUFFER_INT(Visual.sRGBCapable), extra_EXT_framebuffer_sRGB" ],
+ [ "FRAMEBUFFER_SRGB_CAPABLE_EXT", "BUFFER_INT(Visual.sRGBCapable), extra_EXT_framebuffer_sRGB_and_new_buffers" ],
# GL 3.1
# NOTE: different enum values for GL_PRIMITIVE_RESTART_NV
diff --git a/mesalib/src/mesa/main/getstring.c b/mesalib/src/mesa/main/getstring.c
index 5280b4dd3..52985f148 100644
--- a/mesalib/src/mesa/main/getstring.c
+++ b/mesalib/src/mesa/main/getstring.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "get.h"
#include "enums.h"
#include "extensions.h"
-#include "mfeatures.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/glformats.c b/mesalib/src/mesa/main/glformats.c
index c1e16587a..dfee6f196 100644
--- a/mesalib/src/mesa/main/glformats.c
+++ b/mesalib/src/mesa/main/glformats.c
@@ -18,9 +18,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/glformats.h b/mesalib/src/mesa/main/glformats.h
index cdd2b9427..af1089931 100644
--- a/mesalib/src/mesa/main/glformats.h
+++ b/mesalib/src/mesa/main/glformats.h
@@ -18,9 +18,10 @@
* 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 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.
+ * 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.
*/
#ifndef GLFORMATS_H
diff --git a/mesalib/src/mesa/main/glheader.h b/mesalib/src/mesa/main/glheader.h
index e93ca30e7..fd6985118 100644
--- a/mesalib/src/mesa/main/glheader.h
+++ b/mesalib/src/mesa/main/glheader.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/hash.c b/mesalib/src/mesa/main/hash.c
index 8c763e20a..e38158c75 100644
--- a/mesalib/src/mesa/main/hash.c
+++ b/mesalib/src/mesa/main/hash.c
@@ -29,9 +29,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "glheader.h"
@@ -114,9 +115,9 @@ _mesa_NewHashTable(void)
{
struct _mesa_HashTable *table = CALLOC_STRUCT(_mesa_HashTable);
- table->ht = _mesa_hash_table_create(NULL, uint_key_compare);
- _mesa_hash_table_set_deleted_key(table->ht, uint_key(DELETED_KEY_VALUE));
if (table) {
+ table->ht = _mesa_hash_table_create(NULL, uint_key_compare);
+ _mesa_hash_table_set_deleted_key(table->ht, uint_key(DELETED_KEY_VALUE));
_glthread_INIT_MUTEX(table->Mutex);
_glthread_INIT_MUTEX(table->WalkMutex);
}
diff --git a/mesalib/src/mesa/main/hash.h b/mesalib/src/mesa/main/hash.h
index cdaa7669a..a3171df6b 100644
--- a/mesalib/src/mesa/main/hash.h
+++ b/mesalib/src/mesa/main/hash.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/hint.c b/mesalib/src/mesa/main/hint.c
index c2560192a..ed0394bc8 100644
--- a/mesalib/src/mesa/main/hint.c
+++ b/mesalib/src/mesa/main/hint.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/hint.h b/mesalib/src/mesa/main/hint.h
index ca9659d58..f702fbf51 100644
--- a/mesalib/src/mesa/main/hint.h
+++ b/mesalib/src/mesa/main/hint.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,7 +38,6 @@
#define HINT_H
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
diff --git a/mesalib/src/mesa/main/histogram.c b/mesalib/src/mesa/main/histogram.c
index fe454bcfb..88440ad71 100644
--- a/mesalib/src/mesa/main/histogram.c
+++ b/mesalib/src/mesa/main/histogram.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -28,7 +29,6 @@
#include "colormac.h"
#include "histogram.h"
#include "macros.h"
-#include "mfeatures.h"
#include "main/dispatch.h"
diff --git a/mesalib/src/mesa/main/histogram.h b/mesalib/src/mesa/main/histogram.h
index 06781e732..a1ec5185b 100644
--- a/mesalib/src/mesa/main/histogram.h
+++ b/mesalib/src/mesa/main/histogram.h
@@ -27,9 +27,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,7 +38,6 @@
#define HISTOGRAM_H
#include "compiler.h"
-#include "mfeatures.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/image.c b/mesalib/src/mesa/main/image.c
index 52804bd8b..42fec10e1 100644
--- a/mesalib/src/mesa/main/image.c
+++ b/mesalib/src/mesa/main/image.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -36,7 +37,6 @@
#include "image.h"
#include "imports.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/image.h b/mesalib/src/mesa/main/image.h
index 7e92790b7..5515be630 100644
--- a/mesalib/src/mesa/main/image.h
+++ b/mesalib/src/mesa/main/image.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/imports.c b/mesalib/src/mesa/main/imports.c
index e6f754254..ba30d8e84 100644
--- a/mesalib/src/mesa/main/imports.c
+++ b/mesalib/src/mesa/main/imports.c
@@ -37,9 +37,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/imports.h b/mesalib/src/mesa/main/imports.h
index c4110ef10..1678f71b2 100644
--- a/mesalib/src/mesa/main/imports.h
+++ b/mesalib/src/mesa/main/imports.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/light.c b/mesalib/src/mesa/main/light.c
index c694bebe6..a3a576efd 100644
--- a/mesalib/src/mesa/main/light.c
+++ b/mesalib/src/mesa/main/light.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -474,10 +475,6 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )
return;
FLUSH_VERTICES(ctx, _NEW_LIGHT);
ctx->Light.Model.TwoSide = newbool;
- if (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
- ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE;
- else
- ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;
break;
case GL_LIGHT_MODEL_COLOR_CONTROL:
if (ctx->API != API_OPENGL_COMPAT)
diff --git a/mesalib/src/mesa/main/light.h b/mesalib/src/mesa/main/light.h
index e25dbf226..2247a7494 100644
--- a/mesalib/src/mesa/main/light.h
+++ b/mesalib/src/mesa/main/light.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
struct gl_light;
diff --git a/mesalib/src/mesa/main/lines.c b/mesalib/src/mesa/main/lines.c
index a01219c42..30eb21880 100644
--- a/mesalib/src/mesa/main/lines.c
+++ b/mesalib/src/mesa/main/lines.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/lines.h b/mesalib/src/mesa/main/lines.h
index 8e8b3f8d6..a6a610e71 100644
--- a/mesalib/src/mesa/main/lines.h
+++ b/mesalib/src/mesa/main/lines.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h
index f6d38fb64..ac2467209 100644
--- a/mesalib/src/mesa/main/macros.h
+++ b/mesalib/src/mesa/main/macros.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -656,6 +657,12 @@ INTERP_4F(GLfloat t, GLfloat dst[4], const GLfloat out[4], const GLfloat in[4])
#define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C))
#define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C))
+static inline unsigned
+minify(unsigned value, unsigned levels)
+{
+ return MAX2(1, value >> levels);
+}
+
/**
* Align a value up to an alignment value
*
diff --git a/mesalib/src/mesa/main/matrix.c b/mesalib/src/mesa/main/matrix.c
index f2fd56787..0ba7e9357 100644
--- a/mesalib/src/mesa/main/matrix.c
+++ b/mesalib/src/mesa/main/matrix.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -40,7 +41,6 @@
#include "context.h"
#include "enums.h"
#include "macros.h"
-#include "mfeatures.h"
#include "matrix.h"
#include "mtypes.h"
#include "math/m_matrix.h"
diff --git a/mesalib/src/mesa/main/matrix.h b/mesalib/src/mesa/main/matrix.h
index 185a5c04b..74e7d6183 100644
--- a/mesalib/src/mesa/main/matrix.h
+++ b/mesalib/src/mesa/main/matrix.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/mfeatures.h b/mesalib/src/mesa/main/mfeatures.h
deleted file mode 100644
index 55e9cf9c4..000000000
--- a/mesalib/src/mesa/main/mfeatures.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * 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
- * BRIAN PAUL 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 mfeatures.h
- * Flags to enable/disable specific parts of the API.
- */
-
-#ifndef FEATURES_H
-#define FEATURES_H
-
-#ifndef FEATURE_ES1
-#define FEATURE_ES1 0
-#endif
-#ifndef FEATURE_ES2
-#define FEATURE_ES2 0
-#endif
-
-#define FEATURE_ES (FEATURE_ES1 || FEATURE_ES2)
-
-#ifndef FEATURE_GL
-#define FEATURE_GL !FEATURE_ES
-#endif
-
-#if defined(IN_DRI_DRIVER) || (FEATURE_GL + FEATURE_ES1 + FEATURE_ES2 > 1)
-#define FEATURE_remap_table 1
-#else
-#define FEATURE_remap_table 0
-#endif
-
-#endif /* FEATURES_H */
diff --git a/mesalib/src/mesa/main/mipmap.c b/mesalib/src/mesa/main/mipmap.c
index a2f3767a3..e9741f3e0 100644
--- a/mesalib/src/mesa/main/mipmap.c
+++ b/mesalib/src/mesa/main/mipmap.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/mipmap.h b/mesalib/src/mesa/main/mipmap.h
index 072794cb6..6e26d5ba0 100644
--- a/mesalib/src/mesa/main/mipmap.h
+++ b/mesalib/src/mesa/main/mipmap.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h
index 008f68bda..186f8a03b 100644
--- a/mesalib/src/mesa/main/mtypes.h
+++ b/mesalib/src/mesa/main/mtypes.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -36,7 +37,6 @@
#include "main/glheader.h"
#include "main/config.h"
-#include "main/mfeatures.h"
#include "glapi/glapi.h"
#include "math/m_matrix.h" /* GLmatrix */
#include "main/simple_list.h" /* struct simple_node */
@@ -85,9 +85,9 @@ struct set_entry;
/** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */
-#define PRIM_OUTSIDE_BEGIN_END (GL_POLYGON+1)
-#define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
-#define PRIM_UNKNOWN (GL_POLYGON+3)
+#define PRIM_MAX GL_TRIANGLE_STRIP_ADJACENCY
+#define PRIM_OUTSIDE_BEGIN_END (PRIM_MAX + 1)
+#define PRIM_UNKNOWN (PRIM_MAX + 2)
@@ -231,7 +231,7 @@ typedef enum
VARYING_SLOT_CLIP_DIST0,
VARYING_SLOT_CLIP_DIST1,
VARYING_SLOT_PRIMITIVE_ID, /* Does not appear in VS */
- VARYING_SLOT_LAYER, /* Appears only as GS output */
+ VARYING_SLOT_LAYER, /* Appears as VS or GS output */
VARYING_SLOT_FACE, /* FS only */
VARYING_SLOT_PNTC, /* FS only */
VARYING_SLOT_VAR0, /* First generic varying slot */
@@ -1502,9 +1502,6 @@ struct gl_array_object
/** Mask of VERT_BIT_* values indicating which arrays are enabled */
GLbitfield64 _Enabled;
- /** Mask of VERT_BIT_* values indicating changed/dirty arrays */
- GLbitfield64 NewArrays;
-
/**
* Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs
* we can determine the max legal (in bounds) glDrawElements array index.
@@ -1537,15 +1534,13 @@ struct gl_array_attrib
* \name Primitive restart controls
*
* Primitive restart is enabled if either \c PrimitiveRestart or
- * \c PrimitiveRestart is set. If \c PrimitiveRestart is set, then
- * \c RestartIndex is used as the cut vertex. Otherwise ~0 is used.
+ * \c PrimitiveRestartFixedIndex is set.
*/
/*@{*/
GLboolean PrimitiveRestart;
GLboolean PrimitiveRestartFixedIndex;
GLboolean _PrimitiveRestart;
GLuint RestartIndex;
- GLuint _RestartIndex;
/*@}*/
/* GL_ARB_vertex_buffer_object */
@@ -1829,7 +1824,8 @@ enum glsl_interp_qualifier
INTERP_QUALIFIER_NONE = 0,
INTERP_QUALIFIER_SMOOTH,
INTERP_QUALIFIER_FLAT,
- INTERP_QUALIFIER_NOPERSPECTIVE
+ INTERP_QUALIFIER_NOPERSPECTIVE,
+ INTERP_QUALIFIER_COUNT /**< Number of interpolation qualifiers */
};
@@ -2134,6 +2130,17 @@ struct gl_shader
/*@}*/
/**
+ * Map from sampler unit to texture unit (set by glUniform1i())
+ *
+ * A sampler unit is associated with each sampler uniform by the linker.
+ * The sampler unit associated with each uniform is stored in the
+ * \c gl_uniform_storage::sampler field.
+ */
+ GLubyte SamplerUnits[MAX_SAMPLERS];
+ /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */
+ gl_texture_index SamplerTargets[MAX_SAMPLERS];
+
+ /**
* Number of uniform components used by this shader.
*
* This field is only set post-linking.
@@ -2337,17 +2344,6 @@ struct gl_shader_program
*/
struct string_to_uint_map *UniformHash;
- /**
- * Map from sampler unit to texture unit (set by glUniform1i())
- *
- * A sampler unit is associated with each sampler uniform by the linker.
- * The sampler unit associated with each uniform is stored in the
- * \c gl_uniform_storage::sampler field.
- */
- GLubyte SamplerUnits[MAX_SAMPLERS];
- /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */
- gl_texture_index SamplerTargets[MAX_SAMPLERS];
-
GLboolean LinkStatus; /**< GL_LINK_STATUS */
GLboolean Validated;
GLboolean _Used; /**< Ever used for drawing? */
@@ -2435,6 +2431,12 @@ struct gl_shader_compiler_options
GLuint MaxIfDepth; /**< Maximum nested IF blocks */
GLuint MaxUnrollIterations;
+ /**
+ * Prefer DP4 instructions (rather than MUL/MAD) for matrix * vector
+ * operations, such as position transformation.
+ */
+ GLboolean PreferDP4;
+
struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */
};
@@ -2565,13 +2567,31 @@ struct gl_renderbuffer
GLuint Name;
GLint RefCount;
GLuint Width, Height;
+ GLuint Depth;
GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */
GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */
+ /**
+ * True for renderbuffers that wrap textures, giving the driver a chance to
+ * flush render caches through the FinishRenderTexture hook.
+ *
+ * Drivers may also set this on renderbuffers other than those generated by
+ * glFramebufferTexture(), though it means FinishRenderTexture() would be
+ * called without a rb->TexImage.
+ */
+ GLboolean NeedsFinishRenderTexture;
GLubyte NumSamples;
GLenum InternalFormat; /**< The user-specified format */
GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
GL_STENCIL_INDEX. */
gl_format Format; /**< The actual renderbuffer memory format */
+ /**
+ * Pointer to the texture image if this renderbuffer wraps a texture,
+ * otherwise NULL.
+ *
+ * Note that the reference on the gl_texture_object containing this
+ * TexImage is held by the gl_renderbuffer_attachment.
+ */
+ struct gl_texture_image *TexImage;
/** Delete this renderbuffer */
void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb);
@@ -2608,6 +2628,7 @@ struct gl_renderbuffer_attachment
GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */
GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D
* and 2D array textures */
+ GLboolean Layered;
};
@@ -2680,6 +2701,8 @@ struct gl_framebuffer
struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS];
struct gl_renderbuffer *_ColorReadBuffer;
+ GLboolean Layered;
+
/** Delete this framebuffer */
void (*Delete)(struct gl_framebuffer *fb);
};
@@ -2730,6 +2753,7 @@ struct gl_program_constants
/* GL_ARB_uniform_buffer_object */
GLuint MaxUniformBlocks;
GLuint MaxCombinedUniformComponents;
+ GLuint MaxTextureImageUnits;
};
@@ -2746,11 +2770,8 @@ struct gl_constants
GLuint MaxArrayTextureLayers; /**< Max layers in array textures */
GLuint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */
GLuint MaxTextureCoordUnits;
- GLuint MaxTextureImageUnits;
- GLuint MaxVertexTextureImageUnits;
GLuint MaxCombinedTextureImageUnits;
- GLuint MaxGeometryTextureImageUnits;
- GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */
+ GLuint MaxTextureUnits; /**< = MIN(CoordUnits, FragmentProgram.ImageUnits) */
GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */
GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */
GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */
@@ -2768,8 +2789,6 @@ struct gl_constants
GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */
GLfloat LineWidthGranularity;
- GLuint MaxColorTableSize;
-
GLuint MaxClipPlanes;
GLuint MaxLights;
GLfloat MaxShininess; /**< GL_NV_light_max_exponent */
@@ -2800,10 +2819,9 @@ struct gl_constants
GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */
GLuint MaxSamples; /**< GL_ARB_framebuffer_object */
- /** Number of varying vectors between vertex and fragment shaders */
+ /** Number of varying vectors between any two shader stages. */
GLuint MaxVarying;
- GLuint MaxVertexVaryingComponents; /**< Between vert and geom shader */
- GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */
+ GLuint MaxVaryingComponents;
/** @{
* GL_ARB_uniform_buffer_object
@@ -2965,6 +2983,7 @@ struct gl_extensions
GLboolean ARB_framebuffer_object;
GLboolean ARB_explicit_attrib_location;
GLboolean ARB_geometry_shader4;
+ GLboolean ARB_gpu_shader5;
GLboolean ARB_half_float_pixel;
GLboolean ARB_half_float_vertex;
GLboolean ARB_instanced_arrays;
@@ -3019,6 +3038,7 @@ struct gl_extensions
GLboolean EXT_fog_coord;
GLboolean EXT_framebuffer_blit;
GLboolean EXT_framebuffer_multisample;
+ GLboolean EXT_framebuffer_multisample_blit_scaled;
GLboolean EXT_framebuffer_object;
GLboolean EXT_framebuffer_sRGB;
GLboolean EXT_gpu_program_parameters;
@@ -3051,6 +3071,7 @@ struct gl_extensions
GLboolean OES_standard_derivatives;
/* vendor extensions */
GLboolean AMD_seamless_cubemap_per_texture;
+ GLboolean AMD_vertex_shader_layer;
GLboolean APPLE_object_purgeable;
GLboolean ATI_envmap_bumpmap;
GLboolean ATI_texture_compression_3dc;
@@ -3137,7 +3158,7 @@ struct gl_matrix_stack
#define _NEW_TEXTURE (1 << 16) /**< gl_context::Texture */
#define _NEW_TRANSFORM (1 << 17) /**< gl_context::Transform */
#define _NEW_VIEWPORT (1 << 18) /**< gl_context::Viewport */
-#define _NEW_PACKUNPACK (1 << 19) /**< gl_context::Pack, Unpack */
+/* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
#define _NEW_ARRAY (1 << 20) /**< gl_context::Array */
#define _NEW_RENDERMODE (1 << 21) /**< gl_context::RenderMode, etc */
#define _NEW_BUFFERS (1 << 22) /**< gl_context::Visual, DrawBuffer, */
@@ -3148,34 +3169,9 @@ struct gl_matrix_stack
#define _NEW_PROGRAM_CONSTANTS (1 << 27)
#define _NEW_BUFFER_OBJECT (1 << 28)
#define _NEW_FRAG_CLAMP (1 << 29)
-#define _NEW_TRANSFORM_FEEDBACK (1 << 30) /**< gl_context::TransformFeedback */
+/* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
#define _NEW_VARYING_VP_INPUTS (1 << 31) /**< gl_context::varying_vp_inputs */
#define _NEW_ALL ~0
-
-/**
- * We use _NEW_TRANSFORM for GL_RASTERIZER_DISCARD. This #define is for
- * clarity.
- */
-#define _NEW_RASTERIZER_DISCARD _NEW_TRANSFORM
-/*@}*/
-
-
-/**
- * \name A bunch of flags that we think might be useful to drivers.
- *
- * Set in the __struct gl_contextRec::_TriangleCaps bitfield.
- */
-/*@{*/
-#define DD_SEPARATE_SPECULAR (1 << 0)
-#define DD_TRI_LIGHT_TWOSIDE (1 << 1)
-#define DD_TRI_UNFILLED (1 << 2)
-#define DD_TRI_SMOOTH (1 << 3)
-#define DD_TRI_STIPPLE (1 << 4)
-#define DD_TRI_OFFSET (1 << 5)
-#define DD_LINE_SMOOTH (1 << 6)
-#define DD_LINE_STIPPLE (1 << 7)
-#define DD_POINT_SMOOTH (1 << 8)
-#define DD_POINT_ATTEN (1 << 9)
/*@}*/
@@ -3352,7 +3348,20 @@ typedef enum
*/
struct gl_driver_flags
{
- GLbitfield NewArray; /**< Vertex array state */
+ /** gl_context::Array::_DrawArrays (vertex array state) */
+ GLbitfield NewArray;
+
+ /** gl_context::TransformFeedback::CurrentObject */
+ GLbitfield NewTransformFeedback;
+
+ /** gl_context::RasterDiscard */
+ GLbitfield NewRasterizerDiscard;
+
+ /**
+ * gl_context::UniformBufferBindings
+ * gl_shader_program::UniformBlocks
+ */
+ GLbitfield NewUniformBuffer;
};
struct gl_uniform_buffer_binding
@@ -3534,7 +3543,8 @@ struct gl_context
* associated with uniform blocks by glUniformBlockBinding()'s state in the
* shader program.
*/
- struct gl_uniform_buffer_binding *UniformBufferBindings;
+ struct gl_uniform_buffer_binding
+ UniformBufferBindings[MAX_COMBINED_UNIFORM_BUFFERS];
/*@}*/
@@ -3568,11 +3578,6 @@ struct gl_context
GLbitfield64 varying_vp_inputs; /**< mask of VERT_BIT_* flags */
/** \name Derived state */
- /*@{*/
- /** Bitwise-or of DD_* flags. Note that this bitfield may be used before
- * state validation so they need to always be current.
- */
- GLbitfield _TriangleCaps;
GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */
GLfloat _EyeZDir[3];
GLfloat _ModelViewInvScale;
@@ -3593,12 +3598,6 @@ struct gl_context
GLboolean TextureFormatSupported[MESA_FORMAT_COUNT];
- /**
- * Use dp4 (rather than mul/mad) instructions for position
- * transformation?
- */
- GLboolean mvp_with_dp4;
-
GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */
/**
diff --git a/mesalib/src/mesa/main/multisample.c b/mesalib/src/mesa/main/multisample.c
index b0f45d933..02d6ca453 100644
--- a/mesalib/src/mesa/main/multisample.c
+++ b/mesalib/src/mesa/main/multisample.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -30,6 +31,7 @@
#include "main/mtypes.h"
#include "main/fbobject.h"
#include "main/glformats.h"
+#include "main/state.h"
/**
@@ -73,6 +75,10 @@ _mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat * val)
{
GET_CURRENT_CONTEXT(ctx);
+ if (ctx->NewState & _NEW_BUFFERS) {
+ _mesa_update_state(ctx);
+ }
+
switch (pname) {
case GL_SAMPLE_POSITION: {
if (index >= ctx->DrawBuffer->Visual.samples) {
diff --git a/mesalib/src/mesa/main/multisample.h b/mesalib/src/mesa/main/multisample.h
index f2f01de5c..d6995d8fb 100644
--- a/mesalib/src/mesa/main/multisample.h
+++ b/mesalib/src/mesa/main/multisample.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/pack.h b/mesalib/src/mesa/main/pack.h
index 2fbdf9115..ad357bae1 100644
--- a/mesalib/src/mesa/main/pack.h
+++ b/mesalib/src/mesa/main/pack.h
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/pbo.c b/mesalib/src/mesa/main/pbo.c
index 0dc4c04eb..400cec3f0 100644
--- a/mesalib/src/mesa/main/pbo.c
+++ b/mesalib/src/mesa/main/pbo.c
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/pbo.h b/mesalib/src/mesa/main/pbo.h
index 9eba33514..9851ef1a1 100644
--- a/mesalib/src/mesa/main/pbo.h
+++ b/mesalib/src/mesa/main/pbo.h
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/pixel.c b/mesalib/src/mesa/main/pixel.c
index e9f75a7df..0552de666 100644
--- a/mesalib/src/mesa/main/pixel.c
+++ b/mesalib/src/mesa/main/pixel.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,7 +34,6 @@
#include "colormac.h"
#include "context.h"
#include "macros.h"
-#include "mfeatures.h"
#include "pixel.h"
#include "pbo.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/pixel.h b/mesalib/src/mesa/main/pixel.h
index 433208cb6..88fc0cf99 100644
--- a/mesalib/src/mesa/main/pixel.h
+++ b/mesalib/src/mesa/main/pixel.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
struct gl_context;
diff --git a/mesalib/src/mesa/main/pixelstore.c b/mesalib/src/mesa/main/pixelstore.c
index 01068e8ea..cf871dc5c 100644
--- a/mesalib/src/mesa/main/pixelstore.c
+++ b/mesalib/src/mesa/main/pixelstore.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -32,7 +33,6 @@
#include "bufferobj.h"
#include "context.h"
#include "pixelstore.h"
-#include "mfeatures.h"
#include "mtypes.h"
@@ -48,7 +48,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
goto invalid_enum_error;
if (param == (GLint)ctx->Pack.SwapBytes)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.SwapBytes = param ? GL_TRUE : GL_FALSE;
break;
case GL_PACK_LSB_FIRST:
@@ -56,7 +55,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
goto invalid_enum_error;
if (param == (GLint)ctx->Pack.LsbFirst)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.LsbFirst = param ? GL_TRUE : GL_FALSE;
break;
case GL_PACK_ROW_LENGTH:
@@ -68,7 +66,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.RowLength == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.RowLength = param;
break;
case GL_PACK_IMAGE_HEIGHT:
@@ -80,7 +77,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.ImageHeight == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.ImageHeight = param;
break;
case GL_PACK_SKIP_PIXELS:
@@ -92,7 +88,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.SkipPixels == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.SkipPixels = param;
break;
case GL_PACK_SKIP_ROWS:
@@ -104,7 +99,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.SkipRows == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.SkipRows = param;
break;
case GL_PACK_SKIP_IMAGES:
@@ -116,7 +110,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.SkipImages == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.SkipImages = param;
break;
case GL_PACK_ALIGNMENT:
@@ -126,7 +119,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.Alignment == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.Alignment = param;
break;
case GL_PACK_INVERT_MESA:
@@ -138,7 +130,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Pack.Invert == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Pack.Invert = param;
break;
@@ -149,7 +140,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
return;
if ((GLint)ctx->Unpack.SwapBytes == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.SwapBytes = param ? GL_TRUE : GL_FALSE;
break;
case GL_UNPACK_LSB_FIRST:
@@ -159,7 +149,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
return;
if ((GLint)ctx->Unpack.LsbFirst == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.LsbFirst = param ? GL_TRUE : GL_FALSE;
break;
case GL_UNPACK_ROW_LENGTH:
@@ -171,7 +160,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Unpack.RowLength == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.RowLength = param;
break;
case GL_UNPACK_IMAGE_HEIGHT:
@@ -184,7 +172,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
if (ctx->Unpack.ImageHeight == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.ImageHeight = param;
break;
case GL_UNPACK_SKIP_PIXELS:
@@ -196,7 +183,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Unpack.SkipPixels == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.SkipPixels = param;
break;
case GL_UNPACK_SKIP_ROWS:
@@ -208,7 +194,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Unpack.SkipRows == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.SkipRows = param;
break;
case GL_UNPACK_SKIP_IMAGES:
@@ -220,7 +205,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Unpack.SkipImages == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.SkipImages = param;
break;
case GL_UNPACK_ALIGNMENT:
@@ -230,7 +214,6 @@ _mesa_PixelStorei( GLenum pname, GLint param )
}
if (ctx->Unpack.Alignment == param)
return;
- FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);
ctx->Unpack.Alignment = param;
break;
default:
diff --git a/mesalib/src/mesa/main/pixelstore.h b/mesalib/src/mesa/main/pixelstore.h
index eb5081974..1ffc8f8b8 100644
--- a/mesalib/src/mesa/main/pixelstore.h
+++ b/mesalib/src/mesa/main/pixelstore.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/main/pixeltransfer.c b/mesalib/src/mesa/main/pixeltransfer.c
index fa355eb4a..8bbeeb853 100644
--- a/mesalib/src/mesa/main/pixeltransfer.c
+++ b/mesalib/src/mesa/main/pixeltransfer.c
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/pixeltransfer.h b/mesalib/src/mesa/main/pixeltransfer.h
index 3cd7ebe77..b0a301f26 100644
--- a/mesalib/src/mesa/main/pixeltransfer.h
+++ b/mesalib/src/mesa/main/pixeltransfer.h
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/points.c b/mesalib/src/mesa/main/points.c
index c925d4cfd..71b1a4166 100644
--- a/mesalib/src/mesa/main/points.c
+++ b/mesalib/src/mesa/main/points.c
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -122,11 +123,6 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)
ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 ||
ctx->Point.Params[1] != 0.0 ||
ctx->Point.Params[2] != 0.0);
-
- if (ctx->Point._Attenuated)
- ctx->_TriangleCaps |= DD_POINT_ATTEN;
- else
- ctx->_TriangleCaps &= ~DD_POINT_ATTEN;
break;
case GL_POINT_SIZE_MIN_EXT:
if (params[0] < 0.0F) {
diff --git a/mesalib/src/mesa/main/points.h b/mesalib/src/mesa/main/points.h
index 306a8a572..797f83158 100644
--- a/mesalib/src/mesa/main/points.h
+++ b/mesalib/src/mesa/main/points.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/polygon.c b/mesalib/src/mesa/main/polygon.c
index cdef01a2f..0ded7434c 100644
--- a/mesalib/src/mesa/main/polygon.c
+++ b/mesalib/src/mesa/main/polygon.c
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -172,11 +173,6 @@ _mesa_PolygonMode( GLenum face, GLenum mode )
return;
}
- if (ctx->Polygon.FrontMode == GL_FILL && ctx->Polygon.BackMode == GL_FILL)
- ctx->_TriangleCaps &= ~DD_TRI_UNFILLED;
- else
- ctx->_TriangleCaps |= DD_TRI_UNFILLED;
-
if (ctx->Driver.PolygonMode)
ctx->Driver.PolygonMode(ctx, face, mode);
}
diff --git a/mesalib/src/mesa/main/polygon.h b/mesalib/src/mesa/main/polygon.h
index 35f222f26..651c3356c 100644
--- a/mesalib/src/mesa/main/polygon.h
+++ b/mesalib/src/mesa/main/polygon.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/querymatrix.h b/mesalib/src/mesa/main/querymatrix.h
index 187b5f486..e08d843a9 100644
--- a/mesalib/src/mesa/main/querymatrix.h
+++ b/mesalib/src/mesa/main/querymatrix.h
@@ -25,7 +25,6 @@
#define QUERYMATRIX_H
-#include "mfeatures.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/queryobj.c b/mesalib/src/mesa/main/queryobj.c
index f0db740fd..0d6fe39d4 100644
--- a/mesalib/src/mesa/main/queryobj.c
+++ b/mesalib/src/mesa/main/queryobj.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "hash.h"
#include "imports.h"
#include "queryobj.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "main/dispatch.h"
@@ -76,7 +76,7 @@ _mesa_new_query_object(struct gl_context *ctx, GLuint id)
static void
_mesa_begin_query(struct gl_context *ctx, struct gl_query_object *q)
{
- /* no-op */
+ ctx->NewState |= _NEW_DEPTH; /* for swrast */
}
@@ -87,6 +87,7 @@ _mesa_begin_query(struct gl_context *ctx, struct gl_query_object *q)
static void
_mesa_end_query(struct gl_context *ctx, struct gl_query_object *q)
{
+ ctx->NewState |= _NEW_DEPTH; /* for swrast */
q->Ready = GL_TRUE;
}
@@ -315,7 +316,7 @@ _mesa_BeginQueryIndexed(GLenum target, GLuint index, GLuint id)
if (!query_error_check_index(ctx, target, index))
return;
- FLUSH_VERTICES(ctx, _NEW_DEPTH);
+ FLUSH_VERTICES(ctx, 0);
bindpt = get_query_binding_point(ctx, target);
if (!bindpt) {
@@ -392,7 +393,7 @@ _mesa_EndQueryIndexed(GLenum target, GLuint index)
if (!query_error_check_index(ctx, target, index))
return;
- FLUSH_VERTICES(ctx, _NEW_DEPTH);
+ FLUSH_VERTICES(ctx, 0);
bindpt = get_query_binding_point(ctx, target);
if (!bindpt) {
diff --git a/mesalib/src/mesa/main/queryobj.h b/mesalib/src/mesa/main/queryobj.h
index 0616c943e..5b9ff5820 100644
--- a/mesalib/src/mesa/main/queryobj.h
+++ b/mesalib/src/mesa/main/queryobj.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -27,7 +28,6 @@
#define QUERYOBJ_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/hash.h"
diff --git a/mesalib/src/mesa/main/rastpos.c b/mesalib/src/mesa/main/rastpos.c
index 5a030be44..e578c6cc8 100644
--- a/mesalib/src/mesa/main/rastpos.c
+++ b/mesalib/src/mesa/main/rastpos.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -32,7 +33,6 @@
#include "context.h"
#include "feedback.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "rastpos.h"
#include "state.h"
diff --git a/mesalib/src/mesa/main/rastpos.h b/mesalib/src/mesa/main/rastpos.h
index bbd32abd3..45968f304 100644
--- a/mesalib/src/mesa/main/rastpos.h
+++ b/mesalib/src/mesa/main/rastpos.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,7 +34,6 @@
#include "compiler.h"
-#include "mfeatures.h"
struct _glapi_table;
struct gl_context;
diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c
index 0dee38063..85952d671 100644
--- a/mesalib/src/mesa/main/readpix.c
+++ b/mesalib/src/mesa/main/readpix.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "glheader.h"
diff --git a/mesalib/src/mesa/main/readpix.h b/mesalib/src/mesa/main/readpix.h
index 7491c22ff..9e2d58ae9 100644
--- a/mesalib/src/mesa/main/readpix.h
+++ b/mesalib/src/mesa/main/readpix.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/remap.c b/mesalib/src/mesa/main/remap.c
index a09870561..44ec96498 100644
--- a/mesalib/src/mesa/main/remap.c
+++ b/mesalib/src/mesa/main/remap.c
@@ -36,10 +36,6 @@
* a dynamic entry, or the corresponding static entry, in glapi.
*/
-#include "mfeatures.h"
-
-#if FEATURE_remap_table
-
#include "remap.h"
#include "imports.h"
#include "glapi/glapi.h"
@@ -223,6 +219,3 @@ _mesa_init_remap_table(void)
driDispatchRemapTable_size,
MESA_remap_table_functions);
}
-
-
-#endif /* FEATURE_remap_table */
diff --git a/mesalib/src/mesa/main/remap.h b/mesalib/src/mesa/main/remap.h
index fa3172487..bfef6ac4e 100644
--- a/mesalib/src/mesa/main/remap.h
+++ b/mesalib/src/mesa/main/remap.h
@@ -29,7 +29,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct gl_function_pool_remap {
int pool_index;
@@ -42,8 +41,6 @@ struct gl_function_remap {
};
-#if FEATURE_remap_table
-
extern int
driDispatchRemapTable[];
@@ -62,37 +59,5 @@ _mesa_map_static_functions(void);
extern void
_mesa_init_remap_table(void);
-#else /* FEATURE_remap_table */
-
-static inline const char *
-_mesa_get_function_spec(int func_index)
-{
- return NULL;
-}
-
-static inline int
-_mesa_map_function_spec(const char *spec)
-{
- return -1;
-}
-
-static inline void
-_mesa_map_function_array(const struct gl_function_remap *func_array)
-{
-}
-
-static inline void
-_mesa_map_static_functions(void)
-{
-}
-
-
-static inline void
-_mesa_init_remap_table(void)
-{
-}
-
-#endif /* FEATURE_remap_table */
-
#endif /* REMAP_H */
diff --git a/mesalib/src/mesa/main/renderbuffer.c b/mesalib/src/mesa/main/renderbuffer.c
index b42616226..c82b5cd85 100644
--- a/mesalib/src/mesa/main/renderbuffer.c
+++ b/mesalib/src/mesa/main/renderbuffer.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -52,6 +53,7 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
rb->Width = 0;
rb->Height = 0;
+ rb->Depth = 0;
rb->InternalFormat = GL_RGBA;
rb->Format = MESA_FORMAT_NONE;
}
diff --git a/mesalib/src/mesa/main/renderbuffer.h b/mesalib/src/mesa/main/renderbuffer.h
index c450b33cb..e3e56d29e 100644
--- a/mesalib/src/mesa/main/renderbuffer.h
+++ b/mesalib/src/mesa/main/renderbuffer.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/samplerobj.c b/mesalib/src/mesa/main/samplerobj.c
index 5cff32936..91b17ab5e 100644
--- a/mesalib/src/mesa/main/samplerobj.c
+++ b/mesalib/src/mesa/main/samplerobj.c
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "main/enums.h"
#include "main/hash.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/samplerobj.h"
diff --git a/mesalib/src/mesa/main/samplerobj.h b/mesalib/src/mesa/main/samplerobj.h
index 69e389949..c72b1cd8d 100644
--- a/mesalib/src/mesa/main/samplerobj.h
+++ b/mesalib/src/mesa/main/samplerobj.h
@@ -16,9 +16,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/scissor.c b/mesalib/src/mesa/main/scissor.c
index 0c2a91f5c..538ed595e 100644
--- a/mesalib/src/mesa/main/scissor.c
+++ b/mesalib/src/mesa/main/scissor.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/scissor.h b/mesalib/src/mesa/main/scissor.h
index da9385e2b..2ac0c88da 100644
--- a/mesalib/src/mesa/main/scissor.h
+++ b/mesalib/src/mesa/main/scissor.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/shaderapi.c b/mesalib/src/mesa/main/shaderapi.c
index 2c307e79c..8cb02760b 100644
--- a/mesalib/src/mesa/main/shaderapi.c
+++ b/mesalib/src/mesa/main/shaderapi.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -41,7 +42,6 @@
#include "main/dispatch.h"
#include "main/enums.h"
#include "main/hash.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/shaderapi.h"
#include "main/shaderobj.h"
@@ -1453,8 +1453,10 @@ _mesa_ValidateProgram(GLhandleARB program)
validate_program(ctx, program);
}
-#ifdef FEATURE_ES2
+/**
+ * For OpenGL ES 2.0, GL_ARB_ES2_compatibility
+ */
void GLAPIENTRY
_mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype,
GLint* range, GLint* precision)
@@ -1507,6 +1509,9 @@ _mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype,
}
+/**
+ * For OpenGL ES 2.0, GL_ARB_ES2_compatibility
+ */
void GLAPIENTRY
_mesa_ReleaseShaderCompiler(void)
{
@@ -1514,6 +1519,9 @@ _mesa_ReleaseShaderCompiler(void)
}
+/**
+ * For OpenGL ES 2.0, GL_ARB_ES2_compatibility
+ */
void GLAPIENTRY
_mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat,
const void* binary, GLint length)
@@ -1527,7 +1535,6 @@ _mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat,
_mesa_error(ctx, GL_INVALID_OPERATION, __FUNCTION__);
}
-#endif /* FEATURE_ES2 */
void GLAPIENTRY
_mesa_GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length,
diff --git a/mesalib/src/mesa/main/shaderapi.h b/mesalib/src/mesa/main/shaderapi.h
index 342b58905..1cd4ffcea 100644
--- a/mesalib/src/mesa/main/shaderapi.h
+++ b/mesalib/src/mesa/main/shaderapi.h
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/shaderobj.c b/mesalib/src/mesa/main/shaderobj.c
index 59daff5bf..a60d8f38a 100644
--- a/mesalib/src/mesa/main/shaderobj.c
+++ b/mesalib/src/mesa/main/shaderobj.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -32,7 +33,6 @@
#include "main/glheader.h"
#include "main/context.h"
#include "main/hash.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/shaderobj.h"
#include "main/uniforms.h"
diff --git a/mesalib/src/mesa/main/shaderobj.h b/mesalib/src/mesa/main/shaderobj.h
index 5470b51d7..a0dac5ec9 100644
--- a/mesalib/src/mesa/main/shaderobj.h
+++ b/mesalib/src/mesa/main/shaderobj.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/shared.c b/mesalib/src/mesa/main/shared.c
index 408125998..9f5624def 100644
--- a/mesalib/src/mesa/main/shared.c
+++ b/mesalib/src/mesa/main/shared.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -28,7 +29,6 @@
*/
#include "imports.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "hash.h"
#include "hash_table.h"
diff --git a/mesalib/src/mesa/main/shared.h b/mesalib/src/mesa/main/shared.h
index 3fe4578cf..3bec08765 100644
--- a/mesalib/src/mesa/main/shared.h
+++ b/mesalib/src/mesa/main/shared.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef SHARED_H
diff --git a/mesalib/src/mesa/main/simple_list.h b/mesalib/src/mesa/main/simple_list.h
index 9417108a0..0ade52d71 100644
--- a/mesalib/src/mesa/main/simple_list.h
+++ b/mesalib/src/mesa/main/simple_list.h
@@ -28,9 +28,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/state.c b/mesalib/src/mesa/main/state.c
index 251c1aea9..1b927ca65 100644
--- a/mesalib/src/mesa/main/state.c
+++ b/mesalib/src/mesa/main/state.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -54,16 +55,6 @@
#include "blend.h"
-static void
-update_separate_specular(struct gl_context *ctx)
-{
- if (_mesa_need_secondary_color(ctx))
- ctx->_TriangleCaps |= DD_SEPARATE_SPECULAR;
- else
- ctx->_TriangleCaps &= ~DD_SEPARATE_SPECULAR;
-}
-
-
/**
* Update the following fields:
* ctx->VertexProgram._Enabled
@@ -324,82 +315,6 @@ update_twoside(struct gl_context *ctx)
}
-/*
- * Check polygon state and set DD_TRI_OFFSET
- * in ctx->_TriangleCaps if needed.
- */
-static void
-update_polygon(struct gl_context *ctx)
-{
- ctx->_TriangleCaps &= ~DD_TRI_OFFSET;
-
- if ( ctx->Polygon.OffsetPoint
- || ctx->Polygon.OffsetLine
- || ctx->Polygon.OffsetFill)
- ctx->_TriangleCaps |= DD_TRI_OFFSET;
-}
-
-
-/**
- * Update the ctx->_TriangleCaps bitfield.
- * XXX that bitfield should really go away someday!
- * This function must be called after other update_*() functions since
- * there are dependencies on some other derived values.
- */
-#if 0
-static void
-update_tricaps(struct gl_context *ctx, GLbitfield new_state)
-{
- ctx->_TriangleCaps = 0;
-
- /*
- * Points
- */
- if (1/*new_state & _NEW_POINT*/) {
- if (ctx->Point.SmoothFlag)
- ctx->_TriangleCaps |= DD_POINT_SMOOTH;
- if (ctx->Point._Attenuated)
- ctx->_TriangleCaps |= DD_POINT_ATTEN;
- }
-
- /*
- * Lines
- */
- if (1/*new_state & _NEW_LINE*/) {
- if (ctx->Line.SmoothFlag)
- ctx->_TriangleCaps |= DD_LINE_SMOOTH;
- if (ctx->Line.StippleFlag)
- ctx->_TriangleCaps |= DD_LINE_STIPPLE;
- }
-
- /*
- * Polygons
- */
- if (1/*new_state & _NEW_POLYGON*/) {
- if (ctx->Polygon.SmoothFlag)
- ctx->_TriangleCaps |= DD_TRI_SMOOTH;
- if (ctx->Polygon.StippleFlag)
- ctx->_TriangleCaps |= DD_TRI_STIPPLE;
- if (ctx->Polygon.FrontMode != GL_FILL
- || ctx->Polygon.BackMode != GL_FILL)
- ctx->_TriangleCaps |= DD_TRI_UNFILLED;
- if (ctx->Polygon.OffsetPoint ||
- ctx->Polygon.OffsetLine ||
- ctx->Polygon.OffsetFill)
- ctx->_TriangleCaps |= DD_TRI_OFFSET;
- }
-
- /*
- * Lighting and shading
- */
- if (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
- ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE;
- if (_mesa_need_secondary_color(ctx))
- ctx->_TriangleCaps |= DD_SEPARATE_SPECULAR;
-}
-#endif
-
-
/**
* Compute derived GL state.
* If __struct gl_contextRec::NewState is non-zero then this function \b must
@@ -458,9 +373,6 @@ _mesa_update_state_locked( struct gl_context *ctx )
if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
_mesa_update_draw_buffer_bounds( ctx );
- if (new_state & _NEW_POLYGON)
- update_polygon( ctx );
-
if (new_state & _NEW_LIGHT)
_mesa_update_lighting( ctx );
@@ -473,21 +385,12 @@ _mesa_update_state_locked( struct gl_context *ctx )
if (new_state & _NEW_PIXEL)
_mesa_update_pixel( ctx, new_state );
- if (new_state & _MESA_NEW_SEPARATE_SPECULAR)
- update_separate_specular( ctx );
-
if (new_state & (_NEW_BUFFERS | _NEW_VIEWPORT))
update_viewport_matrix(ctx);
if (new_state & (_NEW_MULTISAMPLE | _NEW_BUFFERS))
update_multisample( ctx );
-#if 0
- if (new_state & (_NEW_POINT | _NEW_LINE | _NEW_POLYGON | _NEW_LIGHT
- | _NEW_STENCIL | _MESA_NEW_SEPARATE_SPECULAR))
- update_tricaps( ctx, new_state );
-#endif
-
/* ctx->_NeedEyeCoords is now up to date.
*
* If the truth value of this variable has changed, update for the
@@ -508,8 +411,10 @@ _mesa_update_state_locked( struct gl_context *ctx )
new_prog_state |= update_program( ctx );
}
- if (new_state & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT))
+ if (ctx->Const.CheckArrayBounds &&
+ new_state & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT)) {
_mesa_update_array_object_max_element(ctx, ctx->Array.ArrayObj);
+ }
out:
new_prog_state |= update_program_constants(ctx);
@@ -526,7 +431,6 @@ _mesa_update_state_locked( struct gl_context *ctx )
new_state = ctx->NewState | new_prog_state;
ctx->NewState = 0;
ctx->Driver.UpdateState(ctx, new_state);
- ctx->Array.ArrayObj->NewArrays = 0x0;
}
diff --git a/mesalib/src/mesa/main/state.h b/mesalib/src/mesa/main/state.h
index 7b3121b4e..bc2406b4d 100644
--- a/mesalib/src/mesa/main/state.h
+++ b/mesalib/src/mesa/main/state.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/stencil.c b/mesalib/src/mesa/main/stencil.c
index 330841731..505703a3d 100644
--- a/mesalib/src/mesa/main/stencil.c
+++ b/mesalib/src/mesa/main/stencil.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -109,10 +110,6 @@ _mesa_ClearStencil( GLint s )
{
GET_CURRENT_CONTEXT(ctx);
- if (ctx->Stencil.Clear == (GLuint) s)
- return;
-
- FLUSH_VERTICES(ctx, _NEW_STENCIL);
ctx->Stencil.Clear = (GLuint) s;
}
@@ -135,7 +132,6 @@ void GLAPIENTRY
_mesa_StencilFuncSeparateATI( GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask )
{
GET_CURRENT_CONTEXT(ctx);
- const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glStencilFuncSeparateATI()\n");
@@ -151,8 +147,6 @@ _mesa_StencilFuncSeparateATI( GLenum frontfunc, GLenum backfunc, GLint ref, GLui
return;
}
- ref = CLAMP( ref, 0, stencilMax );
-
/* set both front and back state */
if (ctx->Stencil.Function[0] == frontfunc &&
ctx->Stencil.Function[1] == backfunc &&
@@ -192,7 +186,6 @@ void GLAPIENTRY
_mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
{
GET_CURRENT_CONTEXT(ctx);
- const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
const GLint face = ctx->Stencil.ActiveFace;
if (MESA_VERBOSE & VERBOSE_API)
@@ -203,8 +196,6 @@ _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
return;
}
- ref = CLAMP( ref, 0, stencilMax );
-
if (face != 0) {
if (ctx->Stencil.Function[face] == func &&
ctx->Stencil.ValueMask[face] == mask &&
@@ -390,7 +381,6 @@ _mesa_ActiveStencilFaceEXT(GLenum face)
}
if (face == GL_FRONT || face == GL_BACK) {
- FLUSH_VERTICES(ctx, _NEW_STENCIL);
ctx->Stencil.ActiveFace = (face == GL_FRONT) ? 0 : 2;
}
else {
@@ -467,7 +457,6 @@ void GLAPIENTRY
_mesa_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
{
GET_CURRENT_CONTEXT(ctx);
- const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glStencilFuncSeparate()\n");
@@ -481,8 +470,6 @@ _mesa_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
return;
}
- ref = CLAMP(ref, 0, stencilMax);
-
FLUSH_VERTICES(ctx, _NEW_STENCIL);
if (face != GL_BACK) {
diff --git a/mesalib/src/mesa/main/stencil.h b/mesalib/src/mesa/main/stencil.h
index b772bfd6e..f2f7d37c6 100644
--- a/mesalib/src/mesa/main/stencil.h
+++ b/mesalib/src/mesa/main/stencil.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -78,4 +79,18 @@ _mesa_update_stencil(struct gl_context *ctx);
extern void
_mesa_init_stencil( struct gl_context * ctx );
+/* From the GL 4.3 spec, 17.3.5:
+ * "Stencil comparison operations and queries of <ref> clamp its value
+ * to the range [0, 2^s-1], where <s> is the number of bits in the
+ * stencil buffer attached to the draw framebuffer."
+ */
+
+static inline GLint
+_mesa_get_stencil_ref(struct gl_context const *ctx, int face)
+{
+ GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
+ GLint ref = ctx->Stencil.Ref[face];
+ return CLAMP(ref, 0, stencilMax);
+}
+
#endif
diff --git a/mesalib/src/mesa/main/syncobj.c b/mesalib/src/mesa/main/syncobj.c
index 020fa1d7a..c8d25cdf1 100644
--- a/mesalib/src/mesa/main/syncobj.c
+++ b/mesalib/src/mesa/main/syncobj.c
@@ -60,7 +60,6 @@
#include "imports.h"
#include "context.h"
#include "macros.h"
-#include "mfeatures.h"
#include "get.h"
#include "dispatch.h"
#include "mtypes.h"
diff --git a/mesalib/src/mesa/main/syncobj.h b/mesalib/src/mesa/main/syncobj.h
index 6b4367466..faa3f558d 100644
--- a/mesalib/src/mesa/main/syncobj.h
+++ b/mesalib/src/mesa/main/syncobj.h
@@ -32,7 +32,6 @@
#define SYNCOBJ_H
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
struct dd_function_table;
diff --git a/mesalib/src/mesa/main/texcompress.c b/mesalib/src/mesa/main/texcompress.c
index 734294e45..2391868a4 100644
--- a/mesalib/src/mesa/main/texcompress.c
+++ b/mesalib/src/mesa/main/texcompress.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "colormac.h"
#include "context.h"
#include "formats.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "context.h"
#include "texcompress.h"
@@ -588,7 +588,7 @@ _mesa_decompress_image(gl_format format, GLuint width, GLuint height,
for (j = 0; j < height; j++) {
for (i = 0; i < width; i++) {
- fetch(src, NULL, stride, i, j, 0, dest);
+ fetch(src, stride, i, j, dest);
dest += 4;
}
}
diff --git a/mesalib/src/mesa/main/texcompress.h b/mesalib/src/mesa/main/texcompress.h
index b45e7cf1b..c27fc26c9 100644
--- a/mesalib/src/mesa/main/texcompress.h
+++ b/mesalib/src/mesa/main/texcompress.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef TEXCOMPRESS_H
@@ -27,7 +28,6 @@
#include "formats.h"
#include "glheader.h"
-#include "mfeatures.h"
struct gl_context;
@@ -51,9 +51,8 @@ _mesa_compressed_image_address(GLint col, GLint row, GLint img,
/** A function to fetch one texel from a compressed texture */
typedef void (*compressed_fetch_func)(const GLubyte *map,
- const GLuint imageOffsets[],
GLint rowStride,
- GLint i, GLint j, GLint k,
+ GLint i, GLint j,
GLfloat *texel);
extern compressed_fetch_func
diff --git a/mesalib/src/mesa/main/texcompress_cpal.c b/mesalib/src/mesa/main/texcompress_cpal.c
index 75389a437..2838a6a4e 100644
--- a/mesalib/src/mesa/main/texcompress_cpal.c
+++ b/mesalib/src/mesa/main/texcompress_cpal.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
/**
@@ -33,7 +34,6 @@
#include "glheader.h"
#include "compiler.h" /* for ASSERT */
#include "context.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "imports.h"
#include "pixelstore.h"
diff --git a/mesalib/src/mesa/main/texcompress_cpal.h b/mesalib/src/mesa/main/texcompress_cpal.h
index 7d28fd866..8a8eac292 100644
--- a/mesalib/src/mesa/main/texcompress_cpal.h
+++ b/mesalib/src/mesa/main/texcompress_cpal.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texcompress_etc.c b/mesalib/src/mesa/main/texcompress_etc.c
index 7ad4ddeb6..a06d29f19 100644
--- a/mesalib/src/mesa/main/texcompress_etc.c
+++ b/mesalib/src/mesa/main/texcompress_etc.c
@@ -38,7 +38,6 @@
*/
#include <stdbool.h>
-#include "mfeatures.h"
#include "texcompress.h"
#include "texcompress_etc.h"
#include "texstore.h"
@@ -1223,8 +1222,8 @@ _mesa_unpack_etc2_format(uint8_t *dst_row,
static void
-fetch_etc1_rgb8(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
+fetch_etc1_rgb8(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j,
GLfloat *texel)
{
struct etc1_block block;
@@ -1244,9 +1243,8 @@ fetch_etc1_rgb8(const GLubyte *map, const GLuint imageOffsets[],
static void
-fetch_etc2_rgb8(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_rgb8(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[3];
@@ -1266,9 +1264,8 @@ fetch_etc2_rgb8(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_srgb8(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_srgb8(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[3];
@@ -1288,9 +1285,8 @@ fetch_etc2_srgb8(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_rgba8_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_rgba8_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
@@ -1308,9 +1304,8 @@ fetch_etc2_rgba8_eac(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_srgb8_alpha8_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_srgb8_alpha8_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
@@ -1328,9 +1323,8 @@ fetch_etc2_srgb8_alpha8_eac(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_r11_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_r11_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
GLushort dst;
@@ -1348,9 +1342,8 @@ fetch_etc2_r11_eac(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_rg11_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_rg11_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
GLushort dst[2];
@@ -1373,9 +1366,8 @@ fetch_etc2_rg11_eac(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_signed_r11_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_signed_r11_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
GLushort dst;
@@ -1393,9 +1385,8 @@ fetch_etc2_signed_r11_eac(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_etc2_signed_rg11_eac(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_etc2_signed_rg11_eac(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
GLushort dst[2];
@@ -1419,8 +1410,7 @@ fetch_etc2_signed_rg11_eac(const GLubyte *map, const GLuint imageOffsets[],
static void
fetch_etc2_rgb8_punchthrough_alpha1(const GLubyte *map,
- const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
+ GLint rowStride, GLint i, GLint j,
GLfloat *texel)
{
struct etc2_block block;
@@ -1441,10 +1431,8 @@ fetch_etc2_rgb8_punchthrough_alpha1(const GLubyte *map,
static void
fetch_etc2_srgb8_punchthrough_alpha1(const GLubyte *map,
- const GLuint imageOffsets[],
GLint rowStride,
- GLint i, GLint j, GLint k,
- GLfloat *texel)
+ GLint i, GLint j, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
diff --git a/mesalib/src/mesa/main/texcompress_etc.h b/mesalib/src/mesa/main/texcompress_etc.h
index 503d0388a..9da0fb337 100644
--- a/mesalib/src/mesa/main/texcompress_etc.h
+++ b/mesalib/src/mesa/main/texcompress_etc.h
@@ -26,7 +26,6 @@
#include <inttypes.h>
#include "glheader.h"
-#include "mfeatures.h"
#include "texcompress.h"
#include "texstore.h"
diff --git a/mesalib/src/mesa/main/texcompress_fxt1.c b/mesalib/src/mesa/main/texcompress_fxt1.c
index f7254f92e..93bd19a9a 100644
--- a/mesalib/src/mesa/main/texcompress_fxt1.c
+++ b/mesalib/src/mesa/main/texcompress_fxt1.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -34,7 +35,6 @@
#include "colormac.h"
#include "image.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mipmap.h"
#include "texcompress.h"
#include "texcompress_fxt1.h"
@@ -1616,8 +1616,8 @@ fxt1_decode_1 (const void *texture, GLint stride, /* in pixels */
static void
-fetch_rgb_fxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgb_fxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte rgba[4];
fxt1_decode_1(map, rowStride, i, j, rgba);
@@ -1629,8 +1629,8 @@ fetch_rgb_fxt1(const GLubyte *map, const GLuint imageOffsets[],
static void
-fetch_rgba_fxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgba_fxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte rgba[4];
fxt1_decode_1(map, rowStride, i, j, rgba);
diff --git a/mesalib/src/mesa/main/texcompress_fxt1.h b/mesalib/src/mesa/main/texcompress_fxt1.h
index 5949df90f..3a00de5ac 100644
--- a/mesalib/src/mesa/main/texcompress_fxt1.h
+++ b/mesalib/src/mesa/main/texcompress_fxt1.h
@@ -17,16 +17,16 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef TEXCOMPRESS_FXT1_H
#define TEXCOMPRESS_FXT1_H
#include "glheader.h"
-#include "mfeatures.h"
#include "texstore.h"
diff --git a/mesalib/src/mesa/main/texcompress_rgtc.c b/mesalib/src/mesa/main/texcompress_rgtc.c
index 1f8de25ec..7afd8ffa7 100644
--- a/mesalib/src/mesa/main/texcompress_rgtc.c
+++ b/mesalib/src/mesa/main/texcompress_rgtc.c
@@ -38,7 +38,6 @@
#include "colormac.h"
#include "image.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mipmap.h"
#include "texcompress.h"
#include "texcompress_rgtc.h"
@@ -319,12 +318,11 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
static void
-fetch_red_rgtc1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_red_rgtc1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte red;
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
- unsigned_fetch_texel_rgtc(rowStride, map + sliceOffset, i, j, &red, 1);
+ unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
texel[RCOMP] = UBYTE_TO_FLOAT(red);
texel[GCOMP] = 0.0;
texel[BCOMP] = 0.0;
@@ -332,12 +330,11 @@ fetch_red_rgtc1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_l_latc1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_l_latc1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte red;
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
- unsigned_fetch_texel_rgtc(rowStride, map + sliceOffset, i, j, &red, 1);
+ unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
texel[RCOMP] =
texel[GCOMP] =
texel[BCOMP] = UBYTE_TO_FLOAT(red);
@@ -345,13 +342,11 @@ fetch_l_latc1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_signed_red_rgtc1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_signed_red_rgtc1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLbyte red;
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
- signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map + sliceOffset,
+ signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
i, j, &red, 1);
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[GCOMP] = 0.0;
@@ -360,13 +355,11 @@ fetch_signed_red_rgtc1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_signed_l_latc1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_signed_l_latc1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLbyte red;
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
- signed_fetch_texel_rgtc(rowStride, (GLbyte *) map + sliceOffset,
+ signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
i, j, &red, 1);
texel[RCOMP] =
texel[GCOMP] =
@@ -375,17 +368,15 @@ fetch_signed_l_latc1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_rg_rgtc2(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_rg_rgtc2(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte red, green;
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
unsigned_fetch_texel_rgtc(rowStride,
- map + sliceOffset,
+ map,
i, j, &red, 2);
unsigned_fetch_texel_rgtc(rowStride,
- map + sliceOffset + 8,
+ map + 8,
i, j, &green, 2);
texel[RCOMP] = UBYTE_TO_FLOAT(red);
texel[GCOMP] = UBYTE_TO_FLOAT(green);
@@ -394,17 +385,15 @@ fetch_rg_rgtc2(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_la_latc2(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_la_latc2(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLubyte red, green;
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
unsigned_fetch_texel_rgtc(rowStride,
- map + sliceOffset,
+ map,
i, j, &red, 2);
unsigned_fetch_texel_rgtc(rowStride,
- map + sliceOffset + 8,
+ map + 8,
i, j, &green, 2);
texel[RCOMP] =
texel[GCOMP] =
@@ -414,17 +403,15 @@ fetch_la_latc2(const GLubyte *map, const GLuint imageOffsets[],
static void
-fetch_signed_rg_rgtc2(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_signed_rg_rgtc2(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLbyte red, green;
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
signed_fetch_texel_rgtc(rowStride,
- (GLbyte *) map + sliceOffset,
+ (GLbyte *) map,
i, j, &red, 2);
signed_fetch_texel_rgtc(rowStride,
- (GLbyte *) map + sliceOffset + 8,
+ (GLbyte *) map + 8,
i, j, &green, 2);
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[GCOMP] = BYTE_TO_FLOAT_TEX(green);
@@ -434,17 +421,15 @@ fetch_signed_rg_rgtc2(const GLubyte *map, const GLuint imageOffsets[],
static void
-fetch_signed_la_latc2(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k,
- GLfloat *texel)
+fetch_signed_la_latc2(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
GLbyte red, green;
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
signed_fetch_texel_rgtc(rowStride,
- (GLbyte *) map + sliceOffset,
+ (GLbyte *) map,
i, j, &red, 2);
signed_fetch_texel_rgtc(rowStride,
- (GLbyte *) map + sliceOffset + 8,
+ (GLbyte *) map + 8,
i, j, &green, 2);
texel[RCOMP] =
texel[GCOMP] =
diff --git a/mesalib/src/mesa/main/texcompress_rgtc.h b/mesalib/src/mesa/main/texcompress_rgtc.h
index 9e1cce438..98638f022 100644
--- a/mesalib/src/mesa/main/texcompress_rgtc.h
+++ b/mesalib/src/mesa/main/texcompress_rgtc.h
@@ -25,7 +25,6 @@
#define TEXCOMPRESS_RGTC_H
#include "glheader.h"
-#include "mfeatures.h"
#include "texstore.h"
diff --git a/mesalib/src/mesa/main/texcompress_s3tc.c b/mesalib/src/mesa/main/texcompress_s3tc.c
index 4a81ad803..41ea33613 100644
--- a/mesalib/src/mesa/main/texcompress_s3tc.c
+++ b/mesalib/src/mesa/main/texcompress_s3tc.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -39,7 +40,6 @@
#include "dlopen.h"
#include "image.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "texcompress.h"
#include "texcompress_s3tc.h"
@@ -345,13 +345,12 @@ problem(const char *func)
static void
-fetch_rgb_dxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgb_dxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgb_dxt1) {
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
GLubyte tex[4];
- fetch_ext_rgb_dxt1(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgb_dxt1(rowStride, map, i, j, tex);
texel[RCOMP] = UBYTE_TO_FLOAT(tex[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(tex[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(tex[BCOMP]);
@@ -363,13 +362,12 @@ fetch_rgb_dxt1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_rgba_dxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgba_dxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt1) {
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt1(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt1(rowStride, map, i, j, tex);
texel[RCOMP] = UBYTE_TO_FLOAT(tex[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(tex[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(tex[BCOMP]);
@@ -381,13 +379,12 @@ fetch_rgba_dxt1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_rgba_dxt3(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgba_dxt3(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt3) {
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt3(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt3(rowStride, map, i, j, tex);
texel[RCOMP] = UBYTE_TO_FLOAT(tex[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(tex[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(tex[BCOMP]);
@@ -399,13 +396,12 @@ fetch_rgba_dxt3(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_rgba_dxt5(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_rgba_dxt5(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt5) {
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt5(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt5(rowStride, map, i, j, tex);
texel[RCOMP] = UBYTE_TO_FLOAT(tex[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(tex[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(tex[BCOMP]);
@@ -418,13 +414,12 @@ fetch_rgba_dxt5(const GLubyte *map, const GLuint imageOffsets[],
static void
-fetch_srgb_dxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_srgb_dxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgb_dxt1) {
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
GLubyte tex[4];
- fetch_ext_rgb_dxt1(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgb_dxt1(rowStride, map, i, j, tex);
texel[RCOMP] = _mesa_nonlinear_to_linear(tex[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(tex[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(tex[BCOMP]);
@@ -436,13 +431,12 @@ fetch_srgb_dxt1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_srgba_dxt1(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_srgba_dxt1(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt1) {
- GLuint sliceOffset = k ? imageOffsets[k] / 2 : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt1(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt1(rowStride, map, i, j, tex);
texel[RCOMP] = _mesa_nonlinear_to_linear(tex[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(tex[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(tex[BCOMP]);
@@ -454,13 +448,12 @@ fetch_srgba_dxt1(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_srgba_dxt3(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_srgba_dxt3(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt3) {
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt3(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt3(rowStride, map, i, j, tex);
texel[RCOMP] = _mesa_nonlinear_to_linear(tex[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(tex[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(tex[BCOMP]);
@@ -472,13 +465,12 @@ fetch_srgba_dxt3(const GLubyte *map, const GLuint imageOffsets[],
}
static void
-fetch_srgba_dxt5(const GLubyte *map, const GLuint imageOffsets[],
- GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+fetch_srgba_dxt5(const GLubyte *map,
+ GLint rowStride, GLint i, GLint j, GLfloat *texel)
{
if (fetch_ext_rgba_dxt5) {
- GLuint sliceOffset = k ? imageOffsets[k] : 0;
GLubyte tex[4];
- fetch_ext_rgba_dxt5(rowStride, map + sliceOffset, i, j, tex);
+ fetch_ext_rgba_dxt5(rowStride, map, i, j, tex);
texel[RCOMP] = _mesa_nonlinear_to_linear(tex[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(tex[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(tex[BCOMP]);
diff --git a/mesalib/src/mesa/main/texcompress_s3tc.h b/mesalib/src/mesa/main/texcompress_s3tc.h
index d9ef68992..fbc04c234 100644
--- a/mesalib/src/mesa/main/texcompress_s3tc.h
+++ b/mesalib/src/mesa/main/texcompress_s3tc.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef TEXCOMPRESS_S3TC_H
@@ -27,7 +28,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
#include "texstore.h"
#include "texcompress.h"
diff --git a/mesalib/src/mesa/main/texenv.c b/mesalib/src/mesa/main/texenv.c
index 2979e6706..84731ddda 100644
--- a/mesalib/src/mesa/main/texenv.c
+++ b/mesalib/src/mesa/main/texenv.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -879,7 +880,7 @@ _mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param )
}
else if (pname == GL_BUMP_NUM_TEX_UNITS_ATI) {
GLint count = 0;
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (ctx->Const.SupportedBumpUnits & (1 << i)) {
count++;
}
@@ -887,7 +888,7 @@ _mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param )
*param = count;
}
else if (pname == GL_BUMP_TEX_UNITS_ATI) {
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (ctx->Const.SupportedBumpUnits & (1 << i)) {
*param++ = i + GL_TEXTURE0;
}
@@ -928,7 +929,7 @@ _mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param )
}
else if (pname == GL_BUMP_NUM_TEX_UNITS_ATI) {
GLint count = 0;
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (ctx->Const.SupportedBumpUnits & (1 << i)) {
count++;
}
@@ -936,7 +937,7 @@ _mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param )
*param = (GLfloat) count;
}
else if (pname == GL_BUMP_TEX_UNITS_ATI) {
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (ctx->Const.SupportedBumpUnits & (1 << i)) {
*param++ = (GLfloat) (i + GL_TEXTURE0);
}
diff --git a/mesalib/src/mesa/main/texenv.h b/mesalib/src/mesa/main/texenv.h
index 1e9c5faed..5f71e276d 100644
--- a/mesalib/src/mesa/main/texenv.h
+++ b/mesalib/src/mesa/main/texenv.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texenvprogram.h b/mesalib/src/mesa/main/texenvprogram.h
index 3d9cb8546..aff404be0 100644
--- a/mesalib/src/mesa/main/texenvprogram.h
+++ b/mesalib/src/mesa/main/texenvprogram.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texformat.c b/mesalib/src/mesa/main/texformat.c
index 6f22a4f5f..495a2048d 100644
--- a/mesalib/src/mesa/main/texformat.c
+++ b/mesalib/src/mesa/main/texformat.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "context.h"
#include "enums.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "texcompress.h"
#include "texformat.h"
@@ -50,250 +50,229 @@
* internalFormat parameters passed to glTexImage().
*
* \param ctx the GL context.
+ * \param target a texture target (GL_TEXTURE_x)
* \param internalFormat user's prefered internal texture format.
* \param format incoming image pixel format.
* \param type incoming image data type.
*
- * \return a pointer to a gl_texture_format object which describes the
- * choosen texture format, or NULL on failure.
- *
- * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers
- * will typically override this function with a specialized version.
+ * \return the closest gl_format for the given format/type arguments
+ *
+ * This is called via dd_function_table::ChooseTextureFormat. Hardware
+ * drivers may override this function with a specialized version.
*/
gl_format
_mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
GLint internalFormat, GLenum format, GLenum type)
{
(void) format;
- (void) type;
switch (internalFormat) {
- /* shallow RGBA formats */
- case 4:
- case GL_RGBA:
- if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
- } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
- } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
- }
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
-
- case GL_RGBA8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- case GL_RGB5_A1:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
- break;
- case GL_RGBA2:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
- break;
- case GL_RGBA4:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
- break;
-
- /* deep RGBA formats */
- case GL_RGB10_A2:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- case GL_RGBA12:
- case GL_RGBA16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
-
- /* shallow RGB formats */
- case 3:
- case GL_RGB:
- if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
- }
- /* fallthrough */
- case GL_RGB8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- case GL_R3_G3_B2:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- case GL_RGB4:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
- break;
- case GL_RGB5:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
- break;
-
- /* deep RGB formats */
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
-
- /* Alpha formats */
- case GL_ALPHA:
- case GL_ALPHA4:
- case GL_ALPHA8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
- break;
-
- case GL_ALPHA12:
- case GL_ALPHA16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
- break;
-
- /* Luminance formats */
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4:
- case GL_LUMINANCE8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
- break;
-
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
- break;
+ /* shallow RGBA formats */
+ case 4:
+ case GL_RGBA:
+ if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
+ } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
+ } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+ }
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+
+ case GL_RGBA8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+ case GL_RGB5_A1:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
+ break;
+ case GL_RGBA2:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
+ break;
+ case GL_RGBA4:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
+ break;
+
+ /* deep RGBA formats */
+ case GL_RGB10_A2:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+ case GL_RGBA12:
+ case GL_RGBA16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+
+ /* shallow RGB formats */
+ case 3:
+ case GL_RGB:
+ if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+ }
+ /* fallthrough */
+ case GL_RGB8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+ case GL_R3_G3_B2:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+ case GL_RGB4:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
+ break;
+ case GL_RGB5:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
+ break;
+
+ /* deep RGB formats */
+ case GL_RGB10:
+ case GL_RGB12:
+ case GL_RGB16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_UNORM);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+
+ /* Alpha formats */
+ case GL_ALPHA:
+ case GL_ALPHA4:
+ case GL_ALPHA8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
+ break;
+
+ case GL_ALPHA12:
+ case GL_ALPHA16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
+ break;
+
+ /* Luminance formats */
+ case 1:
+ case GL_LUMINANCE:
+ case GL_LUMINANCE4:
+ case GL_LUMINANCE8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
+ break;
+
+ case GL_LUMINANCE12:
+ case GL_LUMINANCE16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
+ break;
/* Luminance/Alpha formats */
- case GL_LUMINANCE4_ALPHA4:
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
- break;
-
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
- break;
-
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
- break;
-
- case GL_INTENSITY:
- case GL_INTENSITY4:
- case GL_INTENSITY8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
- break;
-
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
- break;
-
- default:
- ; /* fallthrough */
- }
-
- if (ctx->Extensions.ARB_depth_texture) {
- switch (internalFormat) {
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT24:
- case GL_DEPTH_COMPONENT32:
- RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
- RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
- break;
- case GL_DEPTH_COMPONENT16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
- RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
- default:
- ; /* fallthrough */
+ case GL_LUMINANCE4_ALPHA4:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
+ break;
+
+ case 2:
+ case GL_LUMINANCE_ALPHA:
+ case GL_LUMINANCE6_ALPHA2:
+ case GL_LUMINANCE8_ALPHA8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
+ break;
+
+ case GL_LUMINANCE12_ALPHA4:
+ case GL_LUMINANCE12_ALPHA12:
+ case GL_LUMINANCE16_ALPHA16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
+ break;
+
+ case GL_INTENSITY:
+ case GL_INTENSITY4:
+ case GL_INTENSITY8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
+ break;
+
+ case GL_INTENSITY12:
+ case GL_INTENSITY16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
+ break;
+
+ case GL_DEPTH_COMPONENT:
+ case GL_DEPTH_COMPONENT24:
+ case GL_DEPTH_COMPONENT32:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
+ break;
+ case GL_DEPTH_COMPONENT16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
+ break;
+
+ case GL_COMPRESSED_ALPHA_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
+ break;
+ case GL_COMPRESSED_LUMINANCE_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
+ break;
+ case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
+ break;
+ case GL_COMPRESSED_INTENSITY_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
+ break;
+ case GL_COMPRESSED_RGB_ARB:
+ /* We don't use texture compression for 1D and 1D array textures.
+ * For 1D textures, compressions doesn't buy us much.
+ * For 1D ARRAY textures, there's complicated issues with updating
+ * sub-regions on non-block boundaries with glCopyTexSubImage, among
+ * other issues. FWIW, the GL_EXT_texture_array extension prohibits
+ * 1D ARRAY textures in S3TC format.
+ */
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
+ if (ctx->Extensions.EXT_texture_compression_s3tc ||
+ ctx->Extensions.ANGLE_texture_compression_dxt)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
+ if (ctx->Extensions.TDFX_texture_compression_FXT1)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
}
- }
-
- switch (internalFormat) {
- case GL_COMPRESSED_ALPHA_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
- break;
- case GL_COMPRESSED_LUMINANCE_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
- break;
- case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
- break;
- case GL_COMPRESSED_INTENSITY_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
- break;
- case GL_COMPRESSED_RGB_ARB:
- /* We don't use texture compression for 1D and 1D array textures.
- * For 1D textures, compressions doesn't buy us much.
- * For 1D ARRAY textures, there's complicated issues with updating
- * sub-regions on non-block boundaries with glCopyTexSubImage, among
- * other issues. FWIW, the GL_EXT_texture_array extension prohibits
- * 1D ARRAY textures in S3TC format.
- */
- if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
- if (ctx->Extensions.EXT_texture_compression_s3tc ||
- ctx->Extensions.ANGLE_texture_compression_dxt)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
- if (ctx->Extensions.TDFX_texture_compression_FXT1)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
- }
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- case GL_COMPRESSED_RGBA_ARB:
- /* We don't use texture compression for 1D and 1D array textures. */
- if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
- if (ctx->Extensions.EXT_texture_compression_s3tc ||
- ctx->Extensions.ANGLE_texture_compression_dxt)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
- if (ctx->Extensions.TDFX_texture_compression_FXT1)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
- }
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
- default:
- ; /* fallthrough */
- }
-
- if (ctx->Extensions.ARB_ES2_compatibility) {
- switch (internalFormat) {
- case GL_RGB565:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
- break;
- default:
- ; /* fallthrough */
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
+ case GL_COMPRESSED_RGBA_ARB:
+ /* We don't use texture compression for 1D and 1D array textures. */
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
+ if (ctx->Extensions.EXT_texture_compression_s3tc ||
+ ctx->Extensions.ANGLE_texture_compression_dxt)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
+ if (ctx->Extensions.TDFX_texture_compression_FXT1)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
}
- }
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
- if (ctx->Extensions.MESA_ycbcr_texture) {
- if (internalFormat == GL_YCBCR_MESA) {
- if (type == GL_UNSIGNED_SHORT_8_8_MESA)
- RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR);
- else
- RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV);
- }
- }
+ case GL_RGB565:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
+ break;
+
+ case GL_YCBCR_MESA:
+ if (type == GL_UNSIGNED_SHORT_8_8_MESA)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR);
+ else
+ RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV);
+ break;
/* For non-generic compressed format we assert two things:
*
@@ -303,7 +282,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
* 2. The driver only enables the extension if it supports all of the
* formats that are part of that extension.
*/
- switch (internalFormat) {
case GL_COMPRESSED_RGB_FXT1_3DFX:
return MESA_FORMAT_RGB_FXT1;
case GL_COMPRESSED_RGBA_FXT1_3DFX:
@@ -368,560 +346,474 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
return MESA_FORMAT_SRGBA_DXT3;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return MESA_FORMAT_SRGBA_DXT5;
- default:
- ; /* fallthrough */
- }
-
- if (ctx->Extensions.ARB_texture_float) {
- switch (internalFormat) {
- case GL_ALPHA16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_ALPHA32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_LUMINANCE16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_LUMINANCE32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_LUMINANCE_ALPHA16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_LUMINANCE_ALPHA32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_INTENSITY16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_INTENSITY32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_RGB16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_RGB32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_RGBA16F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_RGBA32F_ARB:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_shared_exponent) {
- switch (internalFormat) {
- case GL_RGB9_E5:
- ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]);
- return MESA_FORMAT_RGB9_E5_FLOAT;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_packed_float) {
- switch (internalFormat) {
- case GL_R11F_G11F_B10F:
- ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]);
- return MESA_FORMAT_R11_G11_B10_FLOAT;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_packed_depth_stencil) {
- switch (internalFormat) {
- case GL_DEPTH_STENCIL_EXT:
- case GL_DEPTH24_STENCIL8_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
- break;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_depth_buffer_float) {
- switch (internalFormat) {
- case GL_DEPTH_COMPONENT32F:
- ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]);
- return MESA_FORMAT_Z32_FLOAT;
- case GL_DEPTH32F_STENCIL8:
- ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]);
- return MESA_FORMAT_Z32_FLOAT_X24S8;
- default:
- ; /* fallthrough */
- }
- }
- if (ctx->Extensions.ATI_envmap_bumpmap) {
- switch (internalFormat) {
- case GL_DUDV_ATI:
- case GL_DU8DV8_ATI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8);
- break;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_snorm) {
- switch (internalFormat) {
- case GL_RED_SNORM:
- case GL_R8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8);
- break;
- case GL_RG_SNORM:
- case GL_RG8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
- break;
- case GL_RGB_SNORM:
- case GL_RGB8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
- /* FALLTHROUGH */
- case GL_RGBA_SNORM:
- case GL_RGBA8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_ALPHA_SNORM:
- case GL_ALPHA8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_LUMINANCE_SNORM:
- case GL_LUMINANCE8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_LUMINANCE_ALPHA_SNORM:
- case GL_LUMINANCE8_ALPHA8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_INTENSITY_SNORM:
- case GL_INTENSITY8_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_R16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
- break;
- case GL_RG16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
- break;
- case GL_RGB16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
- /* FALLTHROUGH */
- case GL_RGBA16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_ALPHA16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_LUMINANCE16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
- /* FALLTHROUGH */
- case GL_LUMINANCE16_ALPHA16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- case GL_INTENSITY16_SNORM:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
- break;
- default:
- ; /* fall-through */
- }
- }
-
- if (ctx->Extensions.EXT_texture_sRGB) {
- switch (internalFormat) {
- case GL_SRGB_EXT:
- case GL_SRGB8_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_SRGB_ALPHA_EXT:
- case GL_SRGB8_ALPHA8_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_SLUMINANCE_EXT:
- case GL_SLUMINANCE8_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_SLUMINANCE_ALPHA_EXT:
- case GL_SLUMINANCE8_ALPHA8_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_COMPRESSED_SLUMINANCE_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_COMPRESSED_SRGB_EXT:
- if (ctx->Extensions.EXT_texture_compression_s3tc)
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- case GL_COMPRESSED_SRGB_ALPHA_EXT:
- if (ctx->Extensions.EXT_texture_compression_s3tc)
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
- RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
- break;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_integer) {
- switch (internalFormat) {
- case GL_ALPHA8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_ALPHA16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_ALPHA32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_ALPHA8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_ALPHA16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_ALPHA32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- case GL_LUMINANCE8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_LUMINANCE16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_LUMINANCE32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_LUMINANCE8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_LUMINANCE16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_LUMINANCE32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- case GL_LUMINANCE_ALPHA8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_LUMINANCE_ALPHA16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_LUMINANCE_ALPHA32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_LUMINANCE_ALPHA8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_LUMINANCE_ALPHA16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_LUMINANCE_ALPHA32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- case GL_INTENSITY8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_INTENSITY16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_INTENSITY32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_INTENSITY8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_INTENSITY16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_INTENSITY32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- }
- }
-
- if (ctx->Version >= 30 ||
- ctx->Extensions.EXT_texture_integer) {
- switch (internalFormat) {
- case GL_RGB8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_RGB16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_RGB32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_RGB8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_RGB16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_RGB32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- case GL_RGBA8UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
- break;
- case GL_RGBA16UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
- break;
- case GL_RGBA32UI_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
- break;
- case GL_RGBA8I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
- break;
- case GL_RGBA16I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
- break;
- case GL_RGBA32I_EXT:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
- break;
- }
- }
-
- if (ctx->Extensions.ARB_texture_rg) {
- switch (internalFormat) {
- case GL_R8:
- case GL_RED:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
- break;
-
- case GL_COMPRESSED_RED:
- if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
- RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
- break;
-
- case GL_R16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R16);
- break;
-
- case GL_RG:
- case GL_RG8:
- RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
- break;
-
- case GL_COMPRESSED_RG:
- if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
- RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
- break;
-
- case GL_RG16:
- RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616);
- break;
-
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) {
- switch (internalFormat) {
- case GL_R16F:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_R32F:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
- case GL_RG16F:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- break;
- case GL_RG32F:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
- break;
-
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Version >= 30 ||
- (ctx->Extensions.ARB_texture_rg &&
- ctx->Extensions.EXT_texture_integer)) {
- switch (internalFormat) {
- case GL_R8UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
- break;
- case GL_RG8UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
- break;
- case GL_R16UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
- break;
- case GL_RG16UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
- break;
- case GL_R32UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
- break;
- case GL_RG32UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
- break;
- case GL_R8I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8);
- break;
- case GL_RG8I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8);
- break;
- case GL_R16I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16);
- break;
- case GL_RG16I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16);
- break;
- case GL_R32I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32);
- break;
- case GL_RG32I:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32);
- break;
- default:
- break;
- }
- }
-
- if (ctx->Extensions.ARB_texture_rgb10_a2ui) {
- switch (internalFormat) {
- case GL_RGB10_A2UI:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT);
- RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT);
- break;
- default:
- break;
- }
- }
- /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0).
- */
- if (_mesa_is_gles(ctx)) {
- switch (internalFormat) {
- case GL_BGRA:
- RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
- break;
-
- default:
- ; /* fallthrough */
- }
+ case GL_ALPHA16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_ALPHA32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_LUMINANCE16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_LUMINANCE32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_LUMINANCE_ALPHA16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_LUMINANCE_ALPHA32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_INTENSITY16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_INTENSITY32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_RGB16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_FLOAT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_RGB32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_FLOAT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_RGBA16F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_RGBA32F_ARB:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+
+ case GL_RGB9_E5:
+ /* GL_EXT_texture_shared_exponent -- just one format to support */
+ ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]);
+ return MESA_FORMAT_RGB9_E5_FLOAT;
+
+ case GL_R11F_G11F_B10F:
+ /* GL_EXT_texture_packed_float -- just one format to support */
+ ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]);
+ return MESA_FORMAT_R11_G11_B10_FLOAT;
+
+ case GL_DEPTH_STENCIL_EXT:
+ case GL_DEPTH24_STENCIL8_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
+ break;
+
+ case GL_DEPTH_COMPONENT32F:
+ ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]);
+ return MESA_FORMAT_Z32_FLOAT;
+ case GL_DEPTH32F_STENCIL8:
+ ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]);
+ return MESA_FORMAT_Z32_FLOAT_X24S8;
+
+ case GL_DUDV_ATI:
+ case GL_DU8DV8_ATI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8);
+ break;
+
+ case GL_RED_SNORM:
+ case GL_R8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8);
+ break;
+ case GL_RG_SNORM:
+ case GL_RG8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
+ break;
+ case GL_RGB_SNORM:
+ case GL_RGB8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
+ /* FALLTHROUGH */
+ case GL_RGBA_SNORM:
+ case GL_RGBA8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_ALPHA_SNORM:
+ case GL_ALPHA8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_LUMINANCE_SNORM:
+ case GL_LUMINANCE8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_LUMINANCE_ALPHA_SNORM:
+ case GL_LUMINANCE8_ALPHA8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_INTENSITY_SNORM:
+ case GL_INTENSITY8_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_R16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
+ break;
+ case GL_RG16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
+ break;
+ case GL_RGB16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_SNORM);
+ /* FALLTHROUGH */
+ case GL_RGBA16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_ALPHA16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_LUMINANCE16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
+ /* FALLTHROUGH */
+ case GL_LUMINANCE16_ALPHA16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+ case GL_INTENSITY16_SNORM:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+ break;
+
+ case GL_SRGB_EXT:
+ case GL_SRGB8_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_SRGB_ALPHA_EXT:
+ case GL_SRGB8_ALPHA8_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_SLUMINANCE_EXT:
+ case GL_SLUMINANCE8_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_SLUMINANCE_ALPHA_EXT:
+ case GL_SLUMINANCE8_ALPHA8_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_COMPRESSED_SLUMINANCE_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_COMPRESSED_SRGB_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+ case GL_COMPRESSED_SRGB_ALPHA_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
+ break;
+
+ case GL_ALPHA8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_ALPHA16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_ALPHA32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_ALPHA8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_ALPHA16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_ALPHA32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+ case GL_LUMINANCE8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_LUMINANCE16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_LUMINANCE32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_LUMINANCE8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_LUMINANCE16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_LUMINANCE32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+ case GL_LUMINANCE_ALPHA8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_LUMINANCE_ALPHA16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_LUMINANCE_ALPHA32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_LUMINANCE_ALPHA8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_LUMINANCE_ALPHA16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_LUMINANCE_ALPHA32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+ case GL_INTENSITY8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_INTENSITY16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_INTENSITY32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_INTENSITY8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_INTENSITY16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_INTENSITY32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+
+ case GL_RGB8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR8888_UINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_RGB16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_UINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_RGB32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_UINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_RGB8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR8888_SINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_RGB16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_SINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_RGB32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_SINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+ case GL_RGBA8UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
+ break;
+ case GL_RGBA16UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
+ break;
+ case GL_RGBA32UI_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
+ break;
+ case GL_RGBA8I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
+ break;
+ case GL_RGBA16I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
+ break;
+ case GL_RGBA32I_EXT:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
+ break;
+
+ case GL_R8:
+ case GL_RED:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
+ break;
+
+ case GL_COMPRESSED_RED:
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
+ break;
+
+ case GL_R16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R16);
+ break;
+
+ case GL_RG:
+ case GL_RG8:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
+ break;
+
+ case GL_COMPRESSED_RG:
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
+ break;
+
+ case GL_RG16:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616);
+ break;
+
+ case GL_R16F:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_R32F:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+ case GL_RG16F:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ break;
+ case GL_RG32F:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+ break;
+
+ case GL_R8UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
+ break;
+ case GL_RG8UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
+ break;
+ case GL_R16UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
+ break;
+ case GL_RG16UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
+ break;
+ case GL_R32UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
+ break;
+ case GL_RG32UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
+ break;
+ case GL_R8I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8);
+ break;
+ case GL_RG8I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8);
+ break;
+ case GL_R16I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16);
+ break;
+ case GL_RG16I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16);
+ break;
+ case GL_R32I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32);
+ break;
+ case GL_RG32I:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32);
+ break;
+
+ case GL_RGB10_A2UI:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT);
+ break;
+
+ case GL_BGRA:
+ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+ break;
}
_mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
@@ -929,3 +821,16 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
return MESA_FORMAT_NONE;
}
+GLboolean
+_mesa_tex_target_is_array(GLenum target)
+{
+ switch (target) {
+ case GL_TEXTURE_1D_ARRAY_EXT:
+ case GL_TEXTURE_2D_ARRAY_EXT:
+ case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+ case GL_TEXTURE_CUBE_MAP_ARRAY:
+ return GL_TRUE;
+ default:
+ return GL_FALSE;
+ }
+}
diff --git a/mesalib/src/mesa/main/texformat.h b/mesalib/src/mesa/main/texformat.h
index 71af9ca22..d6ff54173 100644
--- a/mesalib/src/mesa/main/texformat.h
+++ b/mesalib/src/mesa/main/texformat.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef TEXFORMAT_H
@@ -35,5 +36,7 @@ extern gl_format
_mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
GLint internalFormat, GLenum format, GLenum type);
+extern GLboolean
+_mesa_tex_target_is_array(GLenum target);
#endif
diff --git a/mesalib/src/mesa/main/texgen.c b/mesalib/src/mesa/main/texgen.c
index e45cfe176..81ad224a0 100644
--- a/mesalib/src/mesa/main/texgen.c
+++ b/mesalib/src/mesa/main/texgen.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -34,7 +35,6 @@
#include "main/context.h"
#include "main/enums.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/texgen.h"
#include "main/texstate.h"
#include "math/m_matrix.h"
diff --git a/mesalib/src/mesa/main/texgen.h b/mesalib/src/mesa/main/texgen.h
index 97563a0f0..3292258dc 100644
--- a/mesalib/src/mesa/main/texgen.h
+++ b/mesalib/src/mesa/main/texgen.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c
index 74b09ef2c..70319c52b 100644
--- a/mesalib/src/mesa/main/texgetimage.c
+++ b/mesalib/src/mesa/main/texgetimage.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -37,7 +38,6 @@
#include "format_unpack.h"
#include "glformats.h"
#include "image.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "pack.h"
#include "pbo.h"
diff --git a/mesalib/src/mesa/main/texgetimage.h b/mesalib/src/mesa/main/texgetimage.h
index c9277fc91..32c33fed4 100644
--- a/mesalib/src/mesa/main/texgetimage.h
+++ b/mesalib/src/mesa/main/texgetimage.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c
index 784b389a7..9aaa63f13 100644
--- a/mesalib/src/mesa/main/teximage.c
+++ b/mesalib/src/mesa/main/teximage.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -39,7 +40,6 @@
#include "image.h"
#include "imports.h"
#include "macros.h"
-#include "mfeatures.h"
#include "multisample.h"
#include "state.h"
#include "texcompress.h"
@@ -180,7 +180,7 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
default:
; /* fallthrough */
}
-
+
if (ctx->Extensions.TDFX_texture_compression_FXT1) {
switch (internalFormat) {
case GL_COMPRESSED_RGB_FXT1_3DFX:
@@ -315,15 +315,17 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
case GL_SRGB_EXT:
case GL_SRGB8_EXT:
case GL_COMPRESSED_SRGB_EXT:
- case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
return GL_RGB;
+ case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+ return ctx->Extensions.EXT_texture_compression_s3tc ? GL_RGB : -1;
case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT:
case GL_COMPRESSED_SRGB_ALPHA_EXT:
+ return GL_RGBA;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
- return GL_RGBA;
+ return ctx->Extensions.EXT_texture_compression_s3tc ? GL_RGBA : -1;
case GL_SLUMINANCE_ALPHA_EXT:
case GL_SLUMINANCE8_ALPHA8_EXT:
case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
@@ -613,7 +615,7 @@ set_tex_image(struct gl_texture_object *tObj,
/**
* Allocate a texture image structure.
- *
+ *
* Called via ctx->Driver.NewTextureImage() unless overriden by a device
* driver.
*
@@ -868,7 +870,7 @@ _mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj,
if (!texObj)
return NULL;
-
+
texImage = _mesa_select_tex_image(ctx, texObj, target, level);
if (!texImage) {
texImage = ctx->Driver.NewTextureImage(ctx);
@@ -974,7 +976,7 @@ get_proxy_tex_image(struct gl_context *ctx, GLenum target, GLint level)
*
* \param ctx GL context.
* \param target texture target.
- *
+ *
* \return the maximum number of allowed mipmap levels for the given
* texture target, or zero if passed a bad target.
*
@@ -1536,13 +1538,13 @@ error_check_subtexture_dimensions(struct gl_context *ctx,
}
/* check xoffset and width */
- if (xoffset < -destImage->Border) {
+ if (xoffset < - (GLint) destImage->Border) {
_mesa_error(ctx, GL_INVALID_VALUE, "%s%dD(xoffset)",
function, dims);
return GL_TRUE;
}
- if (xoffset + subWidth > destImage->Width) {
+ if (xoffset + subWidth > (GLint) destImage->Width) {
_mesa_error(ctx, GL_INVALID_VALUE, "%s%dD(xoffset+width)",
function, dims);
return GL_TRUE;
@@ -1556,7 +1558,7 @@ error_check_subtexture_dimensions(struct gl_context *ctx,
function, dims);
return GL_TRUE;
}
- if (yoffset + subHeight > destImage->Height) {
+ if (yoffset + subHeight > (GLint) destImage->Height) {
_mesa_error(ctx, GL_INVALID_VALUE, "%s%dD(yoffset+height)",
function, dims);
return GL_TRUE;
@@ -1594,18 +1596,24 @@ error_check_subtexture_dimensions(struct gl_context *ctx,
return GL_TRUE;
}
- /* size must be multiple of bw by bh or equal to whole texture size */
- if ((subWidth % bw != 0) && subWidth != destImage->Width) {
+ /* The size must be a multiple of bw x bh, or we must be using a
+ * offset+size that exactly hits the edge of the image. This
+ * is important for small mipmap levels (1x1, 2x1, etc) and for
+ * NPOT textures.
+ */
+ if ((subWidth % bw != 0) &&
+ (xoffset + subWidth != (GLint) destImage->Width)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s%dD(width = %d)", function, dims, subWidth);
return GL_TRUE;
}
- if ((subHeight % bh != 0) && subHeight != destImage->Height) {
+ if ((subHeight % bh != 0) &&
+ (yoffset + subHeight != (GLint) destImage->Height)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s%dD(height = %d)", function, dims, subHeight);
return GL_TRUE;
- }
+ }
}
return GL_FALSE;
@@ -1705,7 +1713,7 @@ target_can_be_compressed(const struct gl_context *ctx, GLenum target,
return ctx->Extensions.ARB_texture_cube_map_array;
default:
return GL_FALSE;
- }
+ }
}
@@ -1867,7 +1875,7 @@ compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth,
/**
* Test the glTexImage[123]D() parameters for errors.
- *
+ *
* \param ctx GL context.
* \param dimensions texture image dimensions (must be 1, 2 or 3).
* \param target texture target given by the user (already validated).
@@ -1879,7 +1887,7 @@ compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth,
* \param height image height given by the user.
* \param depth image depth given by the user.
* \param border image border given by the user.
- *
+ *
* \return GL_TRUE if a error is found, GL_FALSE otherwise
*
* Verifies each of the parameters against the constants specified in
@@ -1949,12 +1957,12 @@ texture_error_check( struct gl_context *ctx,
internalFormat);
} else {
if (format != internalFormat) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexImage%dD(format = %s, internalFormat = %s)",
- dimensions,
- _mesa_lookup_enum_by_nr(format),
- _mesa_lookup_enum_by_nr(internalFormat));
- return GL_TRUE;
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTexImage%dD(format = %s, internalFormat = %s)",
+ dimensions,
+ _mesa_lookup_enum_by_nr(format),
+ _mesa_lookup_enum_by_nr(internalFormat));
+ return GL_TRUE;
}
err = _mesa_es_error_check_format_and_type(format, type, dimensions);
@@ -2258,7 +2266,7 @@ error:
/**
* Test glTexSubImage[123]D() parameters for errors.
- *
+ *
* \param ctx GL context.
* \param dimensions texture image dimensions (must be 1, 2 or 3).
* \param target texture target given by the user (already validated)
@@ -2271,7 +2279,7 @@ error:
* \param width image width given by the user.
* \param height image height given by the user.
* \param depth image depth given by the user.
- *
+ *
* \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
*
* Verifies each of the parameters against the constants specified in
@@ -2376,7 +2384,7 @@ texsubimage_error_check(struct gl_context *ctx, GLuint dimensions,
/**
* Test glCopyTexImage[12]D() parameters for errors.
- *
+ *
* \param ctx GL context.
* \param dimensions texture image dimensions (must be 1, 2 or 3).
* \param target texture target given by the user.
@@ -2385,9 +2393,9 @@ texsubimage_error_check(struct gl_context *ctx, GLuint dimensions,
* \param width image width given by the user.
* \param height image height given by the user.
* \param border texture border.
- *
+ *
* \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
- *
+ *
* Verifies each of the parameters against the constants specified in
* __struct gl_contextRec::Const and the supported extensions, and according
* to the OpenGL specification.
@@ -2407,7 +2415,7 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
_mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexImage%uD(target=%s)",
dimensions, _mesa_lookup_enum_by_nr(target));
return GL_TRUE;
- }
+ }
/* level check */
if (level < 0 || level >= _mesa_max_texture_levels(ctx, target)) {
@@ -2753,9 +2761,8 @@ check_rtt_cb(GLuint key, void *data, void *userData)
att->Texture == texObj &&
att->TextureLevel == level &&
att->CubeMapFace == face) {
- ASSERT(_mesa_get_attachment_teximage(att));
- /* Tell driver about the new renderbuffer texture */
- ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att);
+ _mesa_update_texture_renderbuffer(ctx, ctx->DrawBuffer, att);
+ ASSERT(att->Renderbuffer->TexImage);
/* Mark fb status as indeterminate to force re-validation */
fb->_Status = 0;
}
@@ -2920,6 +2927,7 @@ _mesa_choose_texture_format(struct gl_context *ctx,
return f;
}
+
/**
* Adjust pixel unpack params and image dimensions to strip off the
* one-pixel texture border.
@@ -2957,7 +2965,9 @@ strip_texture_border(GLenum target,
*height = *height - 2; /* reduce the height by two border pixels */
}
- if (*depth >= 3 && target != GL_TEXTURE_2D_ARRAY && target != GL_TEXTURE_CUBE_MAP_ARRAY) {
+ if (*depth >= 3 &&
+ target != GL_TEXTURE_2D_ARRAY &&
+ target != GL_TEXTURE_CUBE_MAP_ARRAY) {
unpackNew->SkipImages++; /* skip the border */
*depth = *depth - 2; /* reduce the depth by two border pixels */
}
@@ -3309,7 +3319,7 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
_mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage%uD(target=%s)",
dims, _mesa_lookup_enum_by_nr(target));
return;
- }
+ }
if (ctx->NewState & _NEW_PIXEL)
_mesa_update_state(ctx);
@@ -3694,7 +3704,7 @@ compressed_subtexture_error_check(struct gl_context *ctx, GLint dims,
targetOK = GL_FALSE;
break;
}
-
+
if (!targetOK) {
_mesa_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage%uD(target)",
dims);
@@ -4027,6 +4037,7 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
}
}
+
static gl_format
validate_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
{
@@ -4098,6 +4109,7 @@ texbufferrange(struct gl_context *ctx, GLenum target, GLenum internalFormat,
_mesa_unlock_texture(ctx, texObj);
}
+
/** GL_ARB_texture_buffer_object */
void GLAPIENTRY
_mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)
@@ -4124,6 +4136,7 @@ _mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)
texbufferrange(ctx, target, internalFormat, bufObj, 0, buffer ? -1 : 0);
}
+
/** GL_ARB_texture_buffer_range */
void GLAPIENTRY
_mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer,
@@ -4164,6 +4177,7 @@ _mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer,
texbufferrange(ctx, target, internalFormat, bufObj, offset, size);
}
+
static GLboolean
is_renderable_texture_format(struct gl_context *ctx, GLenum internalformat)
{
@@ -4174,6 +4188,7 @@ is_renderable_texture_format(struct gl_context *ctx, GLenum internalformat)
return baseFormat != 0 && baseFormat != GL_STENCIL_INDEX;
}
+
/** GL_ARB_texture_multisample */
static GLboolean
check_multisample_target(GLuint dims, GLenum target)
@@ -4192,6 +4207,7 @@ check_multisample_target(GLuint dims, GLenum target)
}
}
+
static void
teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
GLint internalformat, GLsizei width, GLsizei height,
@@ -4309,7 +4325,6 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
texImage->FixedSampleLocations = fixedsamplelocations;
if (width > 0 && height > 0 && depth > 0) {
-
if (!ctx->Driver.AllocTextureStorage(ctx, texObj, 1,
width, height, depth)) {
/* tidy up the texture image state. strictly speaking,
@@ -4326,15 +4341,18 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
}
}
+
void GLAPIENTRY
_mesa_TexImage2DMultisample(GLenum target, GLsizei samples,
GLint internalformat, GLsizei width,
GLsizei height, GLboolean fixedsamplelocations)
{
teximagemultisample(2, target, samples, internalformat,
- width, height, 1, fixedsamplelocations, GL_FALSE, "glTexImage2DMultisample");
+ width, height, 1, fixedsamplelocations, GL_FALSE,
+ "glTexImage2DMultisample");
}
+
void GLAPIENTRY
_mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
GLint internalformat, GLsizei width,
@@ -4342,7 +4360,8 @@ _mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
GLboolean fixedsamplelocations)
{
teximagemultisample(3, target, samples, internalformat,
- width, height, depth, fixedsamplelocations, GL_FALSE, "glTexImage3DMultisample");
+ width, height, depth, fixedsamplelocations, GL_FALSE,
+ "glTexImage3DMultisample");
}
@@ -4352,9 +4371,11 @@ _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
GLsizei height, GLboolean fixedsamplelocations)
{
teximagemultisample(2, target, samples, internalformat,
- width, height, 1, fixedsamplelocations, GL_TRUE, "glTexStorage2DMultisample");
+ width, height, 1, fixedsamplelocations, GL_TRUE,
+ "glTexStorage2DMultisample");
}
+
void GLAPIENTRY
_mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width,
@@ -4362,5 +4383,6 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
GLboolean fixedsamplelocations)
{
teximagemultisample(3, target, samples, internalformat,
- width, height, depth, fixedsamplelocations, GL_TRUE, "glTexStorage3DMultisample");
+ width, height, depth, fixedsamplelocations, GL_TRUE,
+ "glTexStorage3DMultisample");
}
diff --git a/mesalib/src/mesa/main/teximage.h b/mesalib/src/mesa/main/teximage.h
index bb295c7a7..a0d71c9f8 100644
--- a/mesalib/src/mesa/main/teximage.h
+++ b/mesalib/src/mesa/main/teximage.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c
index 66377c8c0..27c040301 100644
--- a/mesalib/src/mesa/main/texobj.c
+++ b/mesalib/src/mesa/main/texobj.c
@@ -22,13 +22,13 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
-#include "mfeatures.h"
#include "bufferobj.h"
#include "colortab.h"
#include "context.h"
diff --git a/mesalib/src/mesa/main/texobj.h b/mesalib/src/mesa/main/texobj.h
index f86b4ebcd..622defa71 100644
--- a/mesalib/src/mesa/main/texobj.h
+++ b/mesalib/src/mesa/main/texobj.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texparam.c b/mesalib/src/mesa/main/texparam.c
index f60eb204e..b5a1e58e2 100644
--- a/mesalib/src/mesa/main/texparam.c
+++ b/mesalib/src/mesa/main/texparam.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -38,7 +39,6 @@
#include "main/formats.h"
#include "main/glformats.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/state.h"
#include "main/texcompress.h"
diff --git a/mesalib/src/mesa/main/texparam.h b/mesalib/src/mesa/main/texparam.h
index 19b4116c0..32cefad22 100644
--- a/mesalib/src/mesa/main/texparam.h
+++ b/mesalib/src/mesa/main/texparam.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texstate.c b/mesalib/src/mesa/main/texstate.c
index d44cd7cf9..afc9337ff 100644
--- a/mesalib/src/mesa/main/texstate.c
+++ b/mesalib/src/mesa/main/texstate.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -29,7 +30,6 @@
*/
#include "glheader.h"
-#include "mfeatures.h"
#include "bufferobj.h"
#include "colormac.h"
#include "colortab.h"
diff --git a/mesalib/src/mesa/main/texstate.h b/mesalib/src/mesa/main/texstate.h
index 7abf9101e..5c7fa8a31 100644
--- a/mesalib/src/mesa/main/texstate.h
+++ b/mesalib/src/mesa/main/texstate.h
@@ -22,9 +22,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/texstorage.c b/mesalib/src/mesa/main/texstorage.c
index 6309b5716..0a53726fe 100644
--- a/mesalib/src/mesa/main/texstorage.c
+++ b/mesalib/src/mesa/main/texstorage.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -34,7 +35,6 @@
#include "enums.h"
#include "imports.h"
#include "macros.h"
-#include "mfeatures.h"
#include "teximage.h"
#include "texobj.h"
#include "texstorage.h"
@@ -245,6 +245,36 @@ _mesa_is_legal_tex_storage_format(struct gl_context *ctx, GLenum internalformat)
}
}
+/**
+ * Default ctx->Driver.AllocTextureStorage() handler.
+ *
+ * The driver can override this with a more specific implementation if it
+ * desires, but this can be used to get the texture images allocated using the
+ * usual texture image handling code. The immutability of
+ * GL_ARB_texture_storage texture layouts is handled by texObj->Immutable
+ * checks at glTexImage* time.
+ */
+GLboolean
+_mesa_alloc_texture_storage(struct gl_context *ctx,
+ struct gl_texture_object *texObj,
+ GLsizei levels, GLsizei width,
+ GLsizei height, GLsizei depth)
+{
+ const int numFaces = _mesa_num_tex_faces(texObj->Target);
+ int face;
+ int level;
+
+ for (face = 0; face < numFaces; face++) {
+ for (level = 0; level < levels; level++) {
+ struct gl_texture_image *const texImage = texObj->Image[face][level];
+ if (!ctx->Driver.AllocTextureImageBuffer(ctx, texImage))
+ return GL_FALSE;
+ }
+ }
+
+ return GL_TRUE;
+}
+
/**
* Do error checking for calls to glTexStorage1/2/3D().
diff --git a/mesalib/src/mesa/main/texstorage.h b/mesalib/src/mesa/main/texstorage.h
index 9f172e1ca..ec4f71374 100644
--- a/mesalib/src/mesa/main/texstorage.h
+++ b/mesalib/src/mesa/main/texstorage.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -60,5 +61,10 @@ _mesa_TextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels,
extern GLboolean
_mesa_is_legal_tex_storage_format(struct gl_context *ctx, GLenum internalformat);
+extern GLboolean
+_mesa_alloc_texture_storage(struct gl_context *ctx,
+ struct gl_texture_object *texObj,
+ GLsizei levels, GLsizei width,
+ GLsizei height, GLsizei depth);
#endif /* TEXSTORAGE_H */
diff --git a/mesalib/src/mesa/main/texstore.c b/mesalib/src/mesa/main/texstore.c
index 0e13d8903..daa024c80 100644
--- a/mesalib/src/mesa/main/texstore.c
+++ b/mesalib/src/mesa/main/texstore.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
@@ -58,7 +59,6 @@
#include "image.h"
#include "macros.h"
#include "mipmap.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "pack.h"
#include "pbo.h"
diff --git a/mesalib/src/mesa/main/texstore.h b/mesalib/src/mesa/main/texstore.h
index 75f24bd45..f3d4a7d05 100644
--- a/mesalib/src/mesa/main/texstore.h
+++ b/mesalib/src/mesa/main/texstore.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/transformfeedback.c b/mesalib/src/mesa/main/transformfeedback.c
index fd4718d87..03f188300 100644
--- a/mesalib/src/mesa/main/transformfeedback.c
+++ b/mesalib/src/mesa/main/transformfeedback.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -35,7 +36,6 @@
#include "context.h"
#include "hash.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "transformfeedback.h"
#include "shaderapi.h"
@@ -385,7 +385,9 @@ _mesa_BeginTransformFeedback(GLenum mode)
}
}
- FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
+
obj->Active = GL_TRUE;
ctx->TransformFeedback.Mode = mode;
@@ -422,7 +424,9 @@ _mesa_EndTransformFeedback(void)
return;
}
- FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
+
ctx->TransformFeedback.CurrentObject->Active = GL_FALSE;
ctx->TransformFeedback.CurrentObject->Paused = GL_FALSE;
ctx->TransformFeedback.CurrentObject->EndedAnytime = GL_TRUE;
@@ -443,7 +447,7 @@ bind_buffer_range(struct gl_context *ctx, GLuint index,
struct gl_transform_feedback_object *obj =
ctx->TransformFeedback.CurrentObject;
- /* Note: no need to FLUSH_VERTICES or flag _NEW_TRANSFORM_FEEDBACK, because
+ /* Note: no need to FLUSH_VERTICES or flag NewTransformFeedback, because
* transform feedback buffers can't be changed while transform feedback is
* active.
*/
@@ -687,7 +691,7 @@ _mesa_TransformFeedbackVaryings(GLuint program, GLsizei count,
shProg->TransformFeedback.BufferMode = bufferMode;
- /* No need to set _NEW_TRANSFORM_FEEDBACK (or invoke FLUSH_VERTICES) since
+ /* No need to invoke FLUSH_VERTICES or flag NewTransformFeedback since
* the varyings won't be used until shader link time.
*/
}
@@ -898,7 +902,9 @@ _mesa_PauseTransformFeedback(void)
return;
}
- FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
+
obj->Paused = GL_TRUE;
assert(ctx->Driver.PauseTransformFeedback);
@@ -924,7 +930,9 @@ _mesa_ResumeTransformFeedback(void)
return;
}
- FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
+
obj->Paused = GL_FALSE;
assert(ctx->Driver.ResumeTransformFeedback);
diff --git a/mesalib/src/mesa/main/transformfeedback.h b/mesalib/src/mesa/main/transformfeedback.h
index c128746b3..f6dc2a7b3 100644
--- a/mesalib/src/mesa/main/transformfeedback.h
+++ b/mesalib/src/mesa/main/transformfeedback.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -28,7 +29,6 @@
#include <stdbool.h>
#include "compiler.h"
#include "glheader.h"
-#include "mfeatures.h"
#include "mtypes.h"
struct _glapi_table;
diff --git a/mesalib/src/mesa/main/uniform_query.cpp b/mesalib/src/mesa/main/uniform_query.cpp
index b8335fe6b..ec3104936 100644
--- a/mesalib/src/mesa/main/uniform_query.cpp
+++ b/mesalib/src/mesa/main/uniform_query.cpp
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include <stdlib.h>
@@ -777,24 +778,24 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg,
if (uni->type->is_sampler()) {
int i;
- for (i = 0; i < count; i++) {
- shProg->SamplerUnits[uni->sampler + offset + i] =
- ((unsigned *) values)[i];
- }
-
bool flushed = false;
for (i = 0; i < MESA_SHADER_TYPES; i++) {
struct gl_shader *const sh = shProg->_LinkedShaders[i];
+ int j;
- /* If the shader stage doesn't use any samplers, don't bother
- * checking if any samplers have changed.
+ /* If the shader stage doesn't use the sampler uniform, skip this.
*/
- if (sh == NULL || sh->active_samplers == 0)
+ if (sh == NULL || !uni->sampler[i].active)
continue;
+ for (j = 0; j < count; j++) {
+ sh->SamplerUnits[uni->sampler[i].index + offset + j] =
+ ((unsigned *) values)[j];
+ }
+
struct gl_program *const prog = sh->Program;
- assert(sizeof(prog->SamplerUnits) == sizeof(shProg->SamplerUnits));
+ assert(sizeof(prog->SamplerUnits) == sizeof(sh->SamplerUnits));
/* Determine if any of the samplers used by this shader stage have
* been modified.
@@ -802,7 +803,7 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg,
bool changed = false;
for (unsigned j = 0; j < Elements(prog->SamplerUnits); j++) {
if ((sh->active_samplers & (1U << j)) != 0
- && (prog->SamplerUnits[j] != shProg->SamplerUnits[j])) {
+ && (prog->SamplerUnits[j] != sh->SamplerUnits[j])) {
changed = true;
break;
}
@@ -815,8 +816,8 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg,
}
memcpy(prog->SamplerUnits,
- shProg->SamplerUnits,
- sizeof(shProg->SamplerUnits));
+ sh->SamplerUnits,
+ sizeof(sh->SamplerUnits));
_mesa_update_shader_textures_used(shProg, prog);
if (ctx->Driver.SamplerUniformChange)
diff --git a/mesalib/src/mesa/main/uniforms.c b/mesalib/src/mesa/main/uniforms.c
index d902407a0..6d79df683 100644
--- a/mesalib/src/mesa/main/uniforms.c
+++ b/mesalib/src/mesa/main/uniforms.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -44,6 +45,7 @@
#include "main/enums.h"
#include "ir_uniform.h"
#include "glsl_types.h"
+#include "program/program.h"
/**
* Update the vertex/fragment program's TexturesUsed array.
@@ -65,14 +67,18 @@ _mesa_update_shader_textures_used(struct gl_shader_program *shProg,
struct gl_program *prog)
{
GLuint s;
+ struct gl_shader *shader =
+ shProg->_LinkedShaders[_mesa_program_target_to_index(prog->Target)];
- memcpy(prog->SamplerUnits, shProg->SamplerUnits, sizeof(prog->SamplerUnits));
+ assert(shader);
+
+ memcpy(prog->SamplerUnits, shader->SamplerUnits, sizeof(prog->SamplerUnits));
memset(prog->TexturesUsed, 0, sizeof(prog->TexturesUsed));
for (s = 0; s < MAX_SAMPLERS; s++) {
if (prog->SamplersUsed & (1 << s)) {
- GLuint unit = shProg->SamplerUnits[s];
- GLuint tgt = shProg->SamplerTargets[s];
+ GLuint unit = shader->SamplerUnits[s];
+ GLuint tgt = shader->SamplerTargets[s];
assert(unit < Elements(prog->TexturesUsed));
assert(tgt < NUM_TEXTURE_TARGETS);
prog->TexturesUsed[unit] |= (1 << tgt);
@@ -630,7 +636,9 @@ _mesa_UniformBlockBinding(GLuint program,
uniformBlockBinding) {
int i;
- FLUSH_VERTICES(ctx, _NEW_BUFFER_OBJECT);
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewUniformBuffer;
+
shProg->UniformBlocks[uniformBlockIndex].Binding = uniformBlockBinding;
for (i = 0; i < MESA_SHADER_TYPES; i++) {
diff --git a/mesalib/src/mesa/main/uniforms.h b/mesalib/src/mesa/main/uniforms.h
index a12ad9b36..5ebd5e49a 100644
--- a/mesalib/src/mesa/main/uniforms.h
+++ b/mesalib/src/mesa/main/uniforms.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c
index 213b845c9..db0945e30 100644
--- a/mesalib/src/mesa/main/varray.c
+++ b/mesalib/src/mesa/main/varray.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -33,7 +34,6 @@
#include "hash.h"
#include "image.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "varray.h"
#include "arrayobj.h"
@@ -269,7 +269,6 @@ update_array(struct gl_context *ctx,
ctx->Array.ArrayBufferObj);
ctx->NewState |= _NEW_ARRAY;
- ctx->Array.ArrayObj->NewArrays |= VERT_BIT(attrib);
}
@@ -521,7 +520,6 @@ _mesa_EnableVertexAttribArray(GLuint index)
FLUSH_VERTICES(ctx, _NEW_ARRAY);
arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_TRUE;
arrayObj->_Enabled |= VERT_BIT_GENERIC(index);
- arrayObj->NewArrays |= VERT_BIT_GENERIC(index);
}
}
@@ -547,7 +545,6 @@ _mesa_DisableVertexAttribArray(GLuint index)
FLUSH_VERTICES(ctx, _NEW_ARRAY);
arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_FALSE;
arrayObj->_Enabled &= ~VERT_BIT_GENERIC(index);
- arrayObj->NewArrays |= VERT_BIT_GENERIC(index);
}
}
@@ -1112,10 +1109,9 @@ _mesa_PrimitiveRestartIndex(GLuint index)
return;
}
- ctx->Array.RestartIndex = index;
- if (ctx->Array.PrimitiveRestart && ctx->Array._RestartIndex != index) {
+ if (ctx->Array.RestartIndex != index) {
FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
- ctx->Array._RestartIndex = index;
+ ctx->Array.RestartIndex = index;
}
}
@@ -1148,11 +1144,34 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor)
if (array->InstanceDivisor != divisor) {
FLUSH_VERTICES(ctx, _NEW_ARRAY);
array->InstanceDivisor = divisor;
- ctx->Array.ArrayObj->NewArrays |= VERT_BIT(VERT_ATTRIB_GENERIC(index));
}
}
+unsigned
+_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type)
+{
+ /* From the OpenGL 4.3 core specification, page 302:
+ * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are
+ * enabled, the index value determined by PRIMITIVE_RESTART_FIXED_INDEX
+ * is used."
+ */
+ if (ctx->Array.PrimitiveRestartFixedIndex) {
+ switch (ib_type) {
+ case GL_UNSIGNED_BYTE:
+ return 0xff;
+ case GL_UNSIGNED_SHORT:
+ return 0xffff;
+ case GL_UNSIGNED_INT:
+ return 0xffffffff;
+ default:
+ assert(!"_mesa_primitive_restart_index: Invalid index buffer type.");
+ }
+ }
+
+ return ctx->Array.RestartIndex;
+}
+
/**
* Copy one client vertex array to another.
diff --git a/mesalib/src/mesa/main/varray.h b/mesalib/src/mesa/main/varray.h
index 904fa1bea..a178bc13c 100644
--- a/mesalib/src/mesa/main/varray.h
+++ b/mesalib/src/mesa/main/varray.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -29,7 +30,6 @@
#include "glheader.h"
-#include "mfeatures.h"
struct gl_client_array;
struct gl_context;
@@ -248,6 +248,8 @@ _mesa_PrimitiveRestartIndex(GLuint index);
extern void GLAPIENTRY
_mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
+extern unsigned
+_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type);
extern void
_mesa_copy_client_array(struct gl_context *ctx,
diff --git a/mesalib/src/mesa/main/version.c b/mesalib/src/mesa/main/version.c
index ecca446c1..cdd5ed316 100644
--- a/mesalib/src/mesa/main/version.c
+++ b/mesalib/src/mesa/main/version.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
@@ -259,7 +260,7 @@ compute_version(struct gl_context *ctx)
ctx->Extensions.EXT_texture_snorm &&
ctx->Extensions.NV_primitive_restart &&
ctx->Extensions.NV_texture_rectangle &&
- ctx->Const.MaxVertexTextureImageUnits >= 16);
+ ctx->Const.VertexProgram.MaxTextureImageUnits >= 16);
const GLboolean ver_3_2 = (ver_3_1 &&
ctx->Const.GLSLVersion >= 150 &&
ctx->Extensions.ARB_depth_clamp &&
diff --git a/mesalib/src/mesa/main/version.h b/mesalib/src/mesa/main/version.h
index b4f8d8590..19d321d9a 100644
--- a/mesalib/src/mesa/main/version.h
+++ b/mesalib/src/mesa/main/version.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/viewport.c b/mesalib/src/mesa/main/viewport.c
index 92f04cdf1..c4d7f1e07 100644
--- a/mesalib/src/mesa/main/viewport.c
+++ b/mesalib/src/mesa/main/viewport.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/viewport.h b/mesalib/src/mesa/main/viewport.h
index db4507bea..77d8cbbfd 100644
--- a/mesalib/src/mesa/main/viewport.h
+++ b/mesalib/src/mesa/main/viewport.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/main/vtxfmt.c b/mesalib/src/mesa/main/vtxfmt.c
index 8669c4007..8864b8cf5 100644
--- a/mesalib/src/mesa/main/vtxfmt.c
+++ b/mesalib/src/mesa/main/vtxfmt.c
@@ -17,20 +17,19 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Gareth Hughes
+ * Keith Whitwell <keith@tungstengraphics.com> Gareth Hughes
*/
#include "glheader.h"
#include "api_arrayelt.h"
#include "context.h"
#include "imports.h"
-#include "mfeatures.h"
#include "mtypes.h"
#include "vtxfmt.h"
#include "eval.h"
@@ -40,12 +39,12 @@
/**
- * Use the per-vertex functions found in <vfmt> to initialize the given
- * API dispatch table.
+ * Copy the functions found in the GLvertexformat object into the
+ * dispatch table.
*/
static void
install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,
- const GLvertexformat *vfmt, bool beginend)
+ const GLvertexformat *vfmt)
{
assert(ctx->Version > 0);
@@ -62,7 +61,7 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,
}
if (ctx->API == API_OPENGL_COMPAT) {
- _mesa_install_eval_vtxfmt(tab, vfmt, beginend);
+ _mesa_install_eval_vtxfmt(tab, vfmt);
}
if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
@@ -111,40 +110,6 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,
SET_Begin(tab, vfmt->Begin);
SET_End(tab, vfmt->End);
SET_PrimitiveRestartNV(tab, vfmt->PrimitiveRestartNV);
-
- SET_Rectf(tab, vfmt->Rectf);
- }
-
- SET_DrawArrays(tab, vfmt->DrawArrays);
- SET_DrawElements(tab, vfmt->DrawElements);
- if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
- SET_DrawRangeElements(tab, vfmt->DrawRangeElements);
- }
-
- SET_MultiDrawElementsEXT(tab, vfmt->MultiDrawElementsEXT);
-
- if (_mesa_is_desktop_gl(ctx)) {
- SET_DrawElementsBaseVertex(tab, vfmt->DrawElementsBaseVertex);
- SET_DrawRangeElementsBaseVertex(tab, vfmt->DrawRangeElementsBaseVertex);
- SET_MultiDrawElementsBaseVertex(tab, vfmt->MultiDrawElementsBaseVertex);
- SET_DrawArraysInstancedBaseInstance(tab, vfmt->DrawArraysInstancedBaseInstance);
- SET_DrawElementsInstancedBaseInstance(tab, vfmt->DrawElementsInstancedBaseInstance);
- SET_DrawElementsInstancedBaseVertex(tab, vfmt->DrawElementsInstancedBaseVertex);
- SET_DrawElementsInstancedBaseVertexBaseInstance(tab, vfmt->DrawElementsInstancedBaseVertexBaseInstance);
- }
-
- if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
- SET_DrawArraysInstancedARB(tab, vfmt->DrawArraysInstanced);
- SET_DrawElementsInstancedARB(tab, vfmt->DrawElementsInstanced);
- }
-
- if (_mesa_is_desktop_gl(ctx)) {
- SET_DrawTransformFeedback(tab, vfmt->DrawTransformFeedback);
- SET_DrawTransformFeedbackStream(tab, vfmt->DrawTransformFeedbackStream);
- SET_DrawTransformFeedbackInstanced(tab,
- vfmt->DrawTransformFeedbackInstanced);
- SET_DrawTransformFeedbackStreamInstanced(tab,
- vfmt->DrawTransformFeedbackStreamInstanced);
}
/* Originally for GL_NV_vertex_program, this is also used by dlist.c */
@@ -251,9 +216,9 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,
void
_mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
{
- install_vtxfmt(ctx, ctx->Exec, vfmt, false);
+ install_vtxfmt(ctx, ctx->Exec, vfmt);
if (ctx->BeginEnd)
- install_vtxfmt(ctx, ctx->BeginEnd, vfmt, true);
+ install_vtxfmt(ctx, ctx->BeginEnd, vfmt);
}
@@ -265,7 +230,7 @@ void
_mesa_install_save_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
{
if (_mesa_is_desktop_gl(ctx))
- install_vtxfmt(ctx, ctx->Save, vfmt, false);
+ install_vtxfmt(ctx, ctx->Save, vfmt);
}
diff --git a/mesalib/src/mesa/main/vtxfmt.h b/mesalib/src/mesa/main/vtxfmt.h
index 16ffb6ffd..4301c4277 100644
--- a/mesalib/src/mesa/main/vtxfmt.h
+++ b/mesalib/src/mesa/main/vtxfmt.h
@@ -24,9 +24,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -34,7 +35,6 @@
#define _VTXFMT_H_
#include "compiler.h"
-#include "mfeatures.h"
#include "mtypes.h"
extern void _mesa_install_exec_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt );
diff --git a/mesalib/src/mesa/math/m_clip_tmp.h b/mesalib/src/mesa/math/m_clip_tmp.h
index 2e3096405..c6b8bd83d 100644
--- a/mesalib/src/mesa/math/m_clip_tmp.h
+++ b/mesalib/src/mesa/math/m_clip_tmp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_copy_tmp.h b/mesalib/src/mesa/math/m_copy_tmp.h
index 07ab1f7b2..98fbd0730 100644
--- a/mesalib/src/mesa/math/m_copy_tmp.h
+++ b/mesalib/src/mesa/math/m_copy_tmp.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_debug.h b/mesalib/src/mesa/math/m_debug.h
index 6476b6de2..a1e8cee9d 100644
--- a/mesalib/src/mesa/math/m_debug.h
+++ b/mesalib/src/mesa/math/m_debug.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/math/m_debug_clip.c b/mesalib/src/mesa/math/m_debug_clip.c
index bbad6ef02..08b9eff06 100644
--- a/mesalib/src/mesa/math/m_debug_clip.c
+++ b/mesalib/src/mesa/math/m_debug_clip.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/math/m_debug_norm.c b/mesalib/src/mesa/math/m_debug_norm.c
index 00efa336d..588cd90a3 100644
--- a/mesalib/src/mesa/math/m_debug_norm.c
+++ b/mesalib/src/mesa/math/m_debug_norm.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/math/m_debug_util.h b/mesalib/src/mesa/math/m_debug_util.h
index ed11c849e..f356588ae 100644
--- a/mesalib/src/mesa/math/m_debug_util.h
+++ b/mesalib/src/mesa/math/m_debug_util.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/math/m_debug_xform.c b/mesalib/src/mesa/math/m_debug_xform.c
index 2cceaa2f8..cea382da6 100644
--- a/mesalib/src/mesa/math/m_debug_xform.c
+++ b/mesalib/src/mesa/math/m_debug_xform.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_dotprod_tmp.h b/mesalib/src/mesa/math/m_dotprod_tmp.h
index 03e65af6c..6f530cfc4 100644
--- a/mesalib/src/mesa/math/m_dotprod_tmp.h
+++ b/mesalib/src/mesa/math/m_dotprod_tmp.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_eval.c b/mesalib/src/mesa/math/m_eval.c
index d324673c5..7e8a81d13 100644
--- a/mesalib/src/mesa/math/m_eval.c
+++ b/mesalib/src/mesa/math/m_eval.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_eval.h b/mesalib/src/mesa/math/m_eval.h
index d73ecaafb..cc1d1894c 100644
--- a/mesalib/src/mesa/math/m_eval.h
+++ b/mesalib/src/mesa/math/m_eval.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef _M_EVAL_H
diff --git a/mesalib/src/mesa/math/m_matrix.c b/mesalib/src/mesa/math/m_matrix.c
index bcd2cae4a..4f64bd226 100644
--- a/mesalib/src/mesa/math/m_matrix.c
+++ b/mesalib/src/mesa/math/m_matrix.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_matrix.h b/mesalib/src/mesa/math/m_matrix.h
index 9f4ea2586..fabe15a94 100644
--- a/mesalib/src/mesa/math/m_matrix.h
+++ b/mesalib/src/mesa/math/m_matrix.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_norm_tmp.h b/mesalib/src/mesa/math/m_norm_tmp.h
index a20cb0501..24839e2b5 100644
--- a/mesalib/src/mesa/math/m_norm_tmp.h
+++ b/mesalib/src/mesa/math/m_norm_tmp.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_trans_tmp.h b/mesalib/src/mesa/math/m_trans_tmp.h
index 76ed83209..867384b78 100644
--- a/mesalib/src/mesa/math/m_trans_tmp.h
+++ b/mesalib/src/mesa/math/m_trans_tmp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/math/m_translate.c b/mesalib/src/mesa/math/m_translate.c
index 1da4de372..40c817463 100644
--- a/mesalib/src/mesa/math/m_translate.c
+++ b/mesalib/src/mesa/math/m_translate.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/math/m_translate.h b/mesalib/src/mesa/math/m_translate.h
index 8fec6f14b..eeb947f29 100644
--- a/mesalib/src/mesa/math/m_translate.h
+++ b/mesalib/src/mesa/math/m_translate.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_vector.c b/mesalib/src/mesa/math/m_vector.c
index 4bded31e0..0d38117e9 100644
--- a/mesalib/src/mesa/math/m_vector.c
+++ b/mesalib/src/mesa/math/m_vector.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_vector.h b/mesalib/src/mesa/math/m_vector.h
index 71281d575..143a30282 100644
--- a/mesalib/src/mesa/math/m_vector.h
+++ b/mesalib/src/mesa/math/m_vector.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/math/m_xform.c b/mesalib/src/mesa/math/m_xform.c
index 61ad3c753..f8c0993d4 100644
--- a/mesalib/src/mesa/math/m_xform.c
+++ b/mesalib/src/mesa/math/m_xform.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_xform.h b/mesalib/src/mesa/math/m_xform.h
index 280248883..7cec7f0ad 100644
--- a/mesalib/src/mesa/math/m_xform.h
+++ b/mesalib/src/mesa/math/m_xform.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/math/m_xform_tmp.h b/mesalib/src/mesa/math/m_xform_tmp.h
index e93837725..1f984887d 100644
--- a/mesalib/src/mesa/math/m_xform_tmp.h
+++ b/mesalib/src/mesa/math/m_xform_tmp.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/program/Android.mk b/mesalib/src/mesa/program/Android.mk
index 51362e0eb..3f974ea27 100644
--- a/mesalib/src/mesa/program/Android.mk
+++ b/mesalib/src/mesa/program/Android.mk
@@ -38,7 +38,7 @@ endef
# Import the following variables:
# PROGRAM_FILES
-include $(MESA_TOP)/src/mesa/sources.mak
+include $(MESA_TOP)/src/mesa/Makefile.sources
include $(CLEAR_VARS)
@@ -49,7 +49,7 @@ intermediates := $(call local-intermediates-dir)
MESA_ENABLED_APIS := ES1 ES2
-# TODO(chadv): In sources.mak, move these vars to a different list so we can
+# TODO(chadv): In Makefile.sources, move these vars to a different list so we can
# remove this kludge.
generated_sources_basenames := \
lex.yy.c \
diff --git a/mesalib/src/mesa/program/Makefile.am b/mesalib/src/mesa/program/Makefile.am
index 1b8204658..ab565e251 100644
--- a/mesalib/src/mesa/program/Makefile.am
+++ b/mesalib/src/mesa/program/Makefile.am
@@ -19,9 +19,9 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-include ../sources.mak
+include ../Makefile.sources
-AM_CPPFLAGS = $(API_DEFINES) $(DEFINES) $(INCLUDE_DIRS)
+AM_CPPFLAGS = $(DEFINES) $(INCLUDE_DIRS)
AM_CFLAGS = $(VISIBILITY_CFLAGS)
AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
libdricore_program_la_CFLAGS = $(NOVISIBILITY_CFLAGS)
diff --git a/mesalib/src/mesa/program/arbprogparse.c b/mesalib/src/mesa/program/arbprogparse.c
index 527bb936e..0ec87e356 100644
--- a/mesalib/src/mesa/program/arbprogparse.c
+++ b/mesalib/src/mesa/program/arbprogparse.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#define DEBUG_PARSING 0
diff --git a/mesalib/src/mesa/program/arbprogparse.h b/mesalib/src/mesa/program/arbprogparse.h
index 4c0c30072..04d304bc0 100644
--- a/mesalib/src/mesa/program/arbprogparse.h
+++ b/mesalib/src/mesa/program/arbprogparse.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/program/ir_to_mesa.cpp b/mesalib/src/mesa/program/ir_to_mesa.cpp
index 14cf5baa7..a5b6699c2 100644
--- a/mesalib/src/mesa/program/ir_to_mesa.cpp
+++ b/mesalib/src/mesa/program/ir_to_mesa.cpp
@@ -1444,6 +1444,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
case ir_unop_unpack_half_2x16_split_x:
case ir_unop_unpack_half_2x16_split_y:
case ir_binop_pack_half_2x16_split:
+ case ir_unop_bitfield_reverse:
+ case ir_unop_bit_count:
+ case ir_unop_find_msb:
+ case ir_unop_find_lsb:
assert(!"not supported");
break;
case ir_binop_min:
@@ -1485,6 +1489,15 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
emit(ir, OPCODE_LRP, result_dst, op[2], op[1], op[0]);
break;
+ case ir_binop_vector_extract:
+ case ir_binop_bfm:
+ case ir_triop_bfi:
+ case ir_triop_bitfield_extract:
+ case ir_triop_vector_insert:
+ case ir_quadop_bitfield_insert:
+ assert(!"not supported");
+ break;
+
case ir_quadop_vector:
/* This operation should have already been handled.
*/
@@ -2391,8 +2404,10 @@ print_program(struct prog_instruction *mesa_instructions,
class add_uniform_to_shader : public program_resource_visitor {
public:
add_uniform_to_shader(struct gl_shader_program *shader_program,
- struct gl_program_parameter_list *params)
- : shader_program(shader_program), params(params), idx(-1)
+ struct gl_program_parameter_list *params,
+ gl_shader_type shader_type)
+ : shader_program(shader_program), params(params), idx(-1),
+ shader_type(shader_type)
{
/* empty */
}
@@ -2412,6 +2427,7 @@ private:
struct gl_shader_program *shader_program;
struct gl_program_parameter_list *params;
int idx;
+ gl_shader_type shader_type;
};
void
@@ -2458,8 +2474,11 @@ add_uniform_to_shader::visit_field(const glsl_type *type, const char *name,
struct gl_uniform_storage *storage =
&this->shader_program->UniformStorage[location];
+ assert(storage->sampler[shader_type].active);
+
for (unsigned int j = 0; j < size / 4; j++)
- params->ParameterValues[index + j][0].f = storage->sampler + j;
+ params->ParameterValues[index + j][0].f =
+ storage->sampler[shader_type].index + j;
}
}
@@ -2485,7 +2504,8 @@ _mesa_generate_parameters_list_for_uniforms(struct gl_shader_program
struct gl_program_parameter_list
*params)
{
- add_uniform_to_shader add(shader_program, params);
+ add_uniform_to_shader add(shader_program, params,
+ _mesa_shader_type_to_index(sh->Type));
foreach_list(node, sh->ir) {
ir_variable *var = ((ir_instruction *) node)->as_variable();
@@ -2757,6 +2777,8 @@ ir_to_mesa_visitor::copy_propagate(void)
/* If this is a copy, add it to the ACP. */
if (inst->op == OPCODE_MOV &&
inst->dst.file == PROGRAM_TEMPORARY &&
+ !(inst->dst.file == inst->src[0].file &&
+ inst->dst.index == inst->src[0].index) &&
!inst->dst.reladdr &&
!inst->saturate &&
!inst->src[0].reladdr &&
@@ -3012,7 +3034,8 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress;
progress = do_common_optimization(ir, true, true,
- options->MaxUnrollIterations)
+ options->MaxUnrollIterations,
+ options)
|| progress;
progress = lower_quadop_vector(ir, true) || progress;
@@ -3039,6 +3062,7 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|| progress;
progress = do_vec_index_to_cond_assign(ir) || progress;
+ progress = lower_vector_insert(ir, true) || progress;
} while (progress);
validate_ir_tree(ir);
@@ -3118,11 +3142,13 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader)
if (!state->error && !shader->ir->is_empty()) {
validate_ir_tree(shader->ir);
+ struct gl_shader_compiler_options *options =
+ &ctx->ShaderCompilerOptions[_mesa_shader_type_to_index(shader->Type)];
/* Do some optimization at compile time to reduce shader IR size
* and reduce later work if the same shader is linked multiple times
*/
- while (do_common_optimization(shader->ir, false, false, 32))
+ while (do_common_optimization(shader->ir, false, false, 32, options))
;
validate_ir_tree(shader->ir);
diff --git a/mesalib/src/mesa/program/prog_execute.c b/mesalib/src/mesa/program/prog_execute.c
index d205cdbbe..548077d39 100644
--- a/mesalib/src/mesa/program/prog_execute.c
+++ b/mesalib/src/mesa/program/prog_execute.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -240,37 +241,6 @@ fetch_vector4(const struct prog_src_register *source,
/**
- * Fetch a 4-element uint vector from the given source register.
- * Apply swizzling but not negation/abs.
- */
-static void
-fetch_vector4ui(const struct prog_src_register *source,
- const struct gl_program_machine *machine, GLuint result[4])
-{
- const GLuint *src = (GLuint *) get_src_register_pointer(source, machine);
- ASSERT(src);
-
- if (source->Swizzle == SWIZZLE_NOOP) {
- /* no swizzling */
- COPY_4V(result, src);
- }
- else {
- ASSERT(GET_SWZ(source->Swizzle, 0) <= 3);
- ASSERT(GET_SWZ(source->Swizzle, 1) <= 3);
- ASSERT(GET_SWZ(source->Swizzle, 2) <= 3);
- ASSERT(GET_SWZ(source->Swizzle, 3) <= 3);
- result[0] = src[GET_SWZ(source->Swizzle, 0)];
- result[1] = src[GET_SWZ(source->Swizzle, 1)];
- result[2] = src[GET_SWZ(source->Swizzle, 2)];
- result[3] = src[GET_SWZ(source->Swizzle, 3)];
- }
-
- /* Note: no Negate or Abs here */
-}
-
-
-
-/**
* Fetch the derivative with respect to X or Y for the given register.
* XXX this currently only works for fragment program input attribs.
*/
@@ -666,18 +636,6 @@ _mesa_execute_program(struct gl_context * ctx,
}
}
break;
- case OPCODE_AND: /* bitwise AND */
- {
- GLuint a[4], b[4], result[4];
- fetch_vector4ui(&inst->SrcReg[0], machine, a);
- fetch_vector4ui(&inst->SrcReg[1], machine, b);
- result[0] = a[0] & b[0];
- result[1] = a[1] & b[1];
- result[2] = a[2] & b[2];
- result[3] = a[3] & b[3];
- store_vector4ui(inst, machine, result);
- }
- break;
case OPCODE_ARL:
{
GLfloat t[4];
@@ -790,20 +748,6 @@ _mesa_execute_program(struct gl_context * ctx,
}
}
break;
- case OPCODE_DP2A:
- {
- GLfloat a[4], b[4], c, result[4];
- fetch_vector4(&inst->SrcReg[0], machine, a);
- fetch_vector4(&inst->SrcReg[1], machine, b);
- fetch_vector1(&inst->SrcReg[1], machine, &c);
- result[0] = result[1] = result[2] = result[3] = DOT2(a, b) + c;
- store_vector4(inst, machine, result);
- if (DEBUG_PROG) {
- printf("DP2A %g = (%g %g) . (%g %g) + %g\n",
- result[0], a[0], a[1], b[0], b[1], c);
- }
- }
- break;
case OPCODE_DP3:
{
GLfloat a[4], b[4], result[4];
@@ -1193,59 +1137,6 @@ _mesa_execute_program(struct gl_context * ctx,
break;
case OPCODE_NOP:
break;
- case OPCODE_NOT: /* bitwise NOT */
- {
- GLuint a[4], result[4];
- fetch_vector4ui(&inst->SrcReg[0], machine, a);
- result[0] = ~a[0];
- result[1] = ~a[1];
- result[2] = ~a[2];
- result[3] = ~a[3];
- store_vector4ui(inst, machine, result);
- }
- break;
- case OPCODE_NRM3: /* 3-component normalization */
- {
- GLfloat a[4], result[4];
- GLfloat tmp;
- fetch_vector4(&inst->SrcReg[0], machine, a);
- tmp = a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
- if (tmp != 0.0F)
- tmp = INV_SQRTF(tmp);
- result[0] = tmp * a[0];
- result[1] = tmp * a[1];
- result[2] = tmp * a[2];
- result[3] = 0.0; /* undefined, but prevent valgrind warnings */
- store_vector4(inst, machine, result);
- }
- break;
- case OPCODE_NRM4: /* 4-component normalization */
- {
- GLfloat a[4], result[4];
- GLfloat tmp;
- fetch_vector4(&inst->SrcReg[0], machine, a);
- tmp = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3];
- if (tmp != 0.0F)
- tmp = INV_SQRTF(tmp);
- result[0] = tmp * a[0];
- result[1] = tmp * a[1];
- result[2] = tmp * a[2];
- result[3] = tmp * a[3];
- store_vector4(inst, machine, result);
- }
- break;
- case OPCODE_OR: /* bitwise OR */
- {
- GLuint a[4], b[4], result[4];
- fetch_vector4ui(&inst->SrcReg[0], machine, a);
- fetch_vector4ui(&inst->SrcReg[1], machine, b);
- result[0] = a[0] | b[0];
- result[1] = a[1] | b[1];
- result[2] = a[2] | b[2];
- result[3] = a[3] | b[3];
- store_vector4ui(inst, machine, result);
- }
- break;
case OPCODE_PK2H: /* pack two 16-bit floats in one 32-bit float */
{
GLfloat a[4];
@@ -1747,18 +1638,6 @@ _mesa_execute_program(struct gl_context * ctx,
store_vector4(inst, machine, result);
}
break;
- case OPCODE_XOR: /* bitwise XOR */
- {
- GLuint a[4], b[4], result[4];
- fetch_vector4ui(&inst->SrcReg[0], machine, a);
- fetch_vector4ui(&inst->SrcReg[1], machine, b);
- result[0] = a[0] ^ b[0];
- result[1] = a[1] ^ b[1];
- result[2] = a[2] ^ b[2];
- result[3] = a[3] ^ b[3];
- store_vector4ui(inst, machine, result);
- }
- break;
case OPCODE_XPD: /* cross product */
{
GLfloat a[4], b[4], result[4];
@@ -1789,19 +1668,6 @@ _mesa_execute_program(struct gl_context * ctx,
store_vector4(inst, machine, result);
}
break;
- case OPCODE_PRINT:
- {
- if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {
- GLfloat a[4];
- fetch_vector4(&inst->SrcReg[0], machine, a);
- printf("%s%g, %g, %g, %g\n", (const char *) inst->Data,
- a[0], a[1], a[2], a[3]);
- }
- else {
- printf("%s\n", (const char *) inst->Data);
- }
- }
- break;
case OPCODE_END:
return GL_TRUE;
default:
diff --git a/mesalib/src/mesa/program/prog_execute.h b/mesalib/src/mesa/program/prog_execute.h
index 1ae302c32..346b7b6b3 100644
--- a/mesalib/src/mesa/program/prog_execute.h
+++ b/mesalib/src/mesa/program/prog_execute.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef PROG_EXECUTE_H
diff --git a/mesalib/src/mesa/program/prog_instruction.c b/mesalib/src/mesa/program/prog_instruction.c
index ab93932ef..4329e6544 100644
--- a/mesalib/src/mesa/program/prog_instruction.c
+++ b/mesalib/src/mesa/program/prog_instruction.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -127,7 +128,6 @@ _mesa_free_instructions(struct prog_instruction *inst, GLuint count)
{
GLuint i;
for (i = 0; i < count; i++) {
- free(inst[i].Data);
free((char *)inst[i].Comment);
}
free(inst);
@@ -153,7 +153,6 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_NOP, "NOP", 0, 0 },
{ OPCODE_ABS, "ABS", 1, 1 },
{ OPCODE_ADD, "ADD", 2, 1 },
- { OPCODE_AND, "AND", 2, 1 },
{ OPCODE_ARL, "ARL", 1, 1 },
{ OPCODE_BGNLOOP,"BGNLOOP", 0, 0 },
{ OPCODE_BGNSUB, "BGNSUB", 0, 0 },
@@ -165,7 +164,6 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_DDX, "DDX", 1, 1 },
{ OPCODE_DDY, "DDY", 1, 1 },
{ OPCODE_DP2, "DP2", 2, 1 },
- { OPCODE_DP2A, "DP2A", 3, 1 },
{ OPCODE_DP3, "DP3", 2, 1 },
{ OPCODE_DP4, "DP4", 2, 1 },
{ OPCODE_DPH, "DPH", 2, 1 },
@@ -195,16 +193,11 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_NOISE2, "NOISE2", 1, 1 },
{ OPCODE_NOISE3, "NOISE3", 1, 1 },
{ OPCODE_NOISE4, "NOISE4", 1, 1 },
- { OPCODE_NOT, "NOT", 1, 1 },
- { OPCODE_NRM3, "NRM3", 1, 1 },
- { OPCODE_NRM4, "NRM4", 1, 1 },
- { OPCODE_OR, "OR", 2, 1 },
{ OPCODE_PK2H, "PK2H", 1, 1 },
{ OPCODE_PK2US, "PK2US", 1, 1 },
{ OPCODE_PK4B, "PK4B", 1, 1 },
{ OPCODE_PK4UB, "PK4UB", 1, 1 },
{ OPCODE_POW, "POW", 2, 1 },
- { OPCODE_PRINT, "PRINT", 1, 0 },
{ OPCODE_RCP, "RCP", 1, 1 },
{ OPCODE_RET, "RET", 0, 0 },
{ OPCODE_RFL, "RFL", 1, 1 },
@@ -234,7 +227,6 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_UP4B, "UP4B", 1, 1 },
{ OPCODE_UP4UB, "UP4UB", 1, 1 },
{ OPCODE_X2D, "X2D", 3, 1 },
- { OPCODE_XOR, "XOR", 2, 1 },
{ OPCODE_XPD, "XPD", 2, 1 }
};
diff --git a/mesalib/src/mesa/program/prog_instruction.h b/mesalib/src/mesa/program/prog_instruction.h
index a7bba75f1..160b1d079 100644
--- a/mesalib/src/mesa/program/prog_instruction.h
+++ b/mesalib/src/mesa/program/prog_instruction.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -147,7 +148,6 @@ typedef enum prog_opcode {
OPCODE_NOP = 0, /* X */
OPCODE_ABS, /* X X 1.1 X */
OPCODE_ADD, /* X X X X X */
- OPCODE_AND, /* */
OPCODE_ARL, /* X X X */
OPCODE_BGNLOOP, /* opt */
OPCODE_BGNSUB, /* opt */
@@ -159,7 +159,6 @@ typedef enum prog_opcode {
OPCODE_DDX, /* X X */
OPCODE_DDY, /* X X */
OPCODE_DP2, /* 2 X */
- OPCODE_DP2A, /* 2 */
OPCODE_DP3, /* X X X X X */
OPCODE_DP4, /* X X X X X */
OPCODE_DPH, /* X X 1.1 */
@@ -189,16 +188,11 @@ typedef enum prog_opcode {
OPCODE_NOISE2, /* X */
OPCODE_NOISE3, /* X */
OPCODE_NOISE4, /* X */
- OPCODE_NOT, /* */
- OPCODE_NRM3, /* */
- OPCODE_NRM4, /* */
- OPCODE_OR, /* */
OPCODE_PK2H, /* X */
OPCODE_PK2US, /* X */
OPCODE_PK4B, /* X */
OPCODE_PK4UB, /* X */
OPCODE_POW, /* X X X X */
- OPCODE_PRINT, /* X X */
OPCODE_RCP, /* X X X X X */
OPCODE_RET, /* 2 2 opt */
OPCODE_RFL, /* X */
@@ -228,7 +222,6 @@ typedef enum prog_opcode {
OPCODE_UP4B, /* X */
OPCODE_UP4UB, /* X */
OPCODE_X2D, /* X */
- OPCODE_XOR, /* */
OPCODE_XPD, /* X X */
MAX_OPCODE
} gl_inst_opcode;
@@ -389,9 +382,6 @@ struct prog_instruction
/** for debugging purposes */
const char *Comment;
- /** Arbitrary data. Used for OPCODE_PRINT and some drivers */
- void *Data;
-
/** for driver use (try to remove someday) */
GLint Aux;
};
diff --git a/mesalib/src/mesa/program/prog_noise.c b/mesalib/src/mesa/program/prog_noise.c
index 75cd8c659..63590c60c 100644
--- a/mesalib/src/mesa/program/prog_noise.c
+++ b/mesalib/src/mesa/program/prog_noise.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/program/prog_noise.h b/mesalib/src/mesa/program/prog_noise.h
index dd7986efc..9828343a6 100644
--- a/mesalib/src/mesa/program/prog_noise.h
+++ b/mesalib/src/mesa/program/prog_noise.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef PROG_NOISE
diff --git a/mesalib/src/mesa/program/prog_opt_constant_fold.c b/mesalib/src/mesa/program/prog_opt_constant_fold.c
index e2418b554..3811c0d8a 100644
--- a/mesalib/src/mesa/program/prog_opt_constant_fold.c
+++ b/mesalib/src/mesa/program/prog_opt_constant_fold.c
@@ -204,10 +204,6 @@ _mesa_constant_fold(struct gl_program *prog)
get_value(prog, &inst->SrcReg[0], a);
get_value(prog, &inst->SrcReg[1], b);
- /* It seems like a loop could be used here, but we cleverly put
- * DP2A between DP2 and DP3. Subtracting DP2 (or similar) from
- * the opcode results in various failures of the loop control.
- */
result = (a[0] * b[0]) + (a[1] * b[1]);
if (inst->Opcode >= OPCODE_DP3)
diff --git a/mesalib/src/mesa/program/prog_parameter.c b/mesalib/src/mesa/program/prog_parameter.c
index 8713d57b5..0b134f7da 100644
--- a/mesalib/src/mesa/program/prog_parameter.c
+++ b/mesalib/src/mesa/program/prog_parameter.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/program/prog_parameter.h b/mesalib/src/mesa/program/prog_parameter.h
index 7b6b4b80e..bb2aa973b 100644
--- a/mesalib/src/mesa/program/prog_parameter.h
+++ b/mesalib/src/mesa/program/prog_parameter.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/program/prog_print.c b/mesalib/src/mesa/program/prog_print.c
index c73f10df5..c8351e3b5 100644
--- a/mesalib/src/mesa/program/prog_print.c
+++ b/mesalib/src/mesa/program/prog_print.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -663,20 +664,6 @@ _mesa_fprint_instruction_opt(FILE *f,
}
switch (inst->Opcode) {
- case OPCODE_PRINT:
- fprintf(f, "PRINT '%s'", (char *) inst->Data);
- if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {
- fprintf(f, ", ");
- fprintf(f, "%s[%d]%s",
- _mesa_register_file_name((gl_register_file) inst->SrcReg[0].File),
- inst->SrcReg[0].Index,
- _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
- inst->SrcReg[0].Negate, GL_FALSE));
- }
- if (inst->Comment)
- fprintf(f, " # %s", inst->Comment);
- fprint_comment(f, inst);
- break;
case OPCODE_SWZ:
fprintf(f, "SWZ");
if (inst->SaturateMode == SATURATE_ZERO_ONE)
diff --git a/mesalib/src/mesa/program/prog_print.h b/mesalib/src/mesa/program/prog_print.h
index 3e400eb46..82195cbbc 100644
--- a/mesalib/src/mesa/program/prog_print.h
+++ b/mesalib/src/mesa/program/prog_print.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/program/prog_statevars.c b/mesalib/src/mesa/program/prog_statevars.c
index 09d2a568a..19a948237 100644
--- a/mesalib/src/mesa/program/prog_statevars.c
+++ b/mesalib/src/mesa/program/prog_statevars.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/program/prog_statevars.h b/mesalib/src/mesa/program/prog_statevars.h
index af2c89792..e26ded9e0 100644
--- a/mesalib/src/mesa/program/prog_statevars.h
+++ b/mesalib/src/mesa/program/prog_statevars.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef PROG_STATEVARS_H
diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c
index 2ef969ff7..37bb7b7eb 100644
--- a/mesalib/src/mesa/program/program.c
+++ b/mesalib/src/mesa/program/program.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -32,7 +33,6 @@
#include "main/glheader.h"
#include "main/context.h"
#include "main/hash.h"
-#include "main/mfeatures.h"
#include "program.h"
#include "prog_cache.h"
#include "prog_parameter.h"
diff --git a/mesalib/src/mesa/program/program.h b/mesalib/src/mesa/program/program.h
index c5650c519..8f88b3913 100644
--- a/mesalib/src/mesa/program/program.h
+++ b/mesalib/src/mesa/program/program.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/program/program_parse.y b/mesalib/src/mesa/program/program_parse.y
index 81d85f9fb..cbf3fe6ca 100644
--- a/mesalib/src/mesa/program/program_parse.y
+++ b/mesalib/src/mesa/program/program_parse.y
@@ -709,6 +709,7 @@ extSwizSel: INTEGER
}
$$.swz = ($1 == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
+ $$.negate = 0;
/* 0 and 1 are valid for both RGBA swizzle names and XYZW
* swizzle names.
@@ -728,6 +729,10 @@ extSwizSel: INTEGER
s = $1[0];
free($1);
+ $$.rgba_valid = 0;
+ $$.xyzw_valid = 0;
+ $$.negate = 0;
+
switch (s) {
case 'x':
$$.swz = SWIZZLE_X;
@@ -2709,7 +2714,7 @@ _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *st
? & ctx->Const.VertexProgram
: & ctx->Const.FragmentProgram;
- state->MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
+ state->MaxTextureImageUnits = ctx->Const.FragmentProgram.MaxTextureImageUnits;
state->MaxTextureCoordUnits = ctx->Const.MaxTextureCoordUnits;
state->MaxTextureUnits = ctx->Const.MaxTextureUnits;
state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
diff --git a/mesalib/src/mesa/program/program_parse_extra.c b/mesalib/src/mesa/program/program_parse_extra.c
index 4d928483e..e8e1912eb 100644
--- a/mesalib/src/mesa/program/program_parse_extra.c
+++ b/mesalib/src/mesa/program/program_parse_extra.c
@@ -194,15 +194,21 @@ _mesa_ARBfp_parse_option(struct asm_parser_state *state, const char *option)
} else if (strncmp(option, "precision_hint_", 15) == 0) {
option += 15;
- if (state->option.PrecisionHint == OPTION_NONE) {
- if (strcmp(option, "nicest") == 0) {
- state->option.PrecisionHint = OPTION_NICEST;
- return 1;
- } else if (strcmp(option, "fastest") == 0) {
- state->option.PrecisionHint = OPTION_FASTEST;
- return 1;
- }
- }
+ /* The ARB_fragment_program spec, 3.11.4.5.2 says:
+ *
+ * "Only one precision control option may be specified by any given
+ * fragment program. A fragment program that specifies both the
+ * "ARB_precision_hint_fastest" and "ARB_precision_hint_nicest"
+ * program options will fail to load.
+ */
+
+ if (strcmp(option, "nicest") == 0 && state->option.PrecisionHint != OPTION_FASTEST) {
+ state->option.PrecisionHint = OPTION_NICEST;
+ return 1;
+ } else if (strcmp(option, "fastest") == 0 && state->option.PrecisionHint != OPTION_NICEST) {
+ state->option.PrecisionHint = OPTION_FASTEST;
+ return 1;
+ }
return 0;
} else if (strcmp(option, "draw_buffers") == 0) {
diff --git a/mesalib/src/mesa/program/programopt.c b/mesalib/src/mesa/program/programopt.c
index d40ffd543..6a62e1f58 100644
--- a/mesalib/src/mesa/program/programopt.c
+++ b/mesalib/src/mesa/program/programopt.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -218,7 +219,7 @@ _mesa_insert_mvp_mad_code(struct gl_context *ctx, struct gl_vertex_program *vpro
void
_mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog)
{
- if (ctx->mvp_with_dp4)
+ if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4)
_mesa_insert_mvp_dp4_code( ctx, vprog );
else
_mesa_insert_mvp_mad_code( ctx, vprog );
diff --git a/mesalib/src/mesa/program/programopt.h b/mesalib/src/mesa/program/programopt.h
index b9205823c..3a274417f 100644
--- a/mesalib/src/mesa/program/programopt.h
+++ b/mesalib/src/mesa/program/programopt.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/program/register_allocate.c b/mesalib/src/mesa/program/register_allocate.c
index 2c826fc66..16739fd39 100644
--- a/mesalib/src/mesa/program/register_allocate.c
+++ b/mesalib/src/mesa/program/register_allocate.c
@@ -355,7 +355,7 @@ ra_alloc_interference_graph(struct ra_regs *regs, unsigned int count)
g->stack = rzalloc_array(g, unsigned int, count);
for (i = 0; i < count; i++) {
- int bitset_count = ALIGN(count, BITSET_WORDBITS) / BITSET_WORDBITS;
+ int bitset_count = BITSET_WORDS(count);
g->nodes[i].adjacency = rzalloc_array(g, BITSET_WORD, bitset_count);
g->nodes[i].adjacency_list_size = 4;
@@ -437,7 +437,7 @@ ra_simplify(struct ra_graph *g)
}
for (i = 0; i < g->count; i++) {
- if (!g->nodes[i].in_stack)
+ if (!g->nodes[i].in_stack && g->nodes[i].reg == -1)
return GL_FALSE;
}
@@ -586,7 +586,7 @@ int
ra_get_best_spill_node(struct ra_graph *g)
{
unsigned int best_node = -1;
- unsigned int best_benefit = 0.0;
+ float best_benefit = 0.0;
unsigned int n;
for (n = 0; n < g->count; n++) {
diff --git a/mesalib/src/mesa/program/sampler.cpp b/mesalib/src/mesa/program/sampler.cpp
index e3641aaa9..9b9412730 100644
--- a/mesalib/src/mesa/program/sampler.cpp
+++ b/mesalib/src/mesa/program/sampler.cpp
@@ -34,6 +34,7 @@ extern "C" {
#include "main/compiler.h"
#include "main/mtypes.h"
#include "program/prog_parameter.h"
+#include "program/program.h"
}
class get_sampler_name : public ir_hierarchical_visitor
@@ -102,14 +103,16 @@ public:
ir_dereference *last;
};
-extern "C" {
-int
+
+extern "C" int
_mesa_get_sampler_uniform_value(class ir_dereference *sampler,
struct gl_shader_program *shader_program,
const struct gl_program *prog)
{
get_sampler_name getname(sampler, shader_program);
+ GLuint shader = _mesa_program_target_to_index(prog->Target);
+
sampler->accept(&getname);
unsigned location;
@@ -119,6 +122,15 @@ _mesa_get_sampler_uniform_value(class ir_dereference *sampler,
return 0;
}
- return shader_program->UniformStorage[location].sampler + getname.offset;
-}
+ if (!shader_program->UniformStorage[location].sampler[shader].active) {
+ assert(0 && "cannot return a sampler");
+ linker_error(shader_program,
+ "cannot return a sampler named %s, because it is not "
+ "used in this shader stage. This is a driver bug.\n",
+ getname.name);
+ return 0;
+ }
+
+ return shader_program->UniformStorage[location].sampler[shader].index +
+ getname.offset;
}
diff --git a/mesalib/src/mesa/state_tracker/st_atom.c b/mesalib/src/mesa/state_tracker/st_atom.c
index 32bcc266a..1abaf8f3e 100644
--- a/mesalib/src/mesa/state_tracker/st_atom.c
+++ b/mesalib/src/mesa/state_tracker/st_atom.c
@@ -55,10 +55,10 @@ static const struct st_tracked_state *atoms[] =
&st_update_viewport,
&st_update_scissor,
&st_update_blend,
- &st_update_sampler,
&st_update_vertex_texture,
&st_update_fragment_texture,
&st_update_geometry_texture,
+ &st_update_sampler, /* depends on update_*_texture for swizzle */
&st_update_framebuffer,
&st_update_msaa,
&st_update_vs_constants,
@@ -160,11 +160,7 @@ void st_validate_state( struct st_context *st )
check_attrib_edgeflag(st);
- /* The bitmap cache is immune to pixel unpack changes.
- * Note that GLUT makes several calls to glPixelStore for each
- * bitmap char it draws so this is an important check.
- */
- if (state->mesa & ~_NEW_PACKUNPACK)
+ if (state->mesa)
st_flush_bitmap_cache(st);
check_program_state( st );
diff --git a/mesalib/src/mesa/state_tracker/st_atom_array.c b/mesalib/src/mesa/state_tracker/st_atom_array.c
index 2437245bd..87a0a17f1 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_array.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_array.c
@@ -589,7 +589,7 @@ static void update_array(struct st_context *st)
const struct st_tracked_state st_update_array = {
"st_update_array", /* name */
{ /* dirty */
- _NEW_BUFFER_OBJECT, /* mesa */
+ 0, /* mesa */
ST_NEW_VERTEX_ARRAYS | ST_NEW_VERTEX_PROGRAM, /* st */
},
update_array /* update */
diff --git a/mesalib/src/mesa/state_tracker/st_atom_constbuf.c b/mesalib/src/mesa/state_tracker/st_atom_constbuf.c
index 56ba96fe3..27a910b5f 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_constbuf.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_constbuf.c
@@ -194,12 +194,25 @@ static void st_bind_ubos(struct st_context *st,
binding = &st->ctx->UniformBufferBindings[shader->UniformBlocks[i].Binding];
st_obj = st_buffer_object(binding->BufferObject);
- pipe_resource_reference(&cb.buffer, st_obj->buffer);
- cb.buffer_size = st_obj->buffer->width0 - binding->Offset;
+ cb.buffer = st_obj->buffer;
+
+ if (cb.buffer) {
+ cb.buffer_offset = binding->Offset;
+ cb.buffer_size = cb.buffer->width0 - binding->Offset;
+
+ /* AutomaticSize is FALSE if the buffer was set with BindBufferRange.
+ * Take the minimum just to be sure.
+ */
+ if (!binding->AutomaticSize)
+ cb.buffer_size = MIN2(cb.buffer_size, binding->Size);
+ }
+ else {
+ cb.buffer_offset = 0;
+ cb.buffer_size = 0;
+ }
cso_set_constant_buffer(st->cso_context, shader_type, 1 + i, &cb);
- pipe_resource_reference(&cb.buffer, NULL);
}
}
@@ -216,8 +229,8 @@ static void bind_vs_ubos(struct st_context *st)
const struct st_tracked_state st_bind_vs_ubos = {
"st_bind_vs_ubos",
{
- (_NEW_PROGRAM | _NEW_BUFFER_OBJECT),
- ST_NEW_VERTEX_PROGRAM,
+ 0,
+ ST_NEW_VERTEX_PROGRAM | ST_NEW_UNIFORM_BUFFER,
},
bind_vs_ubos
};
@@ -230,14 +243,13 @@ static void bind_fs_ubos(struct st_context *st)
return;
st_bind_ubos(st, prog->_LinkedShaders[MESA_SHADER_FRAGMENT], PIPE_SHADER_FRAGMENT);
-
}
const struct st_tracked_state st_bind_fs_ubos = {
"st_bind_fs_ubos",
{
- (_NEW_PROGRAM | _NEW_BUFFER_OBJECT),
- ST_NEW_FRAGMENT_PROGRAM,
+ 0,
+ ST_NEW_FRAGMENT_PROGRAM | ST_NEW_UNIFORM_BUFFER,
},
bind_fs_ubos
};
diff --git a/mesalib/src/mesa/state_tracker/st_atom_depth.c b/mesalib/src/mesa/state_tracker/st_atom_depth.c
index c76a6d8c6..18a56a2e4 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_depth.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_depth.c
@@ -41,6 +41,9 @@
#include "pipe/p_defines.h"
#include "cso_cache/cso_context.h"
+#include "main/core.h"
+#include "main/stencil.h"
+
/**
* Convert an OpenGL compare mode to a pipe tokens.
@@ -116,7 +119,7 @@ update_depth_stencil_alpha(struct st_context *st)
dsa->stencil[0].zpass_op = gl_stencil_op_to_pipe(ctx->Stencil.ZPassFunc[0]);
dsa->stencil[0].valuemask = ctx->Stencil.ValueMask[0] & 0xff;
dsa->stencil[0].writemask = ctx->Stencil.WriteMask[0] & 0xff;
- sr.ref_value[0] = ctx->Stencil.Ref[0] & 0xff;
+ sr.ref_value[0] = _mesa_get_stencil_ref(ctx, 0);
if (ctx->Stencil._TestTwoSide) {
const GLuint back = ctx->Stencil._BackFace;
@@ -127,7 +130,7 @@ update_depth_stencil_alpha(struct st_context *st)
dsa->stencil[1].zpass_op = gl_stencil_op_to_pipe(ctx->Stencil.ZPassFunc[back]);
dsa->stencil[1].valuemask = ctx->Stencil.ValueMask[back] & 0xff;
dsa->stencil[1].writemask = ctx->Stencil.WriteMask[back] & 0xff;
- sr.ref_value[1] = ctx->Stencil.Ref[back] & 0xff;
+ sr.ref_value[1] = _mesa_get_stencil_ref(ctx, back);
}
else {
/* This should be unnecessary. Drivers must not expect this to
@@ -153,7 +156,7 @@ update_depth_stencil_alpha(struct st_context *st)
const struct st_tracked_state st_update_depth_stencil_alpha = {
"st_update_depth_stencil", /* name */
{ /* dirty */
- (_NEW_DEPTH|_NEW_STENCIL|_NEW_COLOR), /* mesa */
+ (_NEW_DEPTH|_NEW_STENCIL|_NEW_COLOR|_NEW_BUFFERS),/* mesa */
0, /* st */
},
update_depth_stencil_alpha /* update */
diff --git a/mesalib/src/mesa/state_tracker/st_atom_framebuffer.c b/mesalib/src/mesa/state_tracker/st_atom_framebuffer.c
index 3df8691f4..c752640f4 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_framebuffer.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_framebuffer.c
@@ -59,6 +59,7 @@ update_renderbuffer_surface(struct st_context *st,
enum pipe_format format = st->ctx->Color.sRGBEnabled ? resource->format : util_format_linear(resource->format);
if (!strb->surface ||
+ strb->surface->texture->nr_samples != strb->Base.NumSamples ||
strb->surface->format != format ||
strb->surface->texture != resource ||
strb->surface->width != rtt_width ||
diff --git a/mesalib/src/mesa/state_tracker/st_atom_msaa.c b/mesalib/src/mesa/state_tracker/st_atom_msaa.c
index 9baa4fcf2..fb760460c 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_msaa.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_msaa.c
@@ -62,7 +62,8 @@ static void update_sample_mask( struct st_context *st )
if (st->ctx->Multisample.SampleCoverageInvert)
sample_mask = ~sample_mask;
}
- /* TODO merge with app-supplied sample mask */
+ if (st->ctx->Multisample.SampleMask)
+ sample_mask &= st->ctx->Multisample.SampleMaskValue;
}
/* mask off unused bits or don't care? */
diff --git a/mesalib/src/mesa/state_tracker/st_atom_rasterizer.c b/mesalib/src/mesa/state_tracker/st_atom_rasterizer.c
index 62464b475..f4d0cab42 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_rasterizer.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_rasterizer.c
@@ -228,9 +228,12 @@ static void update_raster_state( struct st_context *st )
/* _NEW_FRAG_CLAMP */
raster->clamp_fragment_color = !st->clamp_frag_color_in_shader &&
ctx->Color._ClampFragmentColor;
- raster->gl_rasterization_rules = 1;
- /* _NEW_RASTERIZER_DISCARD */
+ raster->half_pixel_center = 1;
+ if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
+ raster->bottom_edge_rule = 1;
+
+ /* ST_NEW_RASTERIZER */
raster->rasterizer_discard = ctx->RasterDiscard;
/* _NEW_TRANSFORM */
@@ -252,9 +255,9 @@ const struct st_tracked_state st_update_rasterizer = {
_NEW_PROGRAM |
_NEW_SCISSOR |
_NEW_FRAG_CLAMP |
- _NEW_RASTERIZER_DISCARD |
_NEW_TRANSFORM), /* mesa state dependencies*/
- ST_NEW_VERTEX_PROGRAM, /* state tracker dependencies */
+ (ST_NEW_VERTEX_PROGRAM |
+ ST_NEW_RASTERIZER), /* state tracker dependencies */
},
update_raster_state /* update function */
};
diff --git a/mesalib/src/mesa/state_tracker/st_atom_sampler.c b/mesalib/src/mesa/state_tracker/st_atom_sampler.c
index 3eba5b13c..302e12981 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_sampler.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_sampler.c
@@ -48,6 +48,8 @@
#include "cso_cache/cso_context.h"
+#include "util/u_format.h"
+
/**
* Convert GLenum texcoord wrap tokens to pipe tokens.
@@ -172,8 +174,10 @@ convert_sampler(struct st_context *st,
msamp->BorderColor.ui[1] ||
msamp->BorderColor.ui[2] ||
msamp->BorderColor.ui[3]) {
+ struct st_texture_object *stobj = st_texture_object(texobj);
struct gl_texture_image *teximg;
GLboolean is_integer = GL_FALSE;
+ union pipe_color_union border_color;
teximg = texobj->Image[0][texobj->BaseLevel];
@@ -181,9 +185,26 @@ convert_sampler(struct st_context *st,
is_integer = _mesa_is_enum_format_integer(teximg->InternalFormat);
}
- st_translate_color(&msamp->BorderColor,
- &sampler->border_color,
- teximg ? teximg->_BaseFormat : GL_RGBA, is_integer);
+ if (st->apply_texture_swizzle_to_border_color && stobj->sampler_view) {
+ const unsigned char swz[4] =
+ {
+ stobj->sampler_view->swizzle_r,
+ stobj->sampler_view->swizzle_g,
+ stobj->sampler_view->swizzle_b,
+ stobj->sampler_view->swizzle_a,
+ };
+
+ st_translate_color(&msamp->BorderColor,
+ &border_color,
+ teximg ? teximg->_BaseFormat : GL_RGBA, is_integer);
+
+ util_format_apply_color_swizzle(&sampler->border_color,
+ &border_color, swz, is_integer);
+ } else {
+ st_translate_color(&msamp->BorderColor,
+ &sampler->border_color,
+ teximg ? teximg->_BaseFormat : GL_RGBA, is_integer);
+ }
}
sampler->max_anisotropy = (msamp->MaxAnisotropy == 1.0 ?
@@ -258,14 +279,14 @@ update_samplers(struct st_context *st)
update_shader_samplers(st,
PIPE_SHADER_FRAGMENT,
&ctx->FragmentProgram._Current->Base,
- ctx->Const.MaxTextureImageUnits,
+ ctx->Const.FragmentProgram.MaxTextureImageUnits,
st->state.samplers[PIPE_SHADER_FRAGMENT],
&st->state.num_samplers[PIPE_SHADER_FRAGMENT]);
update_shader_samplers(st,
PIPE_SHADER_VERTEX,
&ctx->VertexProgram._Current->Base,
- ctx->Const.MaxVertexTextureImageUnits,
+ ctx->Const.VertexProgram.MaxTextureImageUnits,
st->state.samplers[PIPE_SHADER_VERTEX],
&st->state.num_samplers[PIPE_SHADER_VERTEX]);
@@ -273,7 +294,7 @@ update_samplers(struct st_context *st)
update_shader_samplers(st,
PIPE_SHADER_GEOMETRY,
&ctx->GeometryProgram._Current->Base,
- ctx->Const.MaxGeometryTextureImageUnits,
+ ctx->Const.GeometryProgram.MaxTextureImageUnits,
st->state.samplers[PIPE_SHADER_GEOMETRY],
&st->state.num_samplers[PIPE_SHADER_GEOMETRY]);
}
diff --git a/mesalib/src/mesa/state_tracker/st_atom_scissor.c b/mesalib/src/mesa/state_tracker/st_atom_scissor.c
index eb1387778..19c2cd2fb 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_scissor.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_scissor.c
@@ -86,7 +86,7 @@ update_scissor( struct st_context *st )
if (memcmp(&scissor, &st->state.scissor, sizeof(scissor)) != 0) {
/* state has changed */
st->state.scissor = scissor; /* struct copy */
- st->pipe->set_scissor_state(st->pipe, &scissor); /* activate */
+ st->pipe->set_scissor_states(st->pipe, 0, 1, &scissor); /* activate */
}
}
diff --git a/mesalib/src/mesa/state_tracker/st_atom_texture.c b/mesalib/src/mesa/state_tracker/st_atom_texture.c
index fc2d69013..d79e04cf4 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_texture.c
@@ -239,7 +239,8 @@ update_single_texture(struct st_context *st,
st_mesa_format_to_pipe_format(stObj->base._BufferObjectFormat);
}
else {
- view_format = stObj->pt->format;
+ view_format =
+ stObj->surface_based ? stObj->surface_format : stObj->pt->format;
/* If sRGB decoding is off, use the linear format */
if (samp->sRGBDecode == GL_SKIP_DECODE_EXT) {
@@ -325,11 +326,11 @@ update_vertex_textures(struct st_context *st)
{
const struct gl_context *ctx = st->ctx;
- if (ctx->Const.MaxVertexTextureImageUnits > 0) {
+ if (ctx->Const.VertexProgram.MaxTextureImageUnits > 0) {
update_textures(st,
PIPE_SHADER_VERTEX,
&ctx->VertexProgram._Current->Base,
- ctx->Const.MaxVertexTextureImageUnits,
+ ctx->Const.VertexProgram.MaxTextureImageUnits,
st->state.sampler_views[PIPE_SHADER_VERTEX],
&st->state.num_sampler_views[PIPE_SHADER_VERTEX]);
}
@@ -344,7 +345,7 @@ update_fragment_textures(struct st_context *st)
update_textures(st,
PIPE_SHADER_FRAGMENT,
&ctx->FragmentProgram._Current->Base,
- ctx->Const.MaxTextureImageUnits,
+ ctx->Const.FragmentProgram.MaxTextureImageUnits,
st->state.sampler_views[PIPE_SHADER_FRAGMENT],
&st->state.num_sampler_views[PIPE_SHADER_FRAGMENT]);
}
@@ -359,7 +360,7 @@ update_geometry_textures(struct st_context *st)
update_textures(st,
PIPE_SHADER_GEOMETRY,
&ctx->GeometryProgram._Current->Base,
- ctx->Const.MaxTextureImageUnits,
+ ctx->Const.FragmentProgram.MaxTextureImageUnits,
st->state.sampler_views[PIPE_SHADER_GEOMETRY],
&st->state.num_sampler_views[PIPE_SHADER_GEOMETRY]);
}
diff --git a/mesalib/src/mesa/state_tracker/st_cb_bitmap.c b/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
index b3ca40501..e96f4b36e 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
@@ -34,7 +34,6 @@
#include "main/image.h"
#include "main/bufferobj.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/pbo.h"
#include "program/program.h"
#include "program/prog_print.h"
@@ -299,7 +298,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height,
* Create texture to hold bitmap pattern.
*/
pt = st_texture_create(st, st->internal_target, st->bitmap.tex_format,
- 0, width, height, 1, 1,
+ 0, width, height, 1, 1, 0,
PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
_mesa_unmap_pbo_source(ctx, unpack);
@@ -567,7 +566,7 @@ reset_cache(struct st_context *st)
cache->texture = st_texture_create(st, PIPE_TEXTURE_2D,
st->bitmap.tex_format, 0,
BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT,
- 1, 1,
+ 1, 1, 0,
PIPE_BIND_SAMPLER_VIEW);
}
@@ -826,7 +825,8 @@ st_init_bitmap(struct st_context *st)
/* init baseline rasterizer state once */
memset(&st->bitmap.rasterizer, 0, sizeof(st->bitmap.rasterizer));
- st->bitmap.rasterizer.gl_rasterization_rules = 1;
+ st->bitmap.rasterizer.half_pixel_center = 1;
+ st->bitmap.rasterizer.bottom_edge_rule = 1;
st->bitmap.rasterizer.depth_clip = 1;
/* find a usable texture format */
diff --git a/mesalib/src/mesa/state_tracker/st_cb_bitmap.h b/mesalib/src/mesa/state_tracker/st_cb_bitmap.h
index d1c18058b..cc9f5f574 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_bitmap.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_bitmap.h
@@ -31,7 +31,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
struct st_context;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_blit.c b/mesalib/src/mesa/state_tracker/st_cb_blit.c
index 50cab4294..a236a08e9 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_blit.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_blit.c
@@ -33,7 +33,6 @@
#include "main/imports.h"
#include "main/image.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "st_context.h"
#include "st_texture.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_blit.h b/mesalib/src/mesa/state_tracker/st_cb_blit.h
index 159c6ca8d..9e94e4439 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_blit.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_blit.h
@@ -30,7 +30,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
struct st_context;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c
index 8ff32c842..2e5e253a4 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -182,6 +182,21 @@ st_bufferobj_data(struct gl_context *ctx,
struct st_buffer_object *st_obj = st_buffer_object(obj);
unsigned bind, pipe_usage;
+ if (size && data && st_obj->buffer &&
+ st_obj->Base.Size == size && st_obj->Base.Usage == usage) {
+ /* Just discard the old contents and write new data.
+ * This should be the same as creating a new buffer, but we avoid
+ * a lot of validation in Mesa.
+ */
+ struct pipe_box box;
+
+ u_box_1d(0, size, &box);
+ pipe->transfer_inline_write(pipe, st_obj->buffer, 0,
+ PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE,
+ &box, data, 0, 0);
+ return GL_TRUE;
+ }
+
st_obj->Base.Size = size;
st_obj->Base.Usage = usage;
@@ -247,9 +262,11 @@ st_bufferobj_data(struct gl_context *ctx,
if (data)
pipe_buffer_write(pipe, st_obj->buffer, 0, size, data);
- return GL_TRUE;
}
+ /* BufferData may change an array or uniform buffer, need to update it */
+ st->dirty.st |= ST_NEW_VERTEX_ARRAYS | ST_NEW_UNIFORM_BUFFER;
+
return GL_TRUE;
}
diff --git a/mesalib/src/mesa/state_tracker/st_cb_clear.c b/mesalib/src/mesa/state_tracker/st_cb_clear.c
index a5aa8f496..566f4a76e 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_clear.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_clear.c
@@ -67,7 +67,8 @@ st_init_clear(struct st_context *st)
{
memset(&st->clear, 0, sizeof(st->clear));
- st->clear.raster.gl_rasterization_rules = 1;
+ st->clear.raster.half_pixel_center = 1;
+ st->clear.raster.bottom_edge_rule = 1;
st->clear.raster.depth_clip = 1;
}
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
index f5a1e27f7..68359e803 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -35,7 +35,6 @@
#include "main/bufferobj.h"
#include "main/format_pack.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/pack.h"
#include "main/pbo.h"
@@ -466,7 +465,7 @@ alloc_texture(struct st_context *st, GLsizei width, GLsizei height,
struct pipe_resource *pt;
pt = st_texture_create(st, st->internal_target, texFormat, 0,
- width, height, 1, 1, PIPE_BIND_SAMPLER_VIEW);
+ width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW);
return pt;
}
@@ -711,7 +710,8 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
memset(&rasterizer, 0, sizeof(rasterizer));
rasterizer.clamp_fragment_color = !st->clamp_frag_color_in_shader &&
ctx->Color._ClampFragmentColor;
- rasterizer.gl_rasterization_rules = 1;
+ rasterizer.half_pixel_center = 1;
+ rasterizer.bottom_edge_rule = 1;
rasterizer.depth_clip = !ctx->Transform.DepthClamp;
rasterizer.scissor = ctx->Scissor.Enabled;
cso_set_rasterizer(cso, &rasterizer);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.h b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.h
index 6209dcade..6cd6a4ed6 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.h
@@ -31,7 +31,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
struct st_context;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawtex.c b/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
index c4efce02f..2cc200e0c 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
@@ -15,7 +15,6 @@
#include "main/imports.h"
#include "main/image.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "program/program.h"
#include "program/prog_print.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawtex.h b/mesalib/src/mesa/state_tracker/st_cb_drawtex.h
index ccb615e98..9794ccc15 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawtex.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawtex.h
@@ -11,7 +11,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
struct st_context;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_eglimage.c b/mesalib/src/mesa/state_tracker/st_cb_eglimage.c
index 8c78e5ef4..a396b9e97 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_eglimage.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_eglimage.c
@@ -26,7 +26,6 @@
* Chia-I Wu <olv@lunarg.com>
*/
-#include "main/mfeatures.h"
#include "main/texobj.h"
#include "main/teximage.h"
#include "util/u_inlines.h"
@@ -132,6 +131,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
stObj->width0 = ps->width;
stObj->height0 = ps->height;
stObj->depth0 = 1;
+ stObj->surface_format = ps->format;
_mesa_dirty_texobj(ctx, texObj, GL_TRUE);
}
diff --git a/mesalib/src/mesa/state_tracker/st_cb_eglimage.h b/mesalib/src/mesa/state_tracker/st_cb_eglimage.h
index 1750b9147..c6ddec6ae 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_eglimage.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_eglimage.h
@@ -30,7 +30,6 @@
#define ST_CB_EGLIMAGE_H
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
index 4452e523b..826722be8 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
@@ -38,7 +38,6 @@
#include "main/fbobject.h"
#include "main/framebuffer.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/renderbuffer.h"
#include "pipe/p_context.h"
@@ -391,11 +390,10 @@ st_render_texture(struct gl_context *ctx,
{
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
- struct st_renderbuffer *strb;
- struct gl_renderbuffer *rb;
+ struct gl_renderbuffer *rb = att->Renderbuffer;
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
struct pipe_resource *pt;
struct st_texture_object *stObj;
- const struct gl_texture_image *texImage;
struct pipe_surface surf_tmpl;
if (!st_finalize_texture(ctx, pipe, att->Texture))
@@ -404,27 +402,6 @@ st_render_texture(struct gl_context *ctx,
pt = st_get_texobj_resource(att->Texture);
assert(pt);
- /* get pointer to texture image we're rendeing to */
- texImage = _mesa_get_attachment_teximage(att);
-
- /* create new renderbuffer which wraps the texture image.
- * Use the texture's name as the renderbuffer's name so that we have
- * something that's non-zero (to determine vertical orientation) and
- * possibly helpful for debugging.
- */
- rb = st_new_renderbuffer(ctx, att->Texture->Name);
- if (!rb) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()");
- return;
- }
-
- _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
- assert(rb->RefCount == 1);
- rb->AllocStorage = NULL; /* should not get called */
- strb = st_renderbuffer(rb);
-
- assert(strb->Base.RefCount > 0);
-
/* get the texture for the texture object */
stObj = st_texture_object(att->Texture);
@@ -434,11 +411,6 @@ st_render_texture(struct gl_context *ctx,
strb->rtt_face = att->CubeMapFace;
strb->rtt_slice = att->Zoffset;
- rb->Width = texImage->Width2;
- rb->Height = texImage->Height2;
- rb->_BaseFormat = texImage->_BaseFormat;
- rb->InternalFormat = texImage->InternalFormat;
-
pipe_resource_reference( &strb->texture, pt );
pipe_surface_release(pipe, &strb->surface);
@@ -477,10 +449,9 @@ st_render_texture(struct gl_context *ctx,
* Called via ctx->Driver.FinishRenderTexture.
*/
static void
-st_finish_render_texture(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att)
+st_finish_render_texture(struct gl_context *ctx, struct gl_renderbuffer *rb)
{
- struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer);
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
if (!strb)
return;
@@ -527,7 +498,7 @@ st_validate_attachment(struct gl_context *ctx,
return GL_FALSE;
format = stObj->pt->format;
- texFormat = _mesa_get_attachment_teximage_const(att)->TexFormat;
+ texFormat = att->Renderbuffer->TexImage->TexFormat;
/* If the encoding is sRGB and sRGB rendering cannot be enabled,
* check for linear format support instead.
diff --git a/mesalib/src/mesa/state_tracker/st_cb_feedback.c b/mesalib/src/mesa/state_tracker/st_cb_feedback.c
index 7a8fde465..d2e4346b7 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_feedback.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_feedback.c
@@ -40,7 +40,6 @@
#include "main/imports.h"
#include "main/context.h"
#include "main/feedback.h"
-#include "main/mfeatures.h"
#include "vbo/vbo.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_feedback.h b/mesalib/src/mesa/state_tracker/st_cb_feedback.h
index 0163631e3..6350da4e4 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_feedback.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_feedback.h
@@ -31,7 +31,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_flush.c b/mesalib/src/mesa/state_tracker/st_cb_flush.c
index b11004718..f428e0af9 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_flush.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_flush.c
@@ -77,7 +77,7 @@ display_front_buffer(struct st_context *st)
void st_flush(struct st_context *st,
struct pipe_fence_handle **fence,
- enum pipe_flush_flags flags)
+ unsigned flags)
{
FLUSH_VERTICES(st->ctx, 0);
FLUSH_CURRENT(st->ctx, 0);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_flush.h b/mesalib/src/mesa/state_tracker/st_cb_flush.h
index 003e2a2a9..cb5c62e87 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_flush.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_flush.h
@@ -42,7 +42,7 @@ st_init_flush_functions(struct dd_function_table *functions);
extern void
st_flush(struct st_context *st,
struct pipe_fence_handle **fence,
- enum pipe_flush_flags flags);
+ unsigned flags);
extern void
st_finish(struct st_context *st);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_msaa.c b/mesalib/src/mesa/state_tracker/st_cb_msaa.c
new file mode 100644
index 000000000..bbf2b2c5c
--- /dev/null
+++ b/mesalib/src/mesa/state_tracker/st_cb_msaa.c
@@ -0,0 +1,59 @@
+/**************************************************************************
+ *
+ * Copyright 2013 Red Hat
+ * All Rights Reserved.
+ *
+ * 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, sub license, 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ **************************************************************************/
+
+#include "main/bufferobj.h"
+#include "main/imports.h"
+
+#include "state_tracker/st_cb_msaa.h"
+#include "state_tracker/st_context.h"
+#include "state_tracker/st_atom.h"
+#include "state_tracker/st_cb_fbo.h"
+
+#include "pipe/p_context.h"
+
+
+static void
+st_GetSamplePosition(struct gl_context *ctx,
+ struct gl_framebuffer *fb,
+ GLuint index,
+ GLfloat *outValue)
+{
+ struct st_context *st = st_context(ctx);
+
+ st_validate_state(st);
+
+ if (st->pipe->get_sample_position)
+ st->pipe->get_sample_position(st->pipe, (unsigned) fb->Visual.samples,
+ index, outValue);
+}
+
+
+void
+st_init_msaa_functions(struct dd_function_table *functions)
+{
+ functions->GetSamplePosition = st_GetSamplePosition;
+}
diff --git a/mesalib/src/mesa/state_tracker/st_cb_msaa.h b/mesalib/src/mesa/state_tracker/st_cb_msaa.h
new file mode 100644
index 000000000..ba4c06f6b
--- /dev/null
+++ b/mesalib/src/mesa/state_tracker/st_cb_msaa.h
@@ -0,0 +1,39 @@
+/**************************************************************************
+ *
+ * Copyright 2013 Red Hat
+ * All Rights Reserved.
+ *
+ * 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, sub license, 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ **************************************************************************/
+
+
+#ifndef ST_CB_MSAA_H
+#define ST_CB_MSAA_H
+
+#include "main/glheader.h"
+
+struct dd_function_table;
+
+extern void
+st_init_msaa_functions(struct dd_function_table *functions);
+
+#endif
diff --git a/mesalib/src/mesa/state_tracker/st_cb_queryobj.c b/mesalib/src/mesa/state_tracker/st_cb_queryobj.c
index 6a35c1b69..24ce6351d 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_queryobj.c
@@ -35,7 +35,6 @@
#include "main/imports.h"
#include "main/context.h"
-#include "main/mfeatures.h"
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_queryobj.h b/mesalib/src/mesa/state_tracker/st_cb_queryobj.h
index d5b107532..e069b095c 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_queryobj.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_queryobj.h
@@ -29,7 +29,6 @@
#define ST_CB_QUERYOBJ_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
/**
diff --git a/mesalib/src/mesa/state_tracker/st_cb_rasterpos.c b/mesalib/src/mesa/state_tracker/st_cb_rasterpos.c
index 4731f2648..26a55909d 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_rasterpos.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_rasterpos.c
@@ -38,7 +38,6 @@
#include "main/imports.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/feedback.h"
#include "st_context.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_rasterpos.h b/mesalib/src/mesa/state_tracker/st_cb_rasterpos.h
index bfd3e4138..99796f610 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_rasterpos.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_rasterpos.h
@@ -30,7 +30,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.c b/mesalib/src/mesa/state_tracker/st_cb_texture.c
index 0cd0d77af..56dbe85c0 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_texture.c
@@ -25,7 +25,6 @@
*
**************************************************************************/
-#include "main/mfeatures.h"
#include "main/bufferobj.h"
#include "main/enums.h"
#include "main/fbobject.h"
@@ -78,6 +77,8 @@ gl_target_to_pipe(GLenum target)
case GL_TEXTURE_2D:
case GL_PROXY_TEXTURE_2D:
case GL_TEXTURE_EXTERNAL_OES:
+ case GL_TEXTURE_2D_MULTISAMPLE:
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
return PIPE_TEXTURE_2D;
case GL_TEXTURE_RECTANGLE_NV:
case GL_PROXY_TEXTURE_RECTANGLE_NV:
@@ -99,6 +100,8 @@ gl_target_to_pipe(GLenum target)
return PIPE_TEXTURE_1D_ARRAY;
case GL_TEXTURE_2D_ARRAY_EXT:
case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
+ case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY:
return PIPE_TEXTURE_2D_ARRAY;
case GL_TEXTURE_BUFFER:
return PIPE_BUFFER;
@@ -408,7 +411,7 @@ guess_and_alloc_texture(struct st_context *st,
ptWidth,
ptHeight,
ptDepth,
- ptLayers,
+ ptLayers, 0,
bindings);
stObj->lastLevel = lastLevel;
@@ -496,7 +499,7 @@ st_AllocTextureImageBuffer(struct gl_context *ctx,
ptWidth,
ptHeight,
ptDepth,
- ptLayers,
+ ptLayers, 0,
bindings);
return stImage->pt != NULL;
}
@@ -1492,7 +1495,7 @@ st_finalize_texture(struct gl_context *ctx,
GLuint face;
struct st_texture_image *firstImage;
enum pipe_format firstImageFormat;
- GLuint ptWidth, ptHeight, ptDepth, ptLayers;
+ GLuint ptWidth, ptHeight, ptDepth, ptLayers, ptNumSamples;
if (_mesa_is_texture_complete(tObj, &tObj->Sampler)) {
/* The texture is complete and we know exactly how many mipmap levels
@@ -1537,6 +1540,11 @@ st_finalize_texture(struct gl_context *ctx,
pipe_sampler_view_release(st->pipe, &stObj->sampler_view);
}
+ /* If this texture comes from a window system, there is nothing else to do. */
+ if (stObj->surface_based) {
+ return GL_TRUE;
+ }
+
/* Find gallium format for the Mesa texture */
firstImageFormat = st_mesa_format_to_pipe_format(firstImage->base.TexFormat);
@@ -1556,6 +1564,7 @@ st_finalize_texture(struct gl_context *ctx,
/* convert GL dims to Gallium dims */
st_gl_texture_dims_to_pipe_dims(stObj->base.Target, width, height, depth,
&ptWidth, &ptHeight, &ptDepth, &ptLayers);
+ ptNumSamples = firstImage->base.NumSamples;
}
/* If we already have a gallium texture, check that it matches the texture
@@ -1563,11 +1572,12 @@ st_finalize_texture(struct gl_context *ctx,
*/
if (stObj->pt) {
if (stObj->pt->target != gl_target_to_pipe(stObj->base.Target) ||
- !st_sampler_compat_formats(stObj->pt->format, firstImageFormat) ||
+ stObj->pt->format != firstImageFormat ||
stObj->pt->last_level < stObj->lastLevel ||
stObj->pt->width0 != ptWidth ||
stObj->pt->height0 != ptHeight ||
stObj->pt->depth0 != ptDepth ||
+ stObj->pt->nr_samples != ptNumSamples ||
stObj->pt->array_size != ptLayers)
{
/* The gallium texture does not match the Mesa texture so delete the
@@ -1591,7 +1601,7 @@ st_finalize_texture(struct gl_context *ctx,
ptWidth,
ptHeight,
ptDepth,
- ptLayers,
+ ptLayers, ptNumSamples,
bindings);
if (!stObj->pt) {
@@ -1637,11 +1647,14 @@ st_AllocTextureStorage(struct gl_context *ctx,
GLsizei height, GLsizei depth)
{
const GLuint numFaces = _mesa_num_tex_faces(texObj->Target);
+ struct gl_texture_image *texImage = texObj->Image[0][0];
struct st_context *st = st_context(ctx);
struct st_texture_object *stObj = st_texture_object(texObj);
+ struct pipe_screen *screen = st->pipe->screen;
GLuint ptWidth, ptHeight, ptDepth, ptLayers, bindings;
enum pipe_format fmt;
GLint level;
+ int num_samples = texImage->NumSamples;
assert(levels > 0);
@@ -1651,10 +1664,30 @@ st_AllocTextureStorage(struct gl_context *ctx,
stObj->depth0 = depth;
stObj->lastLevel = levels - 1;
- fmt = st_mesa_format_to_pipe_format(texObj->Image[0][0]->TexFormat);
+ fmt = st_mesa_format_to_pipe_format(texImage->TexFormat);
bindings = default_bindings(st, fmt);
+ /* Raise the sample count if the requested one is unsupported. */
+ if (num_samples > 1) {
+ boolean found = FALSE;
+
+ for (; num_samples <= ctx->Const.MaxSamples; num_samples++) {
+ if (screen->is_format_supported(screen, fmt, PIPE_TEXTURE_2D,
+ num_samples,
+ PIPE_BIND_SAMPLER_VIEW)) {
+ /* Update the sample count in gl_texture_image as well. */
+ texImage->NumSamples = num_samples;
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found) {
+ return GL_FALSE;
+ }
+ }
+
st_gl_texture_dims_to_pipe_dims(texObj->Target,
width, height, depth,
&ptWidth, &ptHeight, &ptDepth, &ptLayers);
@@ -1662,11 +1695,11 @@ st_AllocTextureStorage(struct gl_context *ctx,
stObj->pt = st_texture_create(st,
gl_target_to_pipe(texObj->Target),
fmt,
- levels,
+ levels - 1,
ptWidth,
ptHeight,
ptDepth,
- ptLayers,
+ ptLayers, num_samples,
bindings);
if (!stObj->pt)
return GL_FALSE;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_xformfb.c b/mesalib/src/mesa/state_tracker/st_cb_xformfb.c
index 3e52c9988..e1a7a88a1 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_xformfb.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_xformfb.c
@@ -36,7 +36,6 @@
#include "main/bufferobj.h"
#include "main/context.h"
-#include "main/mfeatures.h"
#include "main/transformfeedback.h"
#include "st_cb_bufferobjects.h"
diff --git a/mesalib/src/mesa/state_tracker/st_cb_xformfb.h b/mesalib/src/mesa/state_tracker/st_cb_xformfb.h
index 5c82fed18..998c41825 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_xformfb.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_xformfb.h
@@ -30,7 +30,6 @@
#include "main/compiler.h"
-#include "main/mfeatures.h"
struct dd_function_table;
struct gl_transform_feedback_object;
diff --git a/mesalib/src/mesa/state_tracker/st_context.c b/mesalib/src/mesa/state_tracker/st_context.c
index cc87f2bb3..7d18c2521 100644
--- a/mesalib/src/mesa/state_tracker/st_context.c
+++ b/mesalib/src/mesa/state_tracker/st_context.c
@@ -49,6 +49,7 @@
#include "st_cb_eglimage.h"
#include "st_cb_fbo.h"
#include "st_cb_feedback.h"
+#include "st_cb_msaa.h"
#include "st_cb_program.h"
#include "st_cb_queryobj.h"
#include "st_cb_readpixels.h"
@@ -187,6 +188,10 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
st->needs_texcoord_semantic =
screen->get_param(screen, PIPE_CAP_TGSI_TEXCOORD);
+ st->apply_texture_swizzle_to_border_color =
+ !!(screen->get_param(screen, PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK) &
+ (PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 |
+ PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600));
/* GL limits and extensions */
st_init_limits(st);
@@ -203,6 +208,8 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
static void st_init_driver_flags(struct gl_driver_flags *f)
{
f->NewArray = ST_NEW_VERTEX_ARRAYS;
+ f->NewRasterizerDiscard = ST_NEW_RASTERIZER;
+ f->NewUniformBuffer = ST_NEW_UNIFORM_BUFFER;
}
struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
@@ -233,7 +240,7 @@ struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
* driver prefers DP4 or MUL/MAD for vertex transformation.
*/
if (debug_get_option_mesa_mvp_dp4())
- _mesa_set_mvp_with_dp4( ctx, GL_TRUE );
+ ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4 = GL_TRUE;
return st_create_context_priv(ctx, pipe, options);
}
@@ -340,6 +347,7 @@ void st_init_driver_functions(struct dd_function_table *functions)
st_init_fbo_functions(functions);
st_init_feedback_functions(functions);
+ st_init_msaa_functions(functions);
st_init_program_functions(functions);
st_init_query_functions(functions);
st_init_cond_render_functions(functions);
diff --git a/mesalib/src/mesa/state_tracker/st_context.h b/mesalib/src/mesa/state_tracker/st_context.h
index 8786a036f..ab89b4947 100644
--- a/mesalib/src/mesa/state_tracker/st_context.h
+++ b/mesalib/src/mesa/state_tracker/st_context.h
@@ -50,6 +50,8 @@ struct u_upload_mgr;
#define ST_NEW_EDGEFLAGS_DATA (1 << 4)
#define ST_NEW_GEOMETRY_PROGRAM (1 << 5)
#define ST_NEW_VERTEX_ARRAYS (1 << 6)
+#define ST_NEW_RASTERIZER (1 << 7)
+#define ST_NEW_UNIFORM_BUFFER (1 << 8)
struct st_state_flags {
@@ -87,6 +89,7 @@ struct st_context
boolean prefer_blit_based_texture_transfer;
boolean needs_texcoord_semantic;
+ boolean apply_texture_swizzle_to_border_color;
/* On old libGL's for linux we need to invalidate the drawables
* on glViewpport calls, this is set via a option.
diff --git a/mesalib/src/mesa/state_tracker/st_draw.c b/mesalib/src/mesa/state_tracker/st_draw.c
index bff8d9b31..a440ae2a8 100644
--- a/mesalib/src/mesa/state_tracker/st_draw.c
+++ b/mesalib/src/mesa/state_tracker/st_draw.c
@@ -40,7 +40,6 @@
#include "main/image.h"
#include "main/bufferobj.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "vbo/vbo.h"
@@ -231,7 +230,7 @@ st_draw_vbo(struct gl_context *ctx,
nr_prims);
if (!setup_index_buffer(st, ib, &ibuffer)) {
- /* out of memory */
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBegin/DrawElements/DrawArray");
return;
}
@@ -245,7 +244,7 @@ st_draw_vbo(struct gl_context *ctx,
* so we only set these fields for indexed drawing:
*/
info.primitive_restart = ctx->Array._PrimitiveRestart;
- info.restart_index = ctx->Array._RestartIndex;
+ info.restart_index = ctx->Array.RestartIndex;
}
else {
/* Transform feedback drawing is always non-indexed. */
diff --git a/mesalib/src/mesa/state_tracker/st_draw_feedback.c b/mesalib/src/mesa/state_tracker/st_draw_feedback.c
index ae87fb28d..b19d913e5 100644
--- a/mesalib/src/mesa/state_tracker/st_draw_feedback.c
+++ b/mesalib/src/mesa/state_tracker/st_draw_feedback.c
@@ -28,7 +28,6 @@
#include "main/imports.h"
#include "main/image.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "vbo/vbo.h"
@@ -134,7 +133,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
* code sends state updates to the pipe, not to our private draw module.
*/
assert(draw);
- draw_set_viewport_state(draw, &st->state.viewport);
+ draw_set_viewport_states(draw, 0, 1, &st->state.viewport);
draw_set_clip_state(draw, &st->state.clip);
draw_set_rasterizer_state(draw, &st->state.rasterizer, NULL);
draw_bind_vertex_shader(draw, st->vp_variant->draw_shader);
@@ -176,7 +175,8 @@ st_feedback_draw_vbo(struct gl_context *ctx,
map = pipe_buffer_map(pipe, vbuffers[attr].buffer,
PIPE_TRANSFER_READ,
&vb_transfer[attr]);
- draw_set_mapped_vertex_buffer(draw, attr, map);
+ draw_set_mapped_vertex_buffer(draw, attr, map,
+ vbuffers[attr].buffer->width0);
}
else {
vbuffers[attr].buffer = NULL;
@@ -184,7 +184,8 @@ st_feedback_draw_vbo(struct gl_context *ctx,
vbuffers[attr].buffer_offset = 0;
velements[attr].src_offset = 0;
- draw_set_mapped_vertex_buffer(draw, attr, vbuffers[attr].user_buffer);
+ draw_set_mapped_vertex_buffer(draw, attr, vbuffers[attr].user_buffer,
+ ~0);
}
/* common-case setup */
@@ -232,7 +233,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
draw_set_indexes(draw,
(ubyte *) mapped_indices + ibuffer.offset,
- ibuffer.index_size);
+ ibuffer.index_size, ~0);
}
/* set the constant buffer */
@@ -251,7 +252,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
* unmap vertex/index buffers
*/
if (ib) {
- draw_set_indexes(draw, NULL, 0);
+ draw_set_indexes(draw, NULL, 0, 0);
if (ib_transfer)
pipe_buffer_unmap(pipe, ib_transfer);
pipe_resource_reference(&ibuffer.buffer, NULL);
@@ -261,7 +262,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
for (attr = 0; attr < vp->num_inputs; attr++) {
if (vb_transfer[attr])
pipe_buffer_unmap(pipe, vb_transfer[attr]);
- draw_set_mapped_vertex_buffer(draw, attr, NULL);
+ draw_set_mapped_vertex_buffer(draw, attr, NULL, 0);
pipe_resource_reference(&vbuffers[attr].buffer, NULL);
}
draw_set_vertex_buffers(draw, 0, vp->num_inputs, NULL);
diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c
index 2d8b9efec..46acc8763 100644
--- a/mesalib/src/mesa/state_tracker/st_extensions.c
+++ b/mesalib/src/mesa/state_tracker/st_extensions.c
@@ -29,7 +29,6 @@
#include "main/imports.h"
#include "main/context.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/version.h"
#include "pipe/p_context.h"
@@ -38,9 +37,9 @@
#include "st_context.h"
#include "st_extensions.h"
+#include "st_format.h"
-
-static int _min(int a, int b)
+static unsigned _min(unsigned a, unsigned b)
{
return (a < b) ? a : b;
}
@@ -71,7 +70,6 @@ void st_init_limits(struct st_context *st)
struct gl_constants *c = &st->ctx->Const;
gl_shader_type sh;
boolean can_ubo = TRUE;
- int max_const_buffers;
c->MaxTextureLevels
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS),
@@ -91,25 +89,10 @@ void st_init_limits(struct st_context *st)
c->MaxArrayTextureLayers
= screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS);
- c->MaxTextureImageUnits
- = _min(screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
- PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
- MAX_TEXTURE_IMAGE_UNITS);
-
- c->MaxVertexTextureImageUnits
- = _min(screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
- PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
- MAX_VERTEX_TEXTURE_IMAGE_UNITS);
-
c->MaxCombinedTextureImageUnits
= _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS),
MAX_COMBINED_TEXTURE_IMAGE_UNITS);
- c->MaxTextureCoordUnits
- = _min(c->MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS);
-
- c->MaxTextureUnits = _min(c->MaxTextureImageUnits, c->MaxTextureCoordUnits);
-
/* Define max viewport size and max renderbuffer size in terms of
* max texture size (note: max tex RECT size = max tex 2D size).
* If this isn't true for some hardware we'll need new PIPE_CAP_ queries.
@@ -118,9 +101,9 @@ void st_init_limits(struct st_context *st)
c->MaxViewportHeight =
c->MaxRenderbufferSize = c->MaxTextureRectSize;
- c->MaxDrawBuffers
- = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
- 1, MAX_DRAW_BUFFERS);
+ c->MaxDrawBuffers = c->MaxColorAttachments =
+ _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
+ 1, MAX_DRAW_BUFFERS);
c->MaxDualSourceDrawBuffers
= _clamp(screen->get_param(screen, PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS),
@@ -156,13 +139,16 @@ void st_init_limits(struct st_context *st)
c->MaxTextureLodBias
= screen->get_paramf(screen, PIPE_CAPF_MAX_TEXTURE_LOD_BIAS);
- c->MaxDrawBuffers
- = CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
- 1, MAX_DRAW_BUFFERS);
-
c->QuadsFollowProvokingVertexConvention = screen->get_param(
screen, PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION);
+ c->MaxUniformBlockSize =
+ screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
+ PIPE_SHADER_CAP_MAX_CONSTS) * 16;
+ if (c->MaxUniformBlockSize < 16384) {
+ can_ubo = FALSE;
+ }
+
for (sh = 0; sh < MESA_SHADER_TYPES; ++sh) {
struct gl_shader_compiler_options *options =
&st->ctx->ShaderCompilerOptions[sh];
@@ -183,17 +169,39 @@ void st_init_limits(struct st_context *st)
continue;
}
- pc->MaxNativeInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS);
- pc->MaxNativeAluInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS);
- pc->MaxNativeTexInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS);
- pc->MaxNativeTexIndirections = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS);
- pc->MaxNativeAttribs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS);
- pc->MaxNativeTemps = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS);
- pc->MaxNativeAddressRegs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS);
- pc->MaxNativeParameters = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS);
- pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS);
- /* raise MaxParameters if native support is higher */
- pc->MaxParameters = MAX2(pc->MaxParameters, pc->MaxNativeParameters);
+ pc->MaxTextureImageUnits =
+ _min(screen->get_shader_param(screen, sh,
+ PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS),
+ MAX_TEXTURE_IMAGE_UNITS);
+
+ pc->MaxInstructions = pc->MaxNativeInstructions =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS);
+ pc->MaxAluInstructions = pc->MaxNativeAluInstructions =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS);
+ pc->MaxTexInstructions = pc->MaxNativeTexInstructions =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS);
+ pc->MaxTexIndirections = pc->MaxNativeTexIndirections =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS);
+ pc->MaxAttribs = pc->MaxNativeAttribs =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS);
+ pc->MaxTemps = pc->MaxNativeTemps =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS);
+ pc->MaxAddressRegs = pc->MaxNativeAddressRegs =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS);
+ pc->MaxParameters = pc->MaxNativeParameters =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS);
+
+ pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS);
+
+ pc->MaxUniformBlocks =
+ screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONST_BUFFERS);
+ if (pc->MaxUniformBlocks)
+ pc->MaxUniformBlocks -= 1; /* The first one is for ordinary uniforms. */
+ pc->MaxUniformBlocks = _min(pc->MaxUniformBlocks, MAX_UNIFORM_BUFFERS);
+
+ pc->MaxCombinedUniformComponents = (pc->MaxUniformComponents +
+ c->MaxUniformBlockSize / 4 *
+ pc->MaxUniformBlocks);
/* Gallium doesn't really care about local vs. env parameters so use the
* same limits.
@@ -220,15 +228,9 @@ void st_init_limits(struct st_context *st)
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, sh,
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
- if (pc->MaxNativeInstructions) {
- if (options->EmitNoIndirectUniform)
+ if (pc->MaxNativeInstructions &&
+ (options->EmitNoIndirectUniform || pc->MaxUniformBlocks < 12)) {
can_ubo = FALSE;
-
- max_const_buffers = screen->get_shader_param(screen, sh,
- PIPE_SHADER_CAP_MAX_CONST_BUFFERS);
- /* we need 13 buffers - 1 constant, 12 UBO */
- if (max_const_buffers < 13)
- can_ubo = FALSE;
}
if (options->EmitNoLoops)
@@ -238,11 +240,20 @@ void st_init_limits(struct st_context *st)
options->LowerClipDistance = true;
}
+ /* This depends on program constants. */
+ c->MaxTextureCoordUnits
+ = _min(c->FragmentProgram.MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS);
+
+ c->MaxTextureUnits = _min(c->FragmentProgram.MaxTextureImageUnits, c->MaxTextureCoordUnits);
+
+ c->VertexProgram.MaxAttribs = MIN2(c->VertexProgram.MaxAttribs, 16);
+
/* PIPE_SHADER_CAP_MAX_INPUTS for the FS specifies the maximum number
* of inputs. It's always 2 colors + N generic inputs. */
c->MaxVarying = screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
PIPE_SHADER_CAP_MAX_INPUTS);
c->MaxVarying = MIN2(c->MaxVarying, MAX_VARYING);
+ c->MaxVaryingComponents = c->MaxVarying * 4;
c->MinProgramTexelOffset = screen->get_param(screen, PIPE_CAP_MIN_TEXEL_OFFSET);
c->MaxProgramTexelOffset = screen->get_param(screen, PIPE_CAP_MAX_TEXEL_OFFSET);
@@ -267,8 +278,13 @@ void st_init_limits(struct st_context *st)
if (can_ubo) {
st->ctx->Extensions.ARB_uniform_buffer_object = GL_TRUE;
- st->ctx->Const.UniformBufferOffsetAlignment =
+ c->UniformBufferOffsetAlignment =
screen->get_param(screen, PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT);
+ c->MaxCombinedUniformBlocks = c->MaxUniformBufferBindings =
+ c->VertexProgram.MaxUniformBlocks +
+ c->GeometryProgram.MaxUniformBlocks +
+ c->FragmentProgram.MaxUniformBlocks;
+ assert(c->MaxCombinedUniformBlocks <= MAX_COMBINED_UNIFORM_BUFFERS);
}
}
@@ -398,7 +414,8 @@ void st_init_extensions(struct st_context *st)
{ o(MESA_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS },
{ o(OES_standard_derivatives), PIPE_CAP_SM3 },
- { o(ARB_texture_cube_map_array), PIPE_CAP_CUBE_MAP_ARRAY }
+ { o(ARB_texture_cube_map_array), PIPE_CAP_CUBE_MAP_ARRAY },
+ { o(ARB_texture_multisample), PIPE_CAP_TEXTURE_MULTISAMPLE }
};
/* Required: render target and sampler support */
@@ -658,10 +675,33 @@ void st_init_extensions(struct st_context *st)
/* Maximum sample count. */
for (i = 16; i > 0; --i) {
- if (screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_UNORM,
- PIPE_TEXTURE_2D, i,
- PIPE_BIND_RENDER_TARGET)) {
+ enum pipe_format pformat = st_choose_format(st, GL_RGBA,
+ GL_NONE, GL_NONE,
+ PIPE_TEXTURE_2D, i,
+ PIPE_BIND_RENDER_TARGET, FALSE);
+ if (pformat != PIPE_FORMAT_NONE) {
ctx->Const.MaxSamples = i;
+ ctx->Const.MaxColorTextureSamples = i;
+ break;
+ }
+ }
+ for (i = ctx->Const.MaxSamples; i > 0; --i) {
+ enum pipe_format pformat = st_choose_format(st, GL_DEPTH_STENCIL,
+ GL_NONE, GL_NONE,
+ PIPE_TEXTURE_2D, i,
+ PIPE_BIND_DEPTH_STENCIL, FALSE);
+ if (pformat != PIPE_FORMAT_NONE) {
+ ctx->Const.MaxDepthTextureSamples = i;
+ break;
+ }
+ }
+ for (i = ctx->Const.MaxSamples; i > 0; --i) {
+ enum pipe_format pformat = st_choose_format(st, GL_RGBA_INTEGER,
+ GL_NONE, GL_NONE,
+ PIPE_TEXTURE_2D, i,
+ PIPE_BIND_RENDER_TARGET, FALSE);
+ if (pformat != PIPE_FORMAT_NONE) {
+ ctx->Const.MaxIntegerSamples = i;
break;
}
}
@@ -689,7 +729,10 @@ void st_init_extensions(struct st_context *st)
ctx->Extensions.ARB_transform_feedback_instanced = GL_TRUE;
}
if (st->options.force_glsl_extensions_warn)
- ctx->Const.ForceGLSLExtensionsWarn = 1;
+ ctx->Const.ForceGLSLExtensionsWarn = 1;
+
+ if (st->options.disable_glsl_line_continuations)
+ ctx->Const.DisableGLSLLineContinuations = 1;
ctx->Const.MinMapBufferAlignment =
screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT);
@@ -699,6 +742,9 @@ void st_init_extensions(struct st_context *st)
if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS)) {
ctx->Extensions.ARB_texture_buffer_object = GL_TRUE;
+ ctx->Const.MaxTextureBufferSize =
+ _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE),
+ (1u << 31) - 1);
ctx->Const.TextureBufferOffsetAlignment =
screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT);
diff --git a/mesalib/src/mesa/state_tracker/st_format.c b/mesalib/src/mesa/state_tracker/st_format.c
index a15706a03..56f3a4a48 100644
--- a/mesalib/src/mesa/state_tracker/st_format.c
+++ b/mesalib/src/mesa/state_tracker/st_format.c
@@ -38,7 +38,6 @@
#include "main/texstore.h"
#include "main/image.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
@@ -1801,41 +1800,6 @@ st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target,
}
-GLboolean
-st_sampler_compat_formats(enum pipe_format format1, enum pipe_format format2)
-{
- if (format1 == format2)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_B8G8R8A8_UNORM &&
- format2 == PIPE_FORMAT_B8G8R8X8_UNORM)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_B8G8R8X8_UNORM &&
- format2 == PIPE_FORMAT_B8G8R8A8_UNORM)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_A8B8G8R8_UNORM &&
- format2 == PIPE_FORMAT_X8B8G8R8_UNORM)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_X8B8G8R8_UNORM &&
- format2 == PIPE_FORMAT_A8B8G8R8_UNORM)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_A8R8G8B8_UNORM &&
- format2 == PIPE_FORMAT_X8R8G8B8_UNORM)
- return GL_TRUE;
-
- if (format1 == PIPE_FORMAT_X8R8G8B8_UNORM &&
- format2 == PIPE_FORMAT_A8R8G8B8_UNORM)
- return GL_TRUE;
-
- return GL_FALSE;
-}
-
-
-
/**
* This is used for translating texture border color and the clear
* color. For example, the clear color is interpreted according to
diff --git a/mesalib/src/mesa/state_tracker/st_format.h b/mesalib/src/mesa/state_tracker/st_format.h
index 0a1c18d92..6e97dcb96 100644
--- a/mesalib/src/mesa/state_tracker/st_format.h
+++ b/mesalib/src/mesa/state_tracker/st_format.h
@@ -70,10 +70,6 @@ size_t
st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target,
GLenum internalFormat, int samples[16]);
-/* can we use a sampler view to translate these formats
- only used to make TFP so far */
-extern GLboolean
-st_sampler_compat_formats(enum pipe_format format1, enum pipe_format format2);
extern void
diff --git a/mesalib/src/mesa/state_tracker/st_gen_mipmap.c b/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
index 8ce2e06a2..e5512af2a 100644
--- a/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
@@ -172,6 +172,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
oldTex->height0,
oldTex->depth0,
oldTex->array_size,
+ 0,
oldTex->bind);
/* This will copy the old texture's base image into the new texture
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 338c652cb..f8176eb77 100644
--- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -1945,8 +1945,6 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
if (ir->type->base_type == GLSL_TYPE_BOOL) {
emit(ir, TGSI_OPCODE_USNE, result_dst, cbuf, st_src_reg_for_int(0));
- result_src.negate = 1;
- emit(ir, TGSI_OPCODE_UCMP, result_dst, result_src, st_src_reg_for_int(~0), st_src_reg_for_int(0));
} else {
emit(ir, TGSI_OPCODE_MOV, result_dst, cbuf);
}
@@ -1969,7 +1967,17 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
case ir_unop_unpack_snorm_4x8:
case ir_unop_unpack_unorm_4x8:
case ir_binop_pack_half_2x16_split:
+ case ir_unop_bitfield_reverse:
+ case ir_unop_bit_count:
+ case ir_unop_find_msb:
+ case ir_unop_find_lsb:
+ case ir_binop_bfm:
+ case ir_triop_bfi:
+ case ir_triop_bitfield_extract:
+ case ir_quadop_bitfield_insert:
case ir_quadop_vector:
+ case ir_binop_vector_extract:
+ case ir_triop_vector_insert:
/* This operation is not supported, or should have already been handled.
*/
assert(!"Invalid ir opcode in glsl_to_tgsi_visitor::visit()");
@@ -2388,8 +2396,8 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir)
if (native_integers) {
/* This is necessary because TGSI's CMP instruction expects the
* condition to be a float, and we store booleans as integers.
- * If TGSI had a UCMP instruction or similar, this extra
- * instruction would not be necessary.
+ * TODO: really want to avoid i2f path and use UCMP. Requires
+ * changes to process_move_condition though too.
*/
condition_temp = get_temp(glsl_type::vec4_type);
condition.negate = 0;
@@ -2683,7 +2691,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
void
glsl_to_tgsi_visitor::visit(ir_texture *ir)
{
- st_src_reg result_src, coord, cube_sc, lod_info, projector, dx, dy, offset;
+ st_src_reg result_src, coord, cube_sc, lod_info, projector, dx, dy, offset, sample_index;
st_dst_reg result_dst, coord_dst, cube_sc_dst;
glsl_to_tgsi_instruction *inst = NULL;
unsigned opcode = TGSI_OPCODE_NOP;
@@ -2706,6 +2714,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
*/
coord = get_temp(glsl_type::vec4_type);
coord_dst = st_dst_reg(coord);
+ coord_dst.writemask = (1 << ir->coordinate->type->vector_elements) - 1;
emit(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
}
@@ -2772,7 +2781,9 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
}
break;
case ir_txf_ms:
- assert(!"Unexpected ir_txf_ms opcode");
+ opcode = TGSI_OPCODE_TXF;
+ ir->lod_info.sample_index->accept(this);
+ sample_index = this->result;
break;
case ir_lod:
assert(!"Unexpected ir_lod opcode");
@@ -2859,7 +2870,11 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
}
}
- if (opcode == TGSI_OPCODE_TXL || opcode == TGSI_OPCODE_TXB ||
+ if (ir->op == ir_txf_ms) {
+ coord_dst.writemask = WRITEMASK_W;
+ emit(ir, TGSI_OPCODE_MOV, coord_dst, sample_index);
+ coord_dst.writemask = WRITEMASK_XYZW;
+ } else if (opcode == TGSI_OPCODE_TXL || opcode == TGSI_OPCODE_TXB ||
opcode == TGSI_OPCODE_TXF) {
/* TGSI stores LOD or LOD bias in the last channel of the coords. */
coord_dst.writemask = WRITEMASK_W;
@@ -2921,6 +2936,10 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
case GLSL_SAMPLER_DIM_EXTERNAL:
inst->tex_target = TEXTURE_EXTERNAL_INDEX;
break;
+ case GLSL_SAMPLER_DIM_MS:
+ inst->tex_target = (sampler_type->sampler_array)
+ ? TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX : TEXTURE_2D_MULTISAMPLE_INDEX;
+ break;
default:
assert(!"Should not get here.");
}
@@ -2967,12 +2986,15 @@ glsl_to_tgsi_visitor::visit(ir_discard *ir)
void
glsl_to_tgsi_visitor::visit(ir_if *ir)
{
+ unsigned if_opcode;
glsl_to_tgsi_instruction *if_inst;
ir->condition->accept(this);
assert(this->result.file != PROGRAM_UNDEFINED);
- if_inst = emit(ir->condition, TGSI_OPCODE_IF, undef_dst, this->result);
+ if_opcode = native_integers ? TGSI_OPCODE_UIF : TGSI_OPCODE_IF;
+
+ if_inst = emit(ir->condition, if_opcode, undef_dst, this->result);
this->instructions.push_tail(if_inst);
@@ -3451,6 +3473,7 @@ glsl_to_tgsi_visitor::copy_propagate(void)
break;
case TGSI_OPCODE_IF:
+ case TGSI_OPCODE_UIF:
++level;
break;
@@ -3529,6 +3552,8 @@ glsl_to_tgsi_visitor::copy_propagate(void)
/* If this is a copy, add it to the ACP. */
if (inst->op == TGSI_OPCODE_MOV &&
inst->dst.file == PROGRAM_TEMPORARY &&
+ !(inst->dst.file == inst->src[0].file &&
+ inst->dst.index == inst->src[0].index) &&
!inst->dst.reladdr &&
!inst->saturate &&
!inst->src[0].reladdr &&
@@ -3653,6 +3678,7 @@ glsl_to_tgsi_visitor::eliminate_dead_code_advanced(void)
break;
case TGSI_OPCODE_IF:
+ case TGSI_OPCODE_UIF:
++level;
/* fallthrough to default case to mark the condition as read */
@@ -4378,6 +4404,7 @@ compile_tgsi_instruction(struct st_translate *t,
case TGSI_OPCODE_ELSE:
case TGSI_OPCODE_ENDLOOP:
case TGSI_OPCODE_IF:
+ case TGSI_OPCODE_UIF:
assert(num_dst == 0);
ureg_label_insn(ureg,
inst->op,
@@ -4903,7 +4930,7 @@ st_translate_program(
assert(i == program->num_immediates);
/* texture samplers */
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (program->samplers_used & (1 << i)) {
t->samplers[i] = ureg_DECL_sampler(ureg, i);
}
@@ -5216,6 +5243,7 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
lower_ubo_reference(prog->_LinkedShaders[i], ir);
do_vec_index_to_cond_assign(ir);
+ lower_vector_insert(ir, true);
lower_quadop_vector(ir, false);
lower_noise(ir);
if (options->MaxIfDepth == 0) {
@@ -5228,7 +5256,7 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress;
progress = do_common_optimization(ir, true, true,
- options->MaxUnrollIterations)
+ options->MaxUnrollIterations, options)
|| progress;
progress = lower_if_to_cond_assign(ir, options->MaxIfDepth) || progress;
diff --git a/mesalib/src/mesa/state_tracker/st_manager.c b/mesalib/src/mesa/state_tracker/st_manager.c
index 03e086a72..9e537f3c4 100644
--- a/mesalib/src/mesa/state_tracker/st_manager.c
+++ b/mesalib/src/mesa/state_tracker/st_manager.c
@@ -28,7 +28,6 @@
#include "main/mtypes.h"
#include "main/context.h"
-#include "main/mfeatures.h"
#include "main/texobj.h"
#include "main/teximage.h"
#include "main/texstate.h"
@@ -454,7 +453,7 @@ st_context_flush(struct st_context_iface *stctxi, unsigned flags,
struct pipe_fence_handle **fence)
{
struct st_context *st = (struct st_context *) stctxi;
- enum pipe_flush_flags pipe_flags = 0;
+ unsigned pipe_flags = 0;
if (flags & ST_FLUSH_END_OF_FRAME) {
pipe_flags |= PIPE_FLUSH_END_OF_FRAME;
@@ -468,7 +467,7 @@ st_context_flush(struct st_context_iface *stctxi, unsigned flags,
static boolean
st_context_teximage(struct st_context_iface *stctxi,
enum st_texture_type tex_type,
- int level, enum pipe_format internal_format,
+ int level, enum pipe_format pipe_format,
struct pipe_resource *tex, boolean mipmap)
{
struct st_context *st = (struct st_context *) stctxi;
@@ -512,29 +511,13 @@ st_context_teximage(struct st_context_iface *stctxi,
texImage = _mesa_get_tex_image(ctx, texObj, target, level);
stImage = st_texture_image(texImage);
if (tex) {
- gl_format texFormat;
-
- /*
- * XXX When internal_format and tex->format differ, st_finalize_texture
- * needs to allocate a new texture with internal_format and copy the
- * texture here into the new one. It will result in surface_copy being
- * called on surfaces whose formats differ.
- *
- * To avoid that, internal_format is (wrongly) ignored here. A sane fix
- * is to use a sampler view.
- */
- if (!st_sampler_compat_formats(tex->format, internal_format))
- internal_format = tex->format;
-
- if (util_format_get_component_bits(internal_format,
- UTIL_FORMAT_COLORSPACE_RGB, 3) > 0)
+ gl_format texFormat = st_pipe_format_to_mesa_format(pipe_format);
+
+ if (util_format_has_alpha(tex->format))
internalFormat = GL_RGBA;
else
internalFormat = GL_RGB;
- texFormat = st_ChooseTextureFormat(ctx, target, internalFormat,
- GL_BGRA, GL_UNSIGNED_BYTE);
-
_mesa_init_teximage_fields(ctx, texImage,
tex->width0, tex->height0, 1, 0,
internalFormat, texFormat);
@@ -563,6 +546,7 @@ st_context_teximage(struct st_context_iface *stctxi,
stObj->width0 = width;
stObj->height0 = height;
stObj->depth0 = depth;
+ stObj->surface_format = pipe_format;
_mesa_dirty_texobj(ctx, texObj, GL_TRUE);
_mesa_unlock_texture(ctx, texObj);
@@ -884,16 +868,10 @@ st_manager_add_color_renderbuffer(struct st_context *st,
static const struct st_api st_gl_api = {
"Mesa " PACKAGE_VERSION,
ST_API_OPENGL,
-#if FEATURE_GL
ST_PROFILE_DEFAULT_MASK |
ST_PROFILE_OPENGL_CORE_MASK |
-#endif
-#if FEATURE_ES1
ST_PROFILE_OPENGL_ES1_MASK |
-#endif
-#if FEATURE_ES2
ST_PROFILE_OPENGL_ES2_MASK |
-#endif
0,
ST_API_FEATURE_MS_VISUALS_MASK,
st_api_destroy,
diff --git a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 3831a0a79..dd9f4fc53 100644
--- a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -269,6 +269,8 @@ st_translate_texture_target( GLuint textarget,
}
switch( textarget ) {
+ case TEXTURE_2D_MULTISAMPLE_INDEX: return TGSI_TEXTURE_2D_MSAA;
+ case TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX: return TGSI_TEXTURE_2D_ARRAY_MSAA;
case TEXTURE_BUFFER_INDEX: return TGSI_TEXTURE_BUFFER;
case TEXTURE_1D_INDEX: return TGSI_TEXTURE_1D;
case TEXTURE_2D_INDEX: return TGSI_TEXTURE_2D;
@@ -554,8 +556,6 @@ translate_opcode( unsigned op )
return TGSI_OPCODE_DDY;
case OPCODE_DP2:
return TGSI_OPCODE_DP2;
- case OPCODE_DP2A:
- return TGSI_OPCODE_DP2A;
case OPCODE_DP3:
return TGSI_OPCODE_DP3;
case OPCODE_DP4:
@@ -608,10 +608,6 @@ translate_opcode( unsigned op )
return TGSI_OPCODE_MUL;
case OPCODE_NOP:
return TGSI_OPCODE_NOP;
- case OPCODE_NRM3:
- return TGSI_OPCODE_NRM;
- case OPCODE_NRM4:
- return TGSI_OPCODE_NRM4;
case OPCODE_POW:
return TGSI_OPCODE_POW;
case OPCODE_RCP:
@@ -663,6 +659,7 @@ translate_opcode( unsigned op )
static void
compile_instruction(
+ struct gl_context *ctx,
struct st_translate *t,
const struct prog_instruction *inst,
boolean clamp_dst_color_output)
@@ -695,7 +692,6 @@ compile_instruction(
case OPCODE_CAL:
case OPCODE_ELSE:
case OPCODE_ENDLOOP:
- case OPCODE_IF:
debug_assert(num_dst == 0);
ureg_label_insn( ureg,
translate_opcode( inst->Opcode ),
@@ -703,6 +699,14 @@ compile_instruction(
get_label( t, inst->BranchTarget ));
return;
+ case OPCODE_IF:
+ debug_assert(num_dst == 0);
+ ureg_label_insn( ureg,
+ ctx->Const.NativeIntegers ? TGSI_OPCODE_UIF : TGSI_OPCODE_IF,
+ src, num_src,
+ get_label( t, inst->BranchTarget ));
+ return;
+
case OPCODE_TEX:
case OPCODE_TXB:
case OPCODE_TXD:
@@ -1217,7 +1221,7 @@ st_translate_mesa_program(
}
/* texture samplers */
- for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
+ for (i = 0; i < ctx->Const.FragmentProgram.MaxTextureImageUnits; i++) {
if (program->SamplersUsed & (1 << i)) {
t->samplers[i] = ureg_DECL_sampler( ureg, i );
}
@@ -1227,7 +1231,7 @@ st_translate_mesa_program(
*/
for (i = 0; i < program->NumInstructions; i++) {
set_insn_start( t, ureg_get_instruction_number( ureg ));
- compile_instruction( t, &program->Instructions[i], clamp_color );
+ compile_instruction( ctx, t, &program->Instructions[i], clamp_color );
}
/* Fix up all emitted labels:
diff --git a/mesalib/src/mesa/state_tracker/st_program.c b/mesalib/src/mesa/state_tracker/st_program.c
index 7a38da84f..60cc37cf8 100644
--- a/mesalib/src/mesa/state_tracker/st_program.c
+++ b/mesalib/src/mesa/state_tracker/st_program.c
@@ -33,7 +33,6 @@
#include "main/imports.h"
#include "main/hash.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "program/prog_parameter.h"
#include "program/prog_print.h"
diff --git a/mesalib/src/mesa/state_tracker/st_texture.c b/mesalib/src/mesa/state_tracker/st_texture.c
index ed3709848..9a271826e 100644
--- a/mesalib/src/mesa/state_tracker/st_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_texture.c
@@ -60,6 +60,7 @@ st_texture_create(struct st_context *st,
GLuint height0,
GLuint depth0,
GLuint layers,
+ GLuint nr_samples,
GLuint bind )
{
struct pipe_resource pt, *newtex;
@@ -90,6 +91,7 @@ st_texture_create(struct st_context *st,
pt.usage = PIPE_USAGE_DEFAULT;
pt.bind = bind;
pt.flags = 0;
+ pt.nr_samples = nr_samples;
newtex = screen->resource_create(screen, &pt);
@@ -138,6 +140,8 @@ st_gl_texture_dims_to_pipe_dims(GLenum texture,
case GL_TEXTURE_RECTANGLE:
case GL_PROXY_TEXTURE_RECTANGLE:
case GL_TEXTURE_EXTERNAL_OES:
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
+ case GL_TEXTURE_2D_MULTISAMPLE:
assert(depthIn == 1);
*widthOut = widthIn;
*heightOut = heightIn;
@@ -159,7 +163,9 @@ st_gl_texture_dims_to_pipe_dims(GLenum texture,
*layersOut = 6;
break;
case GL_TEXTURE_2D_ARRAY:
+ case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
case GL_PROXY_TEXTURE_2D_ARRAY:
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY:
*widthOut = widthIn;
*heightOut = heightIn;
*depthOut = 1;
@@ -402,7 +408,7 @@ st_create_color_map_texture(struct gl_context *ctx)
/* create texture for color map/table */
pt = st_texture_create(st, PIPE_TEXTURE_2D, format, 0,
- texSize, texSize, 1, 1, PIPE_BIND_SAMPLER_VIEW);
+ texSize, texSize, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW);
return pt;
}
diff --git a/mesalib/src/mesa/state_tracker/st_texture.h b/mesalib/src/mesa/state_tracker/st_texture.h
index 8a701009a..c15aeaea6 100644
--- a/mesalib/src/mesa/state_tracker/st_texture.h
+++ b/mesalib/src/mesa/state_tracker/st_texture.h
@@ -87,10 +87,16 @@ struct st_texture_object
*/
struct pipe_sampler_view *sampler_view;
- /* True if there is/was a surface bound to this texture object. It helps
- * track whether the texture object is surface based or not.
+ /* True if this texture comes from the window system. Such a texture
+ * cannot be reallocated and the format can only be changed with a sampler
+ * view or a surface.
*/
GLboolean surface_based;
+
+ /* If surface_based is true, this format should be used for all sampler
+ * views and surfaces instead of pt->format.
+ */
+ enum pipe_format surface_format;
};
@@ -153,6 +159,7 @@ st_texture_create(struct st_context *st,
GLuint height0,
GLuint depth0,
GLuint layers,
+ GLuint nr_samples,
GLuint tex_usage );
diff --git a/mesalib/src/mesa/swrast/s_aaline.c b/mesalib/src/mesa/swrast/s_aaline.c
index dcc9e3a5c..6729c53fc 100644
--- a/mesalib/src/mesa/swrast/s_aaline.c
+++ b/mesalib/src/mesa/swrast/s_aaline.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_aaline.h b/mesalib/src/mesa/swrast/s_aaline.h
index 74d5518e1..8ff1d7da3 100644
--- a/mesalib/src/mesa/swrast/s_aaline.h
+++ b/mesalib/src/mesa/swrast/s_aaline.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_aalinetemp.h b/mesalib/src/mesa/swrast/s_aalinetemp.h
index 75e28f417..26efaa3e2 100644
--- a/mesalib/src/mesa/swrast/s_aalinetemp.h
+++ b/mesalib/src/mesa/swrast/s_aalinetemp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_aatriangle.c b/mesalib/src/mesa/swrast/s_aatriangle.c
index b59177fa7..02d49b9bd 100644
--- a/mesalib/src/mesa/swrast/s_aatriangle.c
+++ b/mesalib/src/mesa/swrast/s_aatriangle.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_aatriangle.h b/mesalib/src/mesa/swrast/s_aatriangle.h
index e40efb198..b5df414d9 100644
--- a/mesalib/src/mesa/swrast/s_aatriangle.h
+++ b/mesalib/src/mesa/swrast/s_aatriangle.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_aatritemp.h b/mesalib/src/mesa/swrast/s_aatritemp.h
index 4581248fd..a400364d3 100644
--- a/mesalib/src/mesa/swrast/s_aatritemp.h
+++ b/mesalib/src/mesa/swrast/s_aatritemp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_alpha.c b/mesalib/src/mesa/swrast/s_alpha.c
index 1ceda531c..3f12552fd 100644
--- a/mesalib/src/mesa/swrast/s_alpha.c
+++ b/mesalib/src/mesa/swrast/s_alpha.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/swrast/s_alpha.h b/mesalib/src/mesa/swrast/s_alpha.h
index fca209a44..6c8728daa 100644
--- a/mesalib/src/mesa/swrast/s_alpha.h
+++ b/mesalib/src/mesa/swrast/s_alpha.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_bitmap.c b/mesalib/src/mesa/swrast/s_bitmap.c
index 3a2792913..6d397da86 100644
--- a/mesalib/src/mesa/swrast/s_bitmap.c
+++ b/mesalib/src/mesa/swrast/s_bitmap.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/swrast/s_blend.c b/mesalib/src/mesa/swrast/s_blend.c
index 54fffbb45..4423d5b17 100644
--- a/mesalib/src/mesa/swrast/s_blend.c
+++ b/mesalib/src/mesa/swrast/s_blend.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_blend.h b/mesalib/src/mesa/swrast/s_blend.h
index 69cd89e7a..32f921352 100644
--- a/mesalib/src/mesa/swrast/s_blend.h
+++ b/mesalib/src/mesa/swrast/s_blend.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_blit.c b/mesalib/src/mesa/swrast/s_blit.c
index 051354dc8..0c8cfe551 100644
--- a/mesalib/src/mesa/swrast/s_blit.c
+++ b/mesalib/src/mesa/swrast/s_blit.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -188,6 +189,12 @@ blit_nearest(struct gl_context *ctx,
return;
}
+ /* allocate the src/dst row buffers */
+ srcBuffer = malloc(MAX_PIXEL_BYTES * srcWidth);
+ dstBuffer = malloc(MAX_PIXEL_BYTES * dstWidth);
+ if (!srcBuffer || !dstBuffer)
+ goto fail_no_memory;
+
/* Blit to all the draw buffers */
for (i = 0; i < numDrawBuffers; i++) {
if (buffer == GL_COLOR_BUFFER_BIT) {
@@ -229,7 +236,7 @@ blit_nearest(struct gl_context *ctx,
default:
_mesa_problem(ctx, "unexpected pixel size (%d) in blit_nearest",
pixelSize);
- return;
+ goto fail;
}
if ((readRb == drawRb) ||
@@ -248,8 +255,7 @@ blit_nearest(struct gl_context *ctx,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&map, &rowStride);
if (!map) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
srcMap = map + srcYpos * rowStride + srcXpos * formatSize;
@@ -276,8 +282,7 @@ blit_nearest(struct gl_context *ctx,
srcWidth, srcHeight,
GL_MAP_READ_BIT, &srcMap, &srcRowStride);
if (!srcMap) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
ctx->Driver.MapRenderbuffer(ctx, drawRb,
dstXpos, dstYpos,
@@ -285,24 +290,10 @@ blit_nearest(struct gl_context *ctx,
GL_MAP_WRITE_BIT, &dstMap, &dstRowStride);
if (!dstMap) {
ctx->Driver.UnmapRenderbuffer(ctx, readRb);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
}
- /* allocate the src/dst row buffers */
- srcBuffer = malloc(pixelSize * srcWidth);
- if (!srcBuffer) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBufferEXT");
- return;
- }
- dstBuffer = malloc(pixelSize * dstWidth);
- if (!dstBuffer) {
- free(srcBuffer);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBufferEXT");
- return;
- }
-
for (dstRow = 0; dstRow < dstHeight; dstRow++) {
GLfloat srcRowF = (dstRow + 0.5F) / dstHeight * srcHeight - 0.5F;
GLint srcRow = IROUND(srcRowF);
@@ -369,14 +360,21 @@ blit_nearest(struct gl_context *ctx,
}
}
- free(srcBuffer);
- free(dstBuffer);
-
ctx->Driver.UnmapRenderbuffer(ctx, readRb);
if (drawRb != readRb) {
ctx->Driver.UnmapRenderbuffer(ctx, drawRb);
}
}
+
+fail:
+ free(srcBuffer);
+ free(dstBuffer);
+ return;
+
+fail_no_memory:
+ free(srcBuffer);
+ free(dstBuffer);
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBuffer");
}
@@ -564,22 +562,10 @@ blit_linear(struct gl_context *ctx,
* Keep two adjacent src rows around for bilinear sampling.
*/
srcBuffer0 = malloc(pixelSize * srcWidth);
- if (!srcBuffer0) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBufferEXT");
- return;
- }
srcBuffer1 = malloc(pixelSize * srcWidth);
- if (!srcBuffer1) {
- free(srcBuffer0);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBufferEXT");
- return;
- }
dstBuffer = malloc(pixelSize * dstWidth);
- if (!dstBuffer) {
- free(srcBuffer0);
- free(srcBuffer1);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFrameBufferEXT");
- return;
+ if (!srcBuffer0 || !srcBuffer1 || !dstBuffer) {
+ goto fail_no_memory;
}
for (i = 0; i < drawFb->_NumColorDrawBuffers; i++) {
@@ -610,11 +596,7 @@ blit_linear(struct gl_context *ctx,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&srcMap, &srcRowStride);
if (!srcMap) {
- free(srcBuffer0);
- free(srcBuffer1);
- free(dstBuffer);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
dstMap = srcMap;
@@ -629,22 +611,14 @@ blit_linear(struct gl_context *ctx,
0, 0, readRb->Width, readRb->Height,
GL_MAP_READ_BIT, &srcMap, &srcRowStride);
if (!srcMap) {
- free(srcBuffer0);
- free(srcBuffer1);
- free(dstBuffer);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
ctx->Driver.MapRenderbuffer(ctx, drawRb,
0, 0, drawRb->Width, drawRb->Height,
GL_MAP_WRITE_BIT, &dstMap, &dstRowStride);
if (!dstMap) {
ctx->Driver.UnmapRenderbuffer(ctx, readRb);
- free(srcBuffer0);
- free(srcBuffer1);
- free(dstBuffer);
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
- return;
+ goto fail_no_memory;
}
}
@@ -734,15 +708,22 @@ blit_linear(struct gl_context *ctx,
}
}
- free(srcBuffer0);
- free(srcBuffer1);
- free(dstBuffer);
-
ctx->Driver.UnmapRenderbuffer(ctx, readRb);
if (drawRb != readRb) {
ctx->Driver.UnmapRenderbuffer(ctx, drawRb);
}
}
+
+ free(srcBuffer0);
+ free(srcBuffer1);
+ free(dstBuffer);
+ return;
+
+fail_no_memory:
+ free(srcBuffer0);
+ free(srcBuffer1);
+ free(dstBuffer);
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBlitFramebuffer");
}
diff --git a/mesalib/src/mesa/swrast/s_chan.h b/mesalib/src/mesa/swrast/s_chan.h
index 1db7fae4d..38daf6575 100644
--- a/mesalib/src/mesa/swrast/s_chan.h
+++ b/mesalib/src/mesa/swrast/s_chan.h
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/swrast/s_clear.c b/mesalib/src/mesa/swrast/s_clear.c
index d942e6e63..58b36e8a2 100644
--- a/mesalib/src/mesa/swrast/s_clear.c
+++ b/mesalib/src/mesa/swrast/s_clear.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "main/glheader.h"
diff --git a/mesalib/src/mesa/swrast/s_context.c b/mesalib/src/mesa/swrast/s_context.c
index 11e906436..70bbb83dc 100644
--- a/mesalib/src/mesa/swrast/s_context.c
+++ b/mesalib/src/mesa/swrast/s_context.c
@@ -17,13 +17,13 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Brian Paul
+ * Keith Whitwell <keith@tungstengraphics.com> Brian Paul
*/
#include "main/imports.h"
@@ -459,7 +459,7 @@ _swrast_invalidate_state( struct gl_context *ctx, GLbitfield new_state )
swrast->BlendFunc = _swrast_validate_blend_func;
if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC)
- for (i = 0 ; i < ctx->Const.MaxTextureImageUnits ; i++)
+ for (i = 0 ; i < ARRAY_SIZE(swrast->TextureSample); i++)
swrast->TextureSample[i] = NULL;
}
@@ -473,7 +473,7 @@ _swrast_update_texture_samplers(struct gl_context *ctx)
if (!swrast)
return; /* pipe hack */
- for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {
+ for (u = 0; u < ARRAY_SIZE(swrast->TextureSample); u++) {
struct gl_texture_object *tObj = ctx->Texture.Unit[u]._Current;
/* Note: If tObj is NULL, the sample function will be a simple
* function that just returns opaque black (0,0,0,1).
@@ -766,7 +766,7 @@ _swrast_CreateContext( struct gl_context *ctx )
swrast->Driver.SpanRenderStart = _swrast_span_render_start;
swrast->Driver.SpanRenderFinish = _swrast_span_render_finish;
- for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
+ for (i = 0; i < ARRAY_SIZE(swrast->TextureSample); i++)
swrast->TextureSample[i] = NULL;
/* SpanArrays is global and shared by all SWspan instances. However, when
diff --git a/mesalib/src/mesa/swrast/s_context.h b/mesalib/src/mesa/swrast/s_context.h
index 2f7a2b531..9520185b2 100644
--- a/mesalib/src/mesa/swrast/s_context.h
+++ b/mesalib/src/mesa/swrast/s_context.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -137,11 +138,24 @@ struct swrast_texture_image
/** used for mipmap LOD computation */
GLfloat WidthScale, HeightScale, DepthScale;
- /** These fields only valid when texture memory is mapped */
- GLint RowStride; /**< Padded width in units of texels */
- GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to
- each 2D slice in 'Data', in texels */
- GLubyte *Map; /**< Pointer to mapped image memory */
+ /**
+ * Byte stride between rows in ImageSlices.
+ *
+ * For compressed textures, this is the byte stride between one row of
+ * blocks and the next row of blocks.
+ *
+ * Only valid while one of the ImageSlices is mapped, and must be the same
+ * between all slices.
+ */
+ GLint RowStride;
+ /**
+ * When a texture image is mapped for swrast, this array contains pointers
+ * to the beginning of each slice.
+ *
+ * For swrast-allocated textures, these pointers will always stay
+ * initialized to point within Buffer.
+ */
+ void **ImageSlices;
/** Malloc'd texture memory */
GLubyte *Buffer;
@@ -299,7 +313,7 @@ typedef struct
/** Internal hooks, kept up to date by the same mechanism as above.
*/
blend_func BlendFunc;
- texture_sample_func TextureSample[MAX_TEXTURE_IMAGE_UNITS];
+ texture_sample_func TextureSample[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
/** Buffer for saving the sampled texture colors.
* Needed for GL_ARB_texture_env_crossbar implementation.
@@ -379,6 +393,9 @@ _swrast_map_textures(struct gl_context *ctx);
extern void
_swrast_unmap_textures(struct gl_context *ctx);
+extern unsigned int
+_swrast_teximage_slice_height(struct gl_texture_image *texImage);
+
extern void
_swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj);
diff --git a/mesalib/src/mesa/swrast/s_copypix.c b/mesalib/src/mesa/swrast/s_copypix.c
index 1d8926179..57bdce0d2 100644
--- a/mesalib/src/mesa/swrast/s_copypix.c
+++ b/mesalib/src/mesa/swrast/s_copypix.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_depth.c b/mesalib/src/mesa/swrast/s_depth.c
index 969b75f07..4d2a6bd36 100644
--- a/mesalib/src/mesa/swrast/s_depth.c
+++ b/mesalib/src/mesa/swrast/s_depth.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_depth.h b/mesalib/src/mesa/swrast/s_depth.h
index 25a7a0bbf..987c7af2b 100644
--- a/mesalib/src/mesa/swrast/s_depth.h
+++ b/mesalib/src/mesa/swrast/s_depth.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_drawpix.c b/mesalib/src/mesa/swrast/s_drawpix.c
index 3d23f912f..41b50ab71 100644
--- a/mesalib/src/mesa/swrast/s_drawpix.c
+++ b/mesalib/src/mesa/swrast/s_drawpix.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_feedback.c b/mesalib/src/mesa/swrast/s_feedback.c
index 00467e54f..67d84753e 100644
--- a/mesalib/src/mesa/swrast/s_feedback.c
+++ b/mesalib/src/mesa/swrast/s_feedback.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "main/glheader.h"
diff --git a/mesalib/src/mesa/swrast/s_feedback.h b/mesalib/src/mesa/swrast/s_feedback.h
index 6bfd49735..62b9a38d6 100644
--- a/mesalib/src/mesa/swrast/s_feedback.h
+++ b/mesalib/src/mesa/swrast/s_feedback.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_fog.c b/mesalib/src/mesa/swrast/s_fog.c
index 57a6a8e61..1a2ef1d50 100644
--- a/mesalib/src/mesa/swrast/s_fog.c
+++ b/mesalib/src/mesa/swrast/s_fog.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_fog.h b/mesalib/src/mesa/swrast/s_fog.h
index 9f93b7050..d4d31e4f5 100644
--- a/mesalib/src/mesa/swrast/s_fog.h
+++ b/mesalib/src/mesa/swrast/s_fog.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_fragprog.c b/mesalib/src/mesa/swrast/s_fragprog.c
index 1ce2ee452..e7e1b8582 100644
--- a/mesalib/src/mesa/swrast/s_fragprog.c
+++ b/mesalib/src/mesa/swrast/s_fragprog.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "main/glheader.h"
diff --git a/mesalib/src/mesa/swrast/s_fragprog.h b/mesalib/src/mesa/swrast/s_fragprog.h
index ac1f5ff4c..0522c6c7f 100644
--- a/mesalib/src/mesa/swrast/s_fragprog.h
+++ b/mesalib/src/mesa/swrast/s_fragprog.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_lines.c b/mesalib/src/mesa/swrast/s_lines.c
index 7364dd965..72c41369b 100644
--- a/mesalib/src/mesa/swrast/s_lines.c
+++ b/mesalib/src/mesa/swrast/s_lines.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_lines.h b/mesalib/src/mesa/swrast/s_lines.h
index a4c98a855..3d4453eb8 100644
--- a/mesalib/src/mesa/swrast/s_lines.h
+++ b/mesalib/src/mesa/swrast/s_lines.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_linetemp.h b/mesalib/src/mesa/swrast/s_linetemp.h
index 8feb8b120..f3ce6d95e 100644
--- a/mesalib/src/mesa/swrast/s_linetemp.h
+++ b/mesalib/src/mesa/swrast/s_linetemp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_logic.c b/mesalib/src/mesa/swrast/s_logic.c
index 93388d720..a111f6337 100644
--- a/mesalib/src/mesa/swrast/s_logic.c
+++ b/mesalib/src/mesa/swrast/s_logic.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_logic.h b/mesalib/src/mesa/swrast/s_logic.h
index 0a3adfca5..b5e11fbf8 100644
--- a/mesalib/src/mesa/swrast/s_logic.h
+++ b/mesalib/src/mesa/swrast/s_logic.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_masking.c b/mesalib/src/mesa/swrast/s_masking.c
index 8f5344650..d9d06b45b 100644
--- a/mesalib/src/mesa/swrast/s_masking.c
+++ b/mesalib/src/mesa/swrast/s_masking.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_masking.h b/mesalib/src/mesa/swrast/s_masking.h
index 5124509a0..0aa0755d1 100644
--- a/mesalib/src/mesa/swrast/s_masking.h
+++ b/mesalib/src/mesa/swrast/s_masking.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_points.c b/mesalib/src/mesa/swrast/s_points.c
index 80693be8e..7483a7716 100644
--- a/mesalib/src/mesa/swrast/s_points.c
+++ b/mesalib/src/mesa/swrast/s_points.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_points.h b/mesalib/src/mesa/swrast/s_points.h
index 0b6550e80..e356f063b 100644
--- a/mesalib/src/mesa/swrast/s_points.h
+++ b/mesalib/src/mesa/swrast/s_points.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_renderbuffer.c b/mesalib/src/mesa/swrast/s_renderbuffer.c
index 282b2c482..54b645e78 100644
--- a/mesalib/src/mesa/swrast/s_renderbuffer.c
+++ b/mesalib/src/mesa/swrast/s_renderbuffer.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_renderbuffer.h b/mesalib/src/mesa/swrast/s_renderbuffer.h
index 266ebd934..45c57fffd 100644
--- a/mesalib/src/mesa/swrast/s_renderbuffer.h
+++ b/mesalib/src/mesa/swrast/s_renderbuffer.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_span.c b/mesalib/src/mesa/swrast/s_span.c
index 7bb3b1f2b..cb755f9eb 100644
--- a/mesalib/src/mesa/swrast/s_span.c
+++ b/mesalib/src/mesa/swrast/s_span.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_span.h b/mesalib/src/mesa/swrast/s_span.h
index 6f710c533..0a5a6dc6c 100644
--- a/mesalib/src/mesa/swrast/s_span.h
+++ b/mesalib/src/mesa/swrast/s_span.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_stencil.c b/mesalib/src/mesa/swrast/s_stencil.c
index 3423737ee..a63a773cf 100644
--- a/mesalib/src/mesa/swrast/s_stencil.c
+++ b/mesalib/src/mesa/swrast/s_stencil.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -28,6 +29,8 @@
#include "main/imports.h"
#include "main/format_pack.h"
#include "main/format_unpack.h"
+#include "main/core.h"
+#include "main/stencil.h"
#include "s_context.h"
#include "s_depth.h"
@@ -128,7 +131,7 @@ apply_stencil_op(const struct gl_context *ctx, GLenum oper, GLuint face,
GLuint n, GLubyte stencil[], const GLubyte mask[],
GLint stride)
{
- const GLubyte ref = ctx->Stencil.Ref[face];
+ const GLubyte ref = _mesa_get_stencil_ref(ctx, face);
const GLubyte wrtmask = ctx->Stencil.WriteMask[face];
const GLubyte invmask = (GLubyte) (~wrtmask);
GLuint i, j;
@@ -215,7 +218,7 @@ do_stencil_test(struct gl_context *ctx, GLuint face, GLuint n,
GLboolean allfail = GL_FALSE;
GLuint i, j;
const GLuint valueMask = ctx->Stencil.ValueMask[face];
- const GLubyte ref = (GLubyte) (ctx->Stencil.Ref[face] & valueMask);
+ const GLubyte ref = (GLubyte) (_mesa_get_stencil_ref(ctx, face) & valueMask);
GLubyte s;
/*
diff --git a/mesalib/src/mesa/swrast/s_stencil.h b/mesalib/src/mesa/swrast/s_stencil.h
index 113649a37..c92f0af3e 100644
--- a/mesalib/src/mesa/swrast/s_stencil.h
+++ b/mesalib/src/mesa/swrast/s_stencil.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_texcombine.c b/mesalib/src/mesa/swrast/s_texcombine.c
index c24807cb7..df3a74a06 100644
--- a/mesalib/src/mesa/swrast/s_texcombine.c
+++ b/mesalib/src/mesa/swrast/s_texcombine.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -611,7 +612,7 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
* thread.
*/
swrast->TexelBuffer =
- malloc(ctx->Const.MaxTextureImageUnits * maxThreads *
+ malloc(ctx->Const.FragmentProgram.MaxTextureImageUnits * maxThreads *
SWRAST_MAX_WIDTH * 4 * sizeof(GLfloat));
if (!swrast->TexelBuffer) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "texture_combine");
diff --git a/mesalib/src/mesa/swrast/s_texcombine.h b/mesalib/src/mesa/swrast/s_texcombine.h
index 11049d86b..dd9151de2 100644
--- a/mesalib/src/mesa/swrast/s_texcombine.h
+++ b/mesalib/src/mesa/swrast/s_texcombine.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_texfetch.c b/mesalib/src/mesa/swrast/s_texfetch.c
index 5e1a9f783..f6c269d8b 100644
--- a/mesalib/src/mesa/swrast/s_texfetch.c
+++ b/mesalib/src/mesa/swrast/s_texfetch.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -97,10 +98,17 @@ static void
fetch_compressed(const struct swrast_texture_image *swImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
- swImage->FetchCompressedTexel(swImage->Map,
- swImage->ImageOffsets,
- swImage->RowStride,
- i, j, k, texel);
+ /* The FetchCompressedTexel function takes an integer pixel rowstride,
+ * while the image's rowstride is bytes per row of blocks.
+ */
+ GLuint bw, bh;
+ GLuint texelBytes = _mesa_get_format_bytes(swImage->Base.TexFormat);
+ _mesa_get_format_block_size(swImage->Base.TexFormat, &bw, &bh);
+ assert(swImage->RowStride * bw % texelBytes == 0);
+
+ swImage->FetchCompressedTexel(swImage->ImageSlices[k],
+ swImage->RowStride * bw / texelBytes,
+ i, j, texel);
}
diff --git a/mesalib/src/mesa/swrast/s_texfetch.h b/mesalib/src/mesa/swrast/s_texfetch.h
index 4e4397e13..dd37b066c 100644
--- a/mesalib/src/mesa/swrast/s_texfetch.h
+++ b/mesalib/src/mesa/swrast/s_texfetch.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_texfetch_tmp.h b/mesalib/src/mesa/swrast/s_texfetch_tmp.h
index 2de1f1a97..44fa8170b 100644
--- a/mesalib/src/mesa/swrast/s_texfetch_tmp.h
+++ b/mesalib/src/mesa/swrast/s_texfetch_tmp.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -43,23 +44,24 @@
#if DIM == 1
#define TEXEL_ADDR( type, image, i, j, k, size ) \
- ((void) (j), (void) (k), ((type *)(image)->Map + (i) * (size)))
+ ((void) (j), (void) (k), ((type *)(image)->ImageSlices[0] + (i) * (size)))
#define FETCH(x) fetch_texel_1d_##x
#elif DIM == 2
#define TEXEL_ADDR( type, image, i, j, k, size ) \
- ((void) (k), \
- ((type *)(image)->Map + ((image)->RowStride * (j) + (i)) * (size)))
+ ((void) (k), \
+ ((type *)((GLubyte *) (image)->ImageSlices[0] + (image)->RowStride * (j)) + \
+ (i) * (size)))
#define FETCH(x) fetch_texel_2d_##x
#elif DIM == 3
#define TEXEL_ADDR( type, image, i, j, k, size ) \
- ((type *)(image)->Map + ((image)->ImageOffsets[k] \
- + (image)->RowStride * (j) + (i)) * (size))
+ ((type *)((GLubyte *) (image)->ImageSlices[k] + \
+ (image)->RowStride * (j)) + (i) * (size))
#define FETCH(x) fetch_texel_3d_##x
diff --git a/mesalib/src/mesa/swrast/s_texfilter.c b/mesalib/src/mesa/swrast/s_texfilter.c
index ae3ffe5f4..fba8e6cba 100644
--- a/mesalib/src/mesa/swrast/s_texfilter.c
+++ b/mesalib/src/mesa/swrast/s_texfilter.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -1435,7 +1436,7 @@ opt_sample_rgb_2d(struct gl_context *ctx,
GLint i = IFLOOR(texcoords[k][0] * width) & colMask;
GLint j = IFLOOR(texcoords[k][1] * height) & rowMask;
GLint pos = (j << shift) | i;
- GLubyte *texel = swImg->Map + 3 * pos;
+ GLubyte *texel = (GLubyte *) swImg->ImageSlices[0] + 3 * pos;
rgba[k][RCOMP] = UBYTE_TO_FLOAT(texel[2]);
rgba[k][GCOMP] = UBYTE_TO_FLOAT(texel[1]);
rgba[k][BCOMP] = UBYTE_TO_FLOAT(texel[0]);
@@ -1480,7 +1481,7 @@ opt_sample_rgba_2d(struct gl_context *ctx,
const GLint col = IFLOOR(texcoords[i][0] * width) & colMask;
const GLint row = IFLOOR(texcoords[i][1] * height) & rowMask;
const GLint pos = (row << shift) | col;
- const GLuint texel = *((GLuint *) swImg->Map + pos);
+ const GLuint texel = *((GLuint *) swImg->ImageSlices[0] + pos);
rgba[i][RCOMP] = UBYTE_TO_FLOAT( (texel >> 24) );
rgba[i][GCOMP] = UBYTE_TO_FLOAT( (texel >> 16) & 0xff );
rgba[i][BCOMP] = UBYTE_TO_FLOAT( (texel >> 8) & 0xff );
@@ -1504,7 +1505,9 @@ sample_lambda_2d(struct gl_context *ctx,
const GLboolean repeatNoBorderPOT = (samp->WrapS == GL_REPEAT)
&& (samp->WrapT == GL_REPEAT)
- && (tImg->Border == 0 && (tImg->Width == swImg->RowStride))
+ && (tImg->Border == 0)
+ && (_mesa_format_row_stride(tImg->TexFormat, tImg->Width) ==
+ swImg->RowStride)
&& swImg->_IsPowerOfTwo;
ASSERT(lambda != NULL);
diff --git a/mesalib/src/mesa/swrast/s_texfilter.h b/mesalib/src/mesa/swrast/s_texfilter.h
index 58b57365c..7bfa045a7 100644
--- a/mesalib/src/mesa/swrast/s_texfilter.h
+++ b/mesalib/src/mesa/swrast/s_texfilter.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_texrender.c b/mesalib/src/mesa/swrast/s_texrender.c
index 7b25a7b7d..751d7767b 100644
--- a/mesalib/src/mesa/swrast/s_texrender.c
+++ b/mesalib/src/mesa/swrast/s_texrender.c
@@ -22,37 +22,6 @@ delete_texture_wrapper(struct gl_context *ctx, struct gl_renderbuffer *rb)
free(rb);
}
-
-/**
- * This function creates a renderbuffer object which wraps a texture image.
- * The new renderbuffer is plugged into the given attachment point.
- * This allows rendering into the texture as if it were a renderbuffer.
- */
-static void
-wrap_texture(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
-{
- struct gl_renderbuffer *rb;
- const GLuint name = 0;
-
- ASSERT(att->Type == GL_TEXTURE);
- ASSERT(att->Renderbuffer == NULL);
-
- rb = ctx->Driver.NewRenderbuffer(ctx, name);
- if (!rb) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "wrap_texture");
- return;
- }
-
- /* init base gl_renderbuffer fields */
- _mesa_init_renderbuffer(rb, name);
- /* plug in our texture_renderbuffer-specific functions */
- rb->Delete = delete_texture_wrapper;
- rb->AllocStorage = NULL; /* illegal! */
-
- /* update attachment point */
- _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
-}
-
/**
* Update the renderbuffer wrapper for rendering to a texture.
* For example, update the width, height of the RB based on the texture size,
@@ -69,7 +38,7 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
(void) ctx;
- swImage = swrast_texture_image(_mesa_get_attachment_teximage(att));
+ swImage = swrast_texture_image(rb->TexImage);
assert(swImage);
format = swImage->Base.TexFormat;
@@ -81,25 +50,10 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
zOffset = att->Zoffset;
}
- rb->Width = swImage->Base.Width;
- rb->Height = swImage->Base.Height;
- rb->InternalFormat = swImage->Base.InternalFormat;
- rb->_BaseFormat = _mesa_get_format_base_format(format);
-
/* Want to store linear values, not sRGB */
rb->Format = _mesa_get_srgb_format_linear(format);
-
- /* Set the gl_renderbuffer::Buffer field so that mapping the buffer
- * succeeds.
- */
- if (att->Texture->Target == GL_TEXTURE_3D ||
- att->Texture->Target == GL_TEXTURE_2D_ARRAY_EXT) {
- srb->Buffer = swImage->Buffer +
- swImage->ImageOffsets[zOffset] * _mesa_get_format_bytes(format);
- }
- else {
- srb->Buffer = swImage->Buffer;
- }
+
+ srb->Buffer = swImage->ImageSlices[zOffset];
}
@@ -126,23 +80,24 @@ _swrast_render_texture(struct gl_context *ctx,
struct gl_framebuffer *fb,
struct gl_renderbuffer_attachment *att)
{
+ struct gl_renderbuffer *rb = att->Renderbuffer;
(void) fb;
- if (!att->Renderbuffer) {
- wrap_texture(ctx, att);
- }
+ /* plug in our texture_renderbuffer-specific functions */
+ rb->Delete = delete_texture_wrapper;
+
update_wrapper(ctx, att);
}
void
_swrast_finish_render_texture(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att)
+ struct gl_renderbuffer *rb)
{
/* do nothing */
/* The renderbuffer texture wrapper will get deleted by the
* normal mechanism for deleting renderbuffers.
*/
(void) ctx;
- (void) att;
+ (void) rb;
}
diff --git a/mesalib/src/mesa/swrast/s_texture.c b/mesalib/src/mesa/swrast/s_texture.c
index 8ae3d5bd0..27803c553 100644
--- a/mesalib/src/mesa/swrast/s_texture.c
+++ b/mesalib/src/mesa/swrast/s_texture.c
@@ -16,9 +16,10 @@
* 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 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.
+ * 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.
*/
/**
@@ -58,6 +59,26 @@ _swrast_delete_texture_image(struct gl_context *ctx,
_mesa_delete_texture_image(ctx, texImage);
}
+static unsigned int
+texture_slices(struct gl_texture_image *texImage)
+{
+ if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
+ return texImage->Height;
+ else
+ return texImage->Depth;
+}
+
+unsigned int
+_swrast_teximage_slice_height(struct gl_texture_image *texImage)
+{
+ /* For 1D array textures, the slices are all 1 pixel high, and Height is
+ * the number of slices.
+ */
+ if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
+ return 1;
+ else
+ return texImage->Height;
+}
/**
* Called via ctx->Driver.AllocTextureImageBuffer()
@@ -67,31 +88,28 @@ _swrast_alloc_texture_image_buffer(struct gl_context *ctx,
struct gl_texture_image *texImage)
{
struct swrast_texture_image *swImg = swrast_texture_image(texImage);
- GLuint bytes = _mesa_format_image_size(texImage->TexFormat, texImage->Width,
- texImage->Height, texImage->Depth);
+ GLuint bytesPerSlice;
+ GLuint slices = texture_slices(texImage);
GLuint i;
- assert(!swImg->Buffer);
- swImg->Buffer = _mesa_align_malloc(bytes, 512);
- if (!swImg->Buffer)
+ if (!_swrast_init_texture_image(texImage))
return GL_FALSE;
- /* RowStride and ImageOffsets[] describe how to address texels in 'Data' */
- swImg->RowStride = texImage->Width;
+ bytesPerSlice = _mesa_format_image_size(texImage->TexFormat, texImage->Width,
+ _swrast_teximage_slice_height(texImage), 1);
- /* Allocate the ImageOffsets array and initialize to typical values.
- * We allocate the array for 1D/2D textures too in order to avoid special-
- * case code in the texstore routines.
- */
- swImg->ImageOffsets = malloc(texImage->Depth * sizeof(GLuint));
- if (!swImg->ImageOffsets)
+ assert(!swImg->Buffer);
+ swImg->Buffer = _mesa_align_malloc(bytesPerSlice * slices, 512);
+ if (!swImg->Buffer)
return GL_FALSE;
- for (i = 0; i < texImage->Depth; i++) {
- swImg->ImageOffsets[i] = i * texImage->Width * texImage->Height;
- }
+ /* RowStride and ImageSlices[] describe how to address texels in 'Data' */
+ swImg->RowStride = _mesa_format_row_stride(texImage->TexFormat,
+ texImage->Width);
- _swrast_init_texture_image(texImage);
+ for (i = 0; i < slices; i++) {
+ swImg->ImageSlices[i] = swImg->Buffer + bytesPerSlice * i;
+ }
return GL_TRUE;
}
@@ -100,11 +118,11 @@ _swrast_alloc_texture_image_buffer(struct gl_context *ctx,
/**
* Code that overrides ctx->Driver.AllocTextureImageBuffer may use this to
* initialize the fields of swrast_texture_image without allocating the image
- * buffer or initializing ImageOffsets or RowStride.
+ * buffer or initializing RowStride or the contents of ImageSlices.
*
* Returns GL_TRUE on success, GL_FALSE on memory allocation failure.
*/
-void
+GLboolean
_swrast_init_texture_image(struct gl_texture_image *texImage)
{
struct swrast_texture_image *swImg = swrast_texture_image(texImage);
@@ -128,6 +146,13 @@ _swrast_init_texture_image(struct gl_texture_image *texImage)
swImg->HeightScale = (GLfloat) texImage->Height;
swImg->DepthScale = (GLfloat) texImage->Depth;
}
+
+ assert(!swImg->ImageSlices);
+ swImg->ImageSlices = calloc(texture_slices(texImage), sizeof(void *));
+ if (!swImg->ImageSlices)
+ return GL_FALSE;
+
+ return GL_TRUE;
}
@@ -144,8 +169,8 @@ _swrast_free_texture_image_buffer(struct gl_context *ctx,
swImage->Buffer = NULL;
}
- free(swImage->ImageOffsets);
- swImage->ImageOffsets = NULL;
+ free(swImage->ImageSlices);
+ swImage->ImageSlices = NULL;
}
@@ -206,25 +231,15 @@ _swrast_map_teximage(struct gl_context *ctx,
*mapOut = NULL;
return;
}
-
- map = swImage->Buffer;
-
- if (texImage->TexObject->Target == GL_TEXTURE_3D ||
- texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
- GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
- texImage->Width,
- texImage->Height,
- 1);
- assert(slice < texImage->Depth);
- map += slice * sliceSize;
- } else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
- GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
- texImage->Width,
- 1,
- 1);
- assert(slice < texImage->Height);
- map += slice * sliceSize;
- }
+
+ /* This function can only be used with a swrast-allocated buffer, in which
+ * case ImageSlices is populated with pointers into Buffer.
+ */
+ assert(swImage->Buffer);
+ assert(swImage->Buffer == swImage->ImageSlices[0]);
+
+ assert(slice < texture_slices(texImage));
+ map = swImage->ImageSlices[slice];
/* apply x/y offset to map address */
map += stride * (y / bh) + texelSize * (x / bw);
@@ -251,12 +266,42 @@ _swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
for (face = 0; face < faces; face++) {
for (level = texObj->BaseLevel; level < MAX_TEXTURE_LEVELS; level++) {
struct gl_texture_image *texImage = texObj->Image[face][level];
- if (texImage) {
- struct swrast_texture_image *swImage =
- swrast_texture_image(texImage);
+ struct swrast_texture_image *swImage = swrast_texture_image(texImage);
+ unsigned int i;
+
+ if (!texImage)
+ continue;
+
+ /* In the case of a swrast-allocated texture buffer, the ImageSlices
+ * and RowStride are always available.
+ */
+ if (swImage->Buffer) {
+ assert(swImage->ImageSlices[0] == swImage->Buffer);
+ continue;
+ }
- /* XXX we'll eventually call _swrast_map_teximage() here */
- swImage->Map = swImage->Buffer;
+ for (i = 0; i < texture_slices(texImage); i++) {
+ GLubyte *map;
+ GLint rowStride;
+
+ if (swImage->ImageSlices[i])
+ continue;
+
+ ctx->Driver.MapTextureImage(ctx, texImage, i,
+ 0, 0,
+ texImage->Width, texImage->Height,
+ GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
+ &map, &rowStride);
+
+ swImage->ImageSlices[i] = map;
+ /* A swrast-using driver has to return the same rowstride for
+ * every slice of the same texture, since we don't track them
+ * separately.
+ */
+ if (i == 0)
+ swImage->RowStride = rowStride;
+ else
+ assert(swImage->RowStride == rowStride);
}
}
}
@@ -272,12 +317,20 @@ _swrast_unmap_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
for (face = 0; face < faces; face++) {
for (level = texObj->BaseLevel; level < MAX_TEXTURE_LEVELS; level++) {
struct gl_texture_image *texImage = texObj->Image[face][level];
- if (texImage) {
- struct swrast_texture_image *swImage
- = swrast_texture_image(texImage);
+ struct swrast_texture_image *swImage = swrast_texture_image(texImage);
+ unsigned int i;
+
+ if (!texImage)
+ continue;
- /* XXX we'll eventually call _swrast_unmap_teximage() here */
- swImage->Map = NULL;
+ if (swImage->Buffer)
+ return;
+
+ for (i = 0; i < texture_slices(texImage); i++) {
+ if (swImage->ImageSlices[i]) {
+ ctx->Driver.UnmapTextureImage(ctx, texImage, i);
+ swImage->ImageSlices[i] = NULL;
+ }
}
}
}
@@ -322,30 +375,3 @@ _swrast_unmap_textures(struct gl_context *ctx)
enabledUnits &= ~(1 << unit);
}
}
-
-
-/**
- * Called via ctx->Driver.AllocTextureStorage()
- * Just have to allocate memory for the texture images.
- */
-GLboolean
-_swrast_AllocTextureStorage(struct gl_context *ctx,
- struct gl_texture_object *texObj,
- GLsizei levels, GLsizei width,
- GLsizei height, GLsizei depth)
-{
- const GLint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
- GLint face, level;
-
- for (face = 0; face < numFaces; face++) {
- for (level = 0; level < levels; level++) {
- struct gl_texture_image *texImage = texObj->Image[face][level];
- if (!_swrast_alloc_texture_image_buffer(ctx, texImage)) {
- return GL_FALSE;
- }
- }
- }
-
- return GL_TRUE;
-}
-
diff --git a/mesalib/src/mesa/swrast/s_triangle.c b/mesalib/src/mesa/swrast/s_triangle.c
index f0b1d383d..ffe99832b 100644
--- a/mesalib/src/mesa/swrast/s_triangle.c
+++ b/mesalib/src/mesa/swrast/s_triangle.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -133,7 +134,7 @@ _swrast_culltriangle( struct gl_context *ctx,
const GLfloat twidth = (GLfloat) texImg->Width; \
const GLfloat theight = (GLfloat) texImg->Height; \
const GLint twidth_log2 = texImg->WidthLog2; \
- const GLubyte *texture = (const GLubyte *) swImg->Map; \
+ const GLubyte *texture = (const GLubyte *) swImg->ImageSlices[0]; \
const GLint smask = texImg->Width - 1; \
const GLint tmask = texImg->Height - 1; \
ASSERT(texImg->TexFormat == MESA_FORMAT_RGB888); \
@@ -191,7 +192,7 @@ _swrast_culltriangle( struct gl_context *ctx,
const GLfloat twidth = (GLfloat) texImg->Width; \
const GLfloat theight = (GLfloat) texImg->Height; \
const GLint twidth_log2 = texImg->WidthLog2; \
- const GLubyte *texture = (const GLubyte *) swImg->Map; \
+ const GLubyte *texture = (const GLubyte *) swImg->ImageSlices[0]; \
const GLint smask = texImg->Width - 1; \
const GLint tmask = texImg->Height - 1; \
ASSERT(texImg->TexFormat == MESA_FORMAT_RGB888); \
@@ -547,7 +548,7 @@ affine_span(struct gl_context *ctx, SWspan *span,
swrast_texture_image_const(texImg); \
const GLfloat twidth = (GLfloat) texImg->Width; \
const GLfloat theight = (GLfloat) texImg->Height; \
- info.texture = (const GLchan *) swImg->Map; \
+ info.texture = (const GLchan *) swImg->ImageSlices[0]; \
info.twidth_log2 = texImg->WidthLog2; \
info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \
@@ -814,7 +815,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span,
obj->Image[0][obj->BaseLevel]; \
const struct swrast_texture_image *swImg = \
swrast_texture_image_const(texImg); \
- info.texture = (const GLchan *) swImg->Map; \
+ info.texture = (const GLchan *) swImg->ImageSlices[0]; \
info.twidth_log2 = texImg->WidthLog2; \
info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \
@@ -1078,7 +1079,8 @@ _swrast_choose_triangle( struct gl_context *ctx )
&& texObj2D->_Swizzle == SWIZZLE_NOOP
&& swImg->_IsPowerOfTwo
&& texImg->Border == 0
- && texImg->Width == swImg->RowStride
+ && (_mesa_format_row_stride(format, texImg->Width) ==
+ swImg->RowStride)
&& (format == MESA_FORMAT_RGB888 || format == MESA_FORMAT_RGBA8888)
&& minFilter == magFilter
&& ctx->Light.Model.ColorControl == GL_SINGLE_COLOR
diff --git a/mesalib/src/mesa/swrast/s_triangle.h b/mesalib/src/mesa/swrast/s_triangle.h
index 46e23d420..c0cbb3927 100644
--- a/mesalib/src/mesa/swrast/s_triangle.h
+++ b/mesalib/src/mesa/swrast/s_triangle.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/swrast/s_tritemp.h b/mesalib/src/mesa/swrast/s_tritemp.h
index 797afc41a..f96ddd45b 100644
--- a/mesalib/src/mesa/swrast/s_tritemp.h
+++ b/mesalib/src/mesa/swrast/s_tritemp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/swrast/s_zoom.c b/mesalib/src/mesa/swrast/s_zoom.c
index 3b309a251..01276f4e9 100644
--- a/mesalib/src/mesa/swrast/s_zoom.c
+++ b/mesalib/src/mesa/swrast/s_zoom.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#include "main/glheader.h"
diff --git a/mesalib/src/mesa/swrast/s_zoom.h b/mesalib/src/mesa/swrast/s_zoom.h
index 1955e7e88..a1441e81e 100644
--- a/mesalib/src/mesa/swrast/s_zoom.h
+++ b/mesalib/src/mesa/swrast/s_zoom.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifndef S_ZOOM_H
diff --git a/mesalib/src/mesa/swrast/swrast.h b/mesalib/src/mesa/swrast/swrast.h
index 82555ae6a..359a985fd 100644
--- a/mesalib/src/mesa/swrast/swrast.h
+++ b/mesalib/src/mesa/swrast/swrast.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
*/
@@ -217,7 +218,7 @@ extern GLboolean
_swrast_alloc_texture_image_buffer(struct gl_context *ctx,
struct gl_texture_image *texImage);
-extern void
+extern GLboolean
_swrast_init_texture_image(struct gl_texture_image *texImage);
extern void
@@ -269,15 +270,7 @@ _swrast_render_texture(struct gl_context *ctx,
extern void
_swrast_finish_render_texture(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att);
-
-
-
-extern GLboolean
-_swrast_AllocTextureStorage(struct gl_context *ctx,
- struct gl_texture_object *texObj,
- GLsizei levels, GLsizei width,
- GLsizei height, GLsizei depth);
+ struct gl_renderbuffer *rb);
/**
diff --git a/mesalib/src/mesa/swrast_setup/ss_context.c b/mesalib/src/mesa/swrast_setup/ss_context.c
index 5847a7682..0c40683a5 100644
--- a/mesalib/src/mesa/swrast_setup/ss_context.c
+++ b/mesalib/src/mesa/swrast_setup/ss_context.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/ss_context.h b/mesalib/src/mesa/swrast_setup/ss_context.h
index ecc1f5fd6..29de33232 100644
--- a/mesalib/src/mesa/swrast_setup/ss_context.h
+++ b/mesalib/src/mesa/swrast_setup/ss_context.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/ss_triangle.c b/mesalib/src/mesa/swrast_setup/ss_triangle.c
index 5f4a997ee..c8378fc8b 100644
--- a/mesalib/src/mesa/swrast_setup/ss_triangle.c
+++ b/mesalib/src/mesa/swrast_setup/ss_triangle.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/ss_triangle.h b/mesalib/src/mesa/swrast_setup/ss_triangle.h
index a027f4826..2fcc6d4dc 100644
--- a/mesalib/src/mesa/swrast_setup/ss_triangle.h
+++ b/mesalib/src/mesa/swrast_setup/ss_triangle.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/ss_tritmp.h b/mesalib/src/mesa/swrast_setup/ss_tritmp.h
index 11742067f..a44fb24f2 100644
--- a/mesalib/src/mesa/swrast_setup/ss_tritmp.h
+++ b/mesalib/src/mesa/swrast_setup/ss_tritmp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/ss_vb.h b/mesalib/src/mesa/swrast_setup/ss_vb.h
index 05e665b5c..72c077b92 100644
--- a/mesalib/src/mesa/swrast_setup/ss_vb.h
+++ b/mesalib/src/mesa/swrast_setup/ss_vb.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/swrast_setup/swrast_setup.h b/mesalib/src/mesa/swrast_setup/swrast_setup.h
index 1d87ec108..e453e56ae 100644
--- a/mesalib/src/mesa/swrast_setup/swrast_setup.h
+++ b/mesalib/src/mesa/swrast_setup/swrast_setup.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_context.c b/mesalib/src/mesa/tnl/t_context.c
index ed31b9c45..77f1c1bce 100644
--- a/mesalib/src/mesa/tnl/t_context.c
+++ b/mesalib/src/mesa/tnl/t_context.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_context.h b/mesalib/src/mesa/tnl/t_context.h
index c9ff1246d..4ebc31261 100644
--- a/mesalib/src/mesa/tnl/t_context.h
+++ b/mesalib/src/mesa/tnl/t_context.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/tnl/t_draw.c b/mesalib/src/mesa/tnl/t_draw.c
index 0631eb183..08cd1d1ea 100644
--- a/mesalib/src/mesa/tnl/t_draw.c
+++ b/mesalib/src/mesa/tnl/t_draw.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_pipeline.c b/mesalib/src/mesa/tnl/t_pipeline.c
index 806d9ca6e..7f09af7f1 100644
--- a/mesalib/src/mesa/tnl/t_pipeline.c
+++ b/mesalib/src/mesa/tnl/t_pipeline.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_pipeline.h b/mesalib/src/mesa/tnl/t_pipeline.h
index 0eb03395c..35cd0afe3 100644
--- a/mesalib/src/mesa/tnl/t_pipeline.h
+++ b/mesalib/src/mesa/tnl/t_pipeline.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_rasterpos.c b/mesalib/src/mesa/tnl/t_rasterpos.c
index 1673b81ef..269a7162e 100644
--- a/mesalib/src/mesa/tnl/t_rasterpos.c
+++ b/mesalib/src/mesa/tnl/t_rasterpos.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/tnl/t_vb_cliptmp.h b/mesalib/src/mesa/tnl/t_vb_cliptmp.h
index 0b45bc534..4dc3320c6 100644
--- a/mesalib/src/mesa/tnl/t_vb_cliptmp.h
+++ b/mesalib/src/mesa/tnl/t_vb_cliptmp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_fog.c b/mesalib/src/mesa/tnl/t_vb_fog.c
index 134cae1c7..c011ae785 100644
--- a/mesalib/src/mesa/tnl/t_vb_fog.c
+++ b/mesalib/src/mesa/tnl/t_vb_fog.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_light.c b/mesalib/src/mesa/tnl/t_vb_light.c
index 39ba49685..133894853 100644
--- a/mesalib/src/mesa/tnl/t_vb_light.c
+++ b/mesalib/src/mesa/tnl/t_vb_light.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/tnl/t_vb_lighttmp.h b/mesalib/src/mesa/tnl/t_vb_lighttmp.h
index 1944e5ddc..5679640c9 100644
--- a/mesalib/src/mesa/tnl/t_vb_lighttmp.h
+++ b/mesalib/src/mesa/tnl/t_vb_lighttmp.h
@@ -17,14 +17,14 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
*
* Authors:
- * Brian Paul
- * Keith Whitwell <keith@tungstengraphics.com>
+ * Brian Paul Keith Whitwell <keith@tungstengraphics.com>
*/
diff --git a/mesalib/src/mesa/tnl/t_vb_normals.c b/mesalib/src/mesa/tnl/t_vb_normals.c
index c19b48e51..519c90d8e 100644
--- a/mesalib/src/mesa/tnl/t_vb_normals.c
+++ b/mesalib/src/mesa/tnl/t_vb_normals.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_points.c b/mesalib/src/mesa/tnl/t_vb_points.c
index 0e33b691e..932194d75 100644
--- a/mesalib/src/mesa/tnl/t_vb_points.c
+++ b/mesalib/src/mesa/tnl/t_vb_points.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Brian Paul
diff --git a/mesalib/src/mesa/tnl/t_vb_program.c b/mesalib/src/mesa/tnl/t_vb_program.c
index 452285f6b..5ade54343 100644
--- a/mesalib/src/mesa/tnl/t_vb_program.c
+++ b/mesalib/src/mesa/tnl/t_vb_program.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
@@ -259,7 +260,7 @@ map_textures(struct gl_context *ctx, const struct gl_vertex_program *vp)
{
GLuint u;
- for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
+ for (u = 0; u < ctx->Const.VertexProgram.MaxTextureImageUnits; u++) {
if (vp->Base.TexturesUsed[u]) {
/* Note: _Current *should* correspond to the target indicated
* in TexturesUsed[u].
@@ -278,7 +279,7 @@ unmap_textures(struct gl_context *ctx, const struct gl_vertex_program *vp)
{
GLuint u;
- for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
+ for (u = 0; u < ctx->Const.VertexProgram.MaxTextureImageUnits; u++) {
if (vp->Base.TexturesUsed[u]) {
/* Note: _Current *should* correspond to the target indicated
* in TexturesUsed[u].
diff --git a/mesalib/src/mesa/tnl/t_vb_render.c b/mesalib/src/mesa/tnl/t_vb_render.c
index cb3192132..4d42bcd3e 100644
--- a/mesalib/src/mesa/tnl/t_vb_render.c
+++ b/mesalib/src/mesa/tnl/t_vb_render.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_rendertmp.h b/mesalib/src/mesa/tnl/t_vb_rendertmp.h
index 4ed485a7b..1c6470cea 100644
--- a/mesalib/src/mesa/tnl/t_vb_rendertmp.h
+++ b/mesalib/src/mesa/tnl/t_vb_rendertmp.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_texgen.c b/mesalib/src/mesa/tnl/t_vb_texgen.c
index 8ba67f3c0..881710858 100644
--- a/mesalib/src/mesa/tnl/t_vb_texgen.c
+++ b/mesalib/src/mesa/tnl/t_vb_texgen.c
@@ -17,13 +17,13 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
- * Brian Paul
- * Keith Whitwell <keith@tungstengraphics.com>
+ * Brian Paul Keith Whitwell <keith@tungstengraphics.com>
*/
/*
diff --git a/mesalib/src/mesa/tnl/t_vb_texmat.c b/mesalib/src/mesa/tnl/t_vb_texmat.c
index 91bb0f797..f3e317b33 100644
--- a/mesalib/src/mesa/tnl/t_vb_texmat.c
+++ b/mesalib/src/mesa/tnl/t_vb_texmat.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vb_vertex.c b/mesalib/src/mesa/tnl/t_vb_vertex.c
index 8f296f54b..4cb8c06b2 100644
--- a/mesalib/src/mesa/tnl/t_vb_vertex.c
+++ b/mesalib/src/mesa/tnl/t_vb_vertex.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/tnl/t_vertex.c b/mesalib/src/mesa/tnl/t_vertex.c
index ce3e32165..c7a745ed7 100644
--- a/mesalib/src/mesa/tnl/t_vertex.c
+++ b/mesalib/src/mesa/tnl/t_vertex.c
@@ -156,9 +156,11 @@ static void choose_interp_func( struct gl_context *ctx,
GLboolean force_boundary )
{
struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
+ GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+ ctx->Polygon.BackMode != GL_FILL);
+ GLboolean twosided = ctx->Light.Enabled && ctx->Light.Model.TwoSide;
- if (vtx->need_extras &&
- (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+ if (vtx->need_extras && (twosided || unfilled)) {
vtx->interp = _tnl_generic_interp_extras;
} else {
vtx->interp = _tnl_generic_interp;
@@ -171,9 +173,12 @@ static void choose_interp_func( struct gl_context *ctx,
static void choose_copy_pv_func( struct gl_context *ctx, GLuint edst, GLuint esrc )
{
struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
+ GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+ ctx->Polygon.BackMode != GL_FILL);
- if (vtx->need_extras &&
- (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+ GLboolean twosided = ctx->Light.Enabled && ctx->Light.Model.TwoSide;
+
+ if (vtx->need_extras && (twosided || unfilled)) {
vtx->copy_pv = _tnl_generic_copy_pv_extras;
} else {
vtx->copy_pv = _tnl_generic_copy_pv;
diff --git a/mesalib/src/mesa/tnl/tnl.h b/mesalib/src/mesa/tnl/tnl.h
index 958322887..d67a3a71d 100644
--- a/mesalib/src/mesa/tnl/tnl.h
+++ b/mesalib/src/mesa/tnl/tnl.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo.h b/mesalib/src/mesa/vbo/vbo.h
index 49dab2314..08c67d67d 100644
--- a/mesalib/src/mesa/vbo/vbo.h
+++ b/mesalib/src/mesa/vbo/vbo.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -32,6 +33,7 @@
#ifndef _VBO_H
#define _VBO_H
+#include <stdbool.h>
#include "main/glheader.h"
struct gl_client_array;
@@ -72,6 +74,15 @@ void _vbo_DestroyContext( struct gl_context *ctx );
void _vbo_InvalidateState( struct gl_context *ctx, GLuint new_state );
+void
+vbo_initialize_exec_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec);
+
+void
+vbo_initialize_save_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec);
+
+
typedef void (*vbo_draw_func)( struct gl_context *ctx,
const struct _mesa_prim *prims,
GLuint nr_prims,
@@ -160,6 +171,15 @@ vbo_count_tessellated_primitives(GLenum mode, GLuint count,
GLuint num_instances);
void
+vbo_try_prim_conversion(struct _mesa_prim *p);
+
+bool
+vbo_can_merge_prims(const struct _mesa_prim *p0, const struct _mesa_prim *p1);
+
+void
+vbo_merge_prims(struct _mesa_prim *p0, const struct _mesa_prim *p1);
+
+void
vbo_sw_primitive_restart(struct gl_context *ctx,
const struct _mesa_prim *prim,
GLuint nr_prims,
diff --git a/mesalib/src/mesa/vbo/vbo_context.c b/mesalib/src/mesa/vbo/vbo_context.c
index 7eda31e8f..4c3c9c090 100644
--- a/mesalib/src/mesa/vbo/vbo_context.c
+++ b/mesalib/src/mesa/vbo/vbo_context.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo_context.h b/mesalib/src/mesa/vbo/vbo_context.h
index 1ff6ec000..ced742033 100644
--- a/mesalib/src/mesa/vbo/vbo_context.h
+++ b/mesalib/src/mesa/vbo/vbo_context.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
@@ -51,7 +52,6 @@
#ifndef _VBO_CONTEXT_H
#define _VBO_CONTEXT_H
-#include "main/mfeatures.h"
#include "vbo.h"
#include "vbo_attrib.h"
#include "vbo_exec.h"
diff --git a/mesalib/src/mesa/vbo/vbo_exec.c b/mesalib/src/mesa/vbo/vbo_exec.c
index 5827f90c3..c56a14212 100644
--- a/mesalib/src/mesa/vbo/vbo_exec.c
+++ b/mesalib/src/mesa/vbo/vbo_exec.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
@@ -47,7 +48,6 @@ void vbo_exec_init( struct gl_context *ctx )
return;
vbo_exec_vtx_init( exec );
- vbo_exec_array_init( exec );
ctx->Driver.NeedFlush = 0;
ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
@@ -68,7 +68,6 @@ void vbo_exec_destroy( struct gl_context *ctx )
}
vbo_exec_vtx_destroy( exec );
- vbo_exec_array_destroy( exec );
}
@@ -79,10 +78,26 @@ void vbo_exec_destroy( struct gl_context *ctx )
*/
void vbo_exec_invalidate_state( struct gl_context *ctx, GLuint new_state )
{
- struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
+ struct vbo_context *vbo = vbo_context(ctx);
+ struct vbo_exec_context *exec = &vbo->exec;
- if (new_state & (_NEW_PROGRAM|_NEW_ARRAY)) {
+ if (!exec->validating && new_state & (_NEW_PROGRAM|_NEW_ARRAY)) {
exec->array.recalculate_inputs = GL_TRUE;
+
+ /* If we ended up here because a VAO was deleted, the _DrawArrays
+ * pointer which pointed to the VAO might be invalid now, so set it
+ * to NULL. This prevents crashes in driver functions like Clear
+ * where driver state validation might occur, but the vbo module is
+ * still in an invalid state.
+ *
+ * Drivers should skip vertex array state validation if _DrawArrays
+ * is NULL. It also has no effect on performance, because attrib
+ * bindings will be recalculated anyway.
+ */
+ if (vbo->last_draw_method == DRAW_ARRAYS) {
+ ctx->Array._DrawArrays = NULL;
+ vbo->last_draw_method = DRAW_NONE;
+ }
}
if (new_state & _NEW_EVAL)
@@ -142,3 +157,102 @@ vbo_count_tessellated_primitives(GLenum mode, GLuint count,
}
return num_primitives * num_instances;
}
+
+
+
+/**
+ * In some degenarate cases we can improve our ability to merge
+ * consecutive primitives. For example:
+ * glBegin(GL_LINE_STRIP);
+ * glVertex(1);
+ * glVertex(1);
+ * glEnd();
+ * glBegin(GL_LINE_STRIP);
+ * glVertex(1);
+ * glVertex(1);
+ * glEnd();
+ * Can be merged as a GL_LINES prim with four vertices.
+ *
+ * This function converts 2-vertex line strips/loops into GL_LINES, etc.
+ */
+void
+vbo_try_prim_conversion(struct _mesa_prim *p)
+{
+ if (p->mode == GL_LINE_STRIP && p->count == 2) {
+ /* convert 2-vertex line strip to a separate line */
+ p->mode = GL_LINES;
+ }
+ else if ((p->mode == GL_TRIANGLE_STRIP || p->mode == GL_TRIANGLE_FAN)
+ && p->count == 3) {
+ /* convert 3-vertex tri strip or fan to a separate triangle */
+ p->mode = GL_TRIANGLES;
+ }
+
+ /* Note: we can't convert a 4-vertex quad strip to a separate quad
+ * because the vertex ordering is different. We'd have to muck
+ * around in the vertex data to make it work.
+ */
+}
+
+
+/**
+ * Helper function for determining if two subsequent glBegin/glEnd
+ * primitives can be combined. This is only possible for GL_POINTS,
+ * GL_LINES, GL_TRIANGLES and GL_QUADS.
+ * If we return true, it means that we can concatenate p1 onto p0 (and
+ * discard p1).
+ */
+bool
+vbo_can_merge_prims(const struct _mesa_prim *p0, const struct _mesa_prim *p1)
+{
+ if (!p0->begin ||
+ !p1->begin ||
+ !p0->end ||
+ !p1->end)
+ return false;
+
+ /* The prim mode must match (ex: both GL_TRIANGLES) */
+ if (p0->mode != p1->mode)
+ return false;
+
+ /* p1's vertices must come right after p0 */
+ if (p0->start + p0->count != p1->start)
+ return false;
+
+ if (p0->basevertex != p1->basevertex ||
+ p0->num_instances != p1->num_instances ||
+ p0->base_instance != p1->base_instance)
+ return false;
+
+ /* can always merge subsequent GL_POINTS primitives */
+ if (p0->mode == GL_POINTS)
+ return true;
+
+ /* independent lines with no extra vertices */
+ if (p0->mode == GL_LINES && p0->count % 2 == 0 && p1->count % 2 == 0)
+ return true;
+
+ /* independent tris */
+ if (p0->mode == GL_TRIANGLES && p0->count % 3 == 0 && p1->count % 3 == 0)
+ return true;
+
+ /* independent quads */
+ if (p0->mode == GL_QUADS && p0->count % 4 == 0 && p1->count % 4 == 0)
+ return true;
+
+ return false;
+}
+
+
+/**
+ * If we've determined that p0 and p1 can be merged, this function
+ * concatenates p1 onto p0.
+ */
+void
+vbo_merge_prims(struct _mesa_prim *p0, const struct _mesa_prim *p1)
+{
+ assert(vbo_can_merge_prims(p0, p1));
+
+ p0->count += p1->count;
+ p0->end = p1->end;
+}
diff --git a/mesalib/src/mesa/vbo/vbo_exec.h b/mesalib/src/mesa/vbo/vbo_exec.h
index 96cf4c82b..01e2856f2 100644
--- a/mesalib/src/mesa/vbo/vbo_exec.h
+++ b/mesalib/src/mesa/vbo/vbo_exec.h
@@ -34,7 +34,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __VBO_EXEC_H__
#define __VBO_EXEC_H__
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "vbo.h"
#include "vbo_attrib.h"
@@ -82,6 +81,7 @@ struct vbo_exec_context
struct gl_context *ctx;
GLvertexformat vtxfmt;
GLvertexformat vtxfmt_noop;
+ GLboolean validating; /**< if we're in the middle of state validation */
struct {
struct gl_buffer_object *bufferobj;
@@ -152,9 +152,6 @@ void vbo_exec_FlushVertices( struct gl_context *ctx, GLuint flags );
/* Internal functions:
*/
-void vbo_exec_array_init( struct vbo_exec_context *exec );
-void vbo_exec_array_destroy( struct vbo_exec_context *exec );
-
void vbo_exec_vtx_init( struct vbo_exec_context *exec );
void vbo_exec_vtx_destroy( struct vbo_exec_context *exec );
diff --git a/mesalib/src/mesa/vbo/vbo_exec_api.c b/mesalib/src/mesa/vbo/vbo_exec_api.c
index 353f8cfde..600398c58 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_api.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_api.c
@@ -34,7 +34,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "main/bufferobj.h"
#include "main/context.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/vtxfmt.h"
#include "main/dlist.h"
#include "main/eval.h"
@@ -75,7 +74,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec )
GLuint last_begin = exec->vtx.prim[exec->vtx.prim_count-1].begin;
GLuint last_count;
- if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+ if (_mesa_inside_begin_end(exec->ctx)) {
GLint i = exec->vtx.prim_count - 1;
assert(i >= 0);
exec->vtx.prim[i].count = (exec->vtx.vert_count -
@@ -97,7 +96,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec )
*/
assert(exec->vtx.prim_count == 0);
- if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+ if (_mesa_inside_begin_end(exec->ctx)) {
exec->vtx.prim[0].mode = exec->ctx->Driver.CurrentExecPrimitive;
exec->vtx.prim[0].start = 0;
exec->vtx.prim[0].count = 0;
@@ -270,7 +269,7 @@ vbo_exec_wrap_upgrade_vertex(struct vbo_exec_context *exec,
/* Heuristic: Attempt to isolate attributes received outside
* begin/end so that they don't bloat the vertices.
*/
- if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END &&
+ if (!_mesa_inside_begin_end(ctx) &&
!oldSize && lastcount > 8 && exec->vtx.vertex_size) {
vbo_exec_copy_to_current( exec );
reset_attrfv( exec );
@@ -655,132 +654,6 @@ static void GLAPIENTRY vbo_exec_EvalPoint2( GLint i, GLint j )
}
-static void GLAPIENTRY
-vbo_exec_EvalMesh1(GLenum mode, GLint i1, GLint i2)
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint i;
- GLfloat u, du;
- GLenum prim;
-
- switch (mode) {
- case GL_POINT:
- prim = GL_POINTS;
- break;
- case GL_LINE:
- prim = GL_LINE_STRIP;
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh1(mode)" );
- return;
- }
-
- /* No effect if vertex maps disabled.
- */
- if (!ctx->Eval.Map1Vertex4 &&
- !ctx->Eval.Map1Vertex3)
- return;
-
- du = ctx->Eval.MapGrid1du;
- u = ctx->Eval.MapGrid1u1 + i1 * du;
-
- CALL_Begin(GET_DISPATCH(), (prim));
- for (i=i1;i<=i2;i++,u+=du) {
- CALL_EvalCoord1f(GET_DISPATCH(), (u));
- }
- CALL_End(GET_DISPATCH(), ());
-}
-
-
-static void GLAPIENTRY
-vbo_exec_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
-{
- GET_CURRENT_CONTEXT(ctx);
- GLfloat u, du, v, dv, v1, u1;
- GLint i, j;
-
- switch (mode) {
- case GL_POINT:
- case GL_LINE:
- case GL_FILL:
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh2(mode)" );
- return;
- }
-
- /* No effect if vertex maps disabled.
- */
- if (!ctx->Eval.Map2Vertex4 &&
- !ctx->Eval.Map2Vertex3)
- return;
-
- du = ctx->Eval.MapGrid2du;
- dv = ctx->Eval.MapGrid2dv;
- v1 = ctx->Eval.MapGrid2v1 + j1 * dv;
- u1 = ctx->Eval.MapGrid2u1 + i1 * du;
-
- switch (mode) {
- case GL_POINT:
- CALL_Begin(GET_DISPATCH(), (GL_POINTS));
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
- }
- }
- CALL_End(GET_DISPATCH(), ());
- break;
- case GL_LINE:
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
- }
- CALL_End(GET_DISPATCH(), ());
- }
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
- }
- CALL_End(GET_DISPATCH(), ());
- }
- break;
- case GL_FILL:
- for (v=v1,j=j1;j<j2;j++,v+=dv) {
- CALL_Begin(GET_DISPATCH(), (GL_TRIANGLE_STRIP));
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
- CALL_EvalCoord2f(GET_DISPATCH(), (u, v+dv));
- }
- CALL_End(GET_DISPATCH(), ());
- }
- break;
- }
-}
-
-
-/**
- * Execute a glRectf() function. This is not suitable for GL_COMPILE
- * modes (as the test for outside begin/end is not compiled),
- * but may be useful for drivers in circumstances which exclude
- * display list interactions.
- *
- * (None of the functions in this file are suitable for GL_COMPILE
- * modes).
- */
-static void GLAPIENTRY
-vbo_exec_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
-{
- CALL_Begin(GET_DISPATCH(), (GL_QUADS));
- CALL_Vertex2f(GET_DISPATCH(), (x1, y1));
- CALL_Vertex2f(GET_DISPATCH(), (x2, y1));
- CALL_Vertex2f(GET_DISPATCH(), (x2, y2));
- CALL_Vertex2f(GET_DISPATCH(), (x1, y2));
- CALL_End(GET_DISPATCH(), ());
-}
-
-
/**
* Called via glBegin.
*/
@@ -790,7 +663,7 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode )
struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
int i;
- if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+ if (_mesa_inside_begin_end(ctx)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glBegin");
return;
}
@@ -846,6 +719,34 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode )
/**
+ * Try to merge / concatenate the two most recent VBO primitives.
+ */
+static void
+try_vbo_merge(struct vbo_exec_context *exec)
+{
+ struct _mesa_prim *cur = &exec->vtx.prim[exec->vtx.prim_count - 1];
+
+ assert(exec->vtx.prim_count >= 1);
+
+ vbo_try_prim_conversion(cur);
+
+ if (exec->vtx.prim_count >= 2) {
+ struct _mesa_prim *prev = &exec->vtx.prim[exec->vtx.prim_count - 2];
+ assert(prev == cur - 1);
+
+ if (vbo_can_merge_prims(prev, cur)) {
+ assert(cur->begin);
+ assert(cur->end);
+ assert(prev->begin);
+ assert(prev->end);
+ vbo_merge_prims(prev, cur);
+ exec->vtx.prim_count--; /* drop the last primitive */
+ }
+ }
+}
+
+
+/**
* Called via glEnd.
*/
static void GLAPIENTRY vbo_exec_End( void )
@@ -853,7 +754,7 @@ static void GLAPIENTRY vbo_exec_End( void )
GET_CURRENT_CONTEXT( ctx );
struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
- if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) {
+ if (!_mesa_inside_begin_end(ctx)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glEnd");
return;
}
@@ -871,6 +772,8 @@ static void GLAPIENTRY vbo_exec_End( void )
exec->vtx.prim[i].end = 1;
exec->vtx.prim[i].count = idx - exec->vtx.prim[i].start;
+
+ try_vbo_merge(exec);
}
ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
@@ -911,16 +814,21 @@ static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )
struct gl_context *ctx = exec->ctx;
GLvertexformat *vfmt = &exec->vtxfmt;
- _MESA_INIT_ARRAYELT_VTXFMT(vfmt, _ae_);
+ vfmt->ArrayElement = _ae_ArrayElement;
vfmt->Begin = vbo_exec_Begin;
vfmt->End = vbo_exec_End;
vfmt->PrimitiveRestartNV = vbo_exec_PrimitiveRestartNV;
- _MESA_INIT_DLIST_VTXFMT(vfmt, _mesa_);
- _MESA_INIT_EVAL_VTXFMT(vfmt, vbo_exec_);
+ vfmt->CallList = _mesa_CallList;
+ vfmt->CallLists = _mesa_CallLists;
- vfmt->Rectf = vbo_exec_Rectf;
+ vfmt->EvalCoord1f = vbo_exec_EvalCoord1f;
+ vfmt->EvalCoord1fv = vbo_exec_EvalCoord1fv;
+ vfmt->EvalCoord2f = vbo_exec_EvalCoord2f;
+ vfmt->EvalCoord2fv = vbo_exec_EvalCoord2fv;
+ vfmt->EvalPoint1 = vbo_exec_EvalPoint1;
+ vfmt->EvalPoint2 = vbo_exec_EvalPoint2;
/* from attrib_tmp.h:
*/
@@ -1243,7 +1151,7 @@ void vbo_exec_FlushVertices( struct gl_context *ctx, GLuint flags )
assert(exec->flush_call_depth == 1);
#endif
- if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+ if (_mesa_inside_begin_end(ctx)) {
/* We've had glBegin but not glEnd! */
#ifdef DEBUG
exec->flush_call_depth--;
diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c
index 7e61f7b31..9dadd0421 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_array.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_array.c
@@ -30,6 +30,7 @@
#include "main/context.h"
#include "main/state.h"
#include "main/api_validate.h"
+#include "main/dispatch.h"
#include "main/varray.h"
#include "main/bufferobj.h"
#include "main/enums.h"
@@ -91,7 +92,7 @@ vbo_get_minmax_index(struct gl_context *ctx,
const GLuint count)
{
const GLboolean restart = ctx->Array._PrimitiveRestart;
- const GLuint restartIndex = ctx->Array._RestartIndex;
+ const GLuint restartIndex = _mesa_primitive_restart_index(ctx, ib->type);
const int index_size = vbo_sizeof_ib_type(ib->type);
const char *indices;
GLuint i;
@@ -501,6 +502,7 @@ vbo_bind_arrays(struct gl_context *ctx)
if (exec->array.recalculate_inputs) {
recalculate_input_bindings(ctx);
+ exec->array.recalculate_inputs = GL_FALSE;
/* Again... because we may have changed the bitmask of per-vertex varying
* attributes. If we regenerate the fixed-function vertex program now
@@ -508,10 +510,13 @@ vbo_bind_arrays(struct gl_context *ctx)
* need in the shader.
*/
if (ctx->NewState) {
+ /* Setting "validating" to TRUE prevents _mesa_update_state from
+ * invalidating what we just did.
+ */
+ exec->validating = GL_TRUE;
_mesa_update_state(ctx);
+ exec->validating = GL_FALSE;
}
-
- exec->array.recalculate_inputs = GL_FALSE;
}
}
@@ -572,10 +577,10 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
prim[0].base_instance = baseInstance;
/* Implement the primitive restart index */
- if (ctx->Array._PrimitiveRestart && ctx->Array._RestartIndex < count) {
+ if (ctx->Array.PrimitiveRestart && ctx->Array.RestartIndex < count) {
GLuint primCount = 0;
- if (ctx->Array._RestartIndex == start) {
+ if (ctx->Array.RestartIndex == start) {
/* special case: RestartIndex at beginning */
if (count > 1) {
prim[0].start = start + 1;
@@ -583,7 +588,7 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
primCount = 1;
}
}
- else if (ctx->Array._RestartIndex == start + count - 1) {
+ else if (ctx->Array.RestartIndex == start + count - 1) {
/* special case: RestartIndex at end */
if (count > 1) {
prim[0].start = start;
@@ -594,10 +599,10 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
else {
/* general case: RestartIndex in middle, split into two prims */
prim[0].start = start;
- prim[0].count = ctx->Array._RestartIndex - start;
+ prim[0].count = ctx->Array.RestartIndex - start;
prim[1] = prim[0];
- prim[1].start = ctx->Array._RestartIndex + 1;
+ prim[1].start = ctx->Array.RestartIndex + 1;
prim[1].count = count - prim[1].start;
primCount = 2;
@@ -627,6 +632,128 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
}
+/**
+ * Execute a glRectf() function.
+ */
+static void GLAPIENTRY
+vbo_exec_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ CALL_Begin(GET_DISPATCH(), (GL_QUADS));
+ CALL_Vertex2f(GET_DISPATCH(), (x1, y1));
+ CALL_Vertex2f(GET_DISPATCH(), (x2, y1));
+ CALL_Vertex2f(GET_DISPATCH(), (x2, y2));
+ CALL_Vertex2f(GET_DISPATCH(), (x1, y2));
+ CALL_End(GET_DISPATCH(), ());
+}
+
+
+static void GLAPIENTRY
+vbo_exec_EvalMesh1(GLenum mode, GLint i1, GLint i2)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLint i;
+ GLfloat u, du;
+ GLenum prim;
+
+ switch (mode) {
+ case GL_POINT:
+ prim = GL_POINTS;
+ break;
+ case GL_LINE:
+ prim = GL_LINE_STRIP;
+ break;
+ default:
+ _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh1(mode)" );
+ return;
+ }
+
+ /* No effect if vertex maps disabled.
+ */
+ if (!ctx->Eval.Map1Vertex4 &&
+ !ctx->Eval.Map1Vertex3)
+ return;
+
+ du = ctx->Eval.MapGrid1du;
+ u = ctx->Eval.MapGrid1u1 + i1 * du;
+
+ CALL_Begin(GET_DISPATCH(), (prim));
+ for (i=i1;i<=i2;i++,u+=du) {
+ CALL_EvalCoord1f(GET_DISPATCH(), (u));
+ }
+ CALL_End(GET_DISPATCH(), ());
+}
+
+
+static void GLAPIENTRY
+vbo_exec_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLfloat u, du, v, dv, v1, u1;
+ GLint i, j;
+
+ switch (mode) {
+ case GL_POINT:
+ case GL_LINE:
+ case GL_FILL:
+ break;
+ default:
+ _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh2(mode)" );
+ return;
+ }
+
+ /* No effect if vertex maps disabled.
+ */
+ if (!ctx->Eval.Map2Vertex4 &&
+ !ctx->Eval.Map2Vertex3)
+ return;
+
+ du = ctx->Eval.MapGrid2du;
+ dv = ctx->Eval.MapGrid2dv;
+ v1 = ctx->Eval.MapGrid2v1 + j1 * dv;
+ u1 = ctx->Eval.MapGrid2u1 + i1 * du;
+
+ switch (mode) {
+ case GL_POINT:
+ CALL_Begin(GET_DISPATCH(), (GL_POINTS));
+ for (v=v1,j=j1;j<=j2;j++,v+=dv) {
+ for (u=u1,i=i1;i<=i2;i++,u+=du) {
+ CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
+ }
+ }
+ CALL_End(GET_DISPATCH(), ());
+ break;
+ case GL_LINE:
+ for (v=v1,j=j1;j<=j2;j++,v+=dv) {
+ CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
+ for (u=u1,i=i1;i<=i2;i++,u+=du) {
+ CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
+ }
+ CALL_End(GET_DISPATCH(), ());
+ }
+ for (u=u1,i=i1;i<=i2;i++,u+=du) {
+ CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
+ for (v=v1,j=j1;j<=j2;j++,v+=dv) {
+ CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
+ }
+ CALL_End(GET_DISPATCH(), ());
+ }
+ break;
+ case GL_FILL:
+ for (v=v1,j=j1;j<j2;j++,v+=dv) {
+ CALL_Begin(GET_DISPATCH(), (GL_TRIANGLE_STRIP));
+ for (u=u1,i=i1;i<=i2;i++,u+=du) {
+ CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
+ CALL_EvalCoord2f(GET_DISPATCH(), (u, v+dv));
+ }
+ CALL_End(GET_DISPATCH(), ());
+ }
+ break;
+ }
+}
+
/**
* Called from glDrawArrays when in immediate mode (not display list mode).
@@ -859,6 +986,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
{
static GLuint warnCount = 0;
GLboolean index_bounds_valid = GL_TRUE;
+ GLuint max_element;
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
@@ -871,8 +999,27 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
type, indices, basevertex ))
return;
+ if (ctx->Const.CheckArrayBounds) {
+ /* _MaxElement was computed, so we can use it.
+ * This path is used for drivers which need strict bounds checking.
+ */
+ max_element = ctx->Array.ArrayObj->_MaxElement;
+ }
+ else {
+ /* Generally, hardware drivers don't need to know the buffer bounds
+ * if all vertex attributes are in VBOs.
+ * However, if none of vertex attributes are in VBOs, _MaxElement
+ * is always set to some random big number anyway, so bounds checking
+ * is mostly useless.
+ *
+ * This is only useful to catch invalid values in the "end" parameter
+ * like ~0.
+ */
+ max_element = 2 * 1000 * 1000 * 1000; /* just a big number */
+ }
+
if ((int) end + basevertex < 0 ||
- start + basevertex >= ctx->Array.ArrayObj->_MaxElement) {
+ start + basevertex >= max_element) {
/* The application requested we draw using a range of indices that's
* outside the bounds of the current VBO. This is invalid and appears
* to give undefined results. The safest thing to do is to simply
@@ -886,7 +1033,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
"\trange is outside VBO bounds (max=%u); ignoring.\n"
"\tThis should be fixed in the application.",
start, end, basevertex, count, type, indices,
- ctx->Array.ArrayObj->_MaxElement - 1);
+ max_element - 1);
}
index_bounds_valid = GL_FALSE;
}
@@ -917,7 +1064,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
}
if ((int) start + basevertex < 0 ||
- end + basevertex >= ctx->Array.ArrayObj->_MaxElement)
+ end + basevertex >= max_element)
index_bounds_valid = GL_FALSE;
#if 0
@@ -1359,40 +1506,50 @@ vbo_exec_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name,
vbo_draw_transform_feedback(ctx, mode, obj, stream, primcount);
}
+
/**
- * Plug in the immediate-mode vertex array drawing commands into the
- * givven vbo_exec_context object.
+ * Initialize the dispatch table with the VBO functions for drawing.
*/
void
-vbo_exec_array_init( struct vbo_exec_context *exec )
+vbo_initialize_exec_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec)
{
- exec->vtxfmt.DrawArrays = vbo_exec_DrawArrays;
- exec->vtxfmt.DrawElements = vbo_exec_DrawElements;
- exec->vtxfmt.DrawRangeElements = vbo_exec_DrawRangeElements;
- exec->vtxfmt.MultiDrawElementsEXT = vbo_exec_MultiDrawElements;
- exec->vtxfmt.DrawElementsBaseVertex = vbo_exec_DrawElementsBaseVertex;
- exec->vtxfmt.DrawRangeElementsBaseVertex = vbo_exec_DrawRangeElementsBaseVertex;
- exec->vtxfmt.MultiDrawElementsBaseVertex = vbo_exec_MultiDrawElementsBaseVertex;
- exec->vtxfmt.DrawArraysInstanced = vbo_exec_DrawArraysInstanced;
- exec->vtxfmt.DrawArraysInstancedBaseInstance = vbo_exec_DrawArraysInstancedBaseInstance;
- exec->vtxfmt.DrawElementsInstanced = vbo_exec_DrawElementsInstanced;
- exec->vtxfmt.DrawElementsInstancedBaseInstance = vbo_exec_DrawElementsInstancedBaseInstance;
- exec->vtxfmt.DrawElementsInstancedBaseVertex = vbo_exec_DrawElementsInstancedBaseVertex;
- exec->vtxfmt.DrawElementsInstancedBaseVertexBaseInstance = vbo_exec_DrawElementsInstancedBaseVertexBaseInstance;
- exec->vtxfmt.DrawTransformFeedback = vbo_exec_DrawTransformFeedback;
- exec->vtxfmt.DrawTransformFeedbackStream =
- vbo_exec_DrawTransformFeedbackStream;
- exec->vtxfmt.DrawTransformFeedbackInstanced =
- vbo_exec_DrawTransformFeedbackInstanced;
- exec->vtxfmt.DrawTransformFeedbackStreamInstanced =
- vbo_exec_DrawTransformFeedbackStreamInstanced;
-}
+ SET_DrawArrays(exec, vbo_exec_DrawArrays);
+ SET_DrawElements(exec, vbo_exec_DrawElements);
+ if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
+ SET_DrawRangeElements(exec, vbo_exec_DrawRangeElements);
+ }
-void
-vbo_exec_array_destroy( struct vbo_exec_context *exec )
-{
- /* nothing to do */
+ SET_MultiDrawElementsEXT(exec, vbo_exec_MultiDrawElements);
+
+ if (ctx->API == API_OPENGL_COMPAT) {
+ SET_Rectf(exec, vbo_exec_Rectf);
+ SET_EvalMesh1(exec, vbo_exec_EvalMesh1);
+ SET_EvalMesh2(exec, vbo_exec_EvalMesh2);
+ }
+
+ if (_mesa_is_desktop_gl(ctx)) {
+ SET_DrawElementsBaseVertex(exec, vbo_exec_DrawElementsBaseVertex);
+ SET_DrawRangeElementsBaseVertex(exec, vbo_exec_DrawRangeElementsBaseVertex);
+ SET_MultiDrawElementsBaseVertex(exec, vbo_exec_MultiDrawElementsBaseVertex);
+ SET_DrawArraysInstancedBaseInstance(exec, vbo_exec_DrawArraysInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseVertex(exec, vbo_exec_DrawElementsInstancedBaseVertex);
+ SET_DrawElementsInstancedBaseVertexBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseVertexBaseInstance);
+ }
+
+ if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
+ SET_DrawArraysInstancedARB(exec, vbo_exec_DrawArraysInstanced);
+ SET_DrawElementsInstancedARB(exec, vbo_exec_DrawElementsInstanced);
+ }
+
+ if (_mesa_is_desktop_gl(ctx)) {
+ SET_DrawTransformFeedback(exec, vbo_exec_DrawTransformFeedback);
+ SET_DrawTransformFeedbackStream(exec, vbo_exec_DrawTransformFeedbackStream);
+ SET_DrawTransformFeedbackInstanced(exec, vbo_exec_DrawTransformFeedbackInstanced);
+ SET_DrawTransformFeedbackStreamInstanced(exec, vbo_exec_DrawTransformFeedbackStreamInstanced);
+ }
}
diff --git a/mesalib/src/mesa/vbo/vbo_exec_draw.c b/mesalib/src/mesa/vbo/vbo_exec_draw.c
index 9529ce069..6a4f2a98b 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_draw.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_draw.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
@@ -30,7 +31,6 @@
#include "main/compiler.h"
#include "main/context.h"
#include "main/enums.h"
-#include "main/mfeatures.h"
#include "main/state.h"
#include "main/vtxfmt.h"
diff --git a/mesalib/src/mesa/vbo/vbo_exec_eval.c b/mesalib/src/mesa/vbo/vbo_exec_eval.c
index e6c728476..103b04a01 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_eval.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_eval.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo_noop.c b/mesalib/src/mesa/vbo/vbo_noop.c
index 2f2200219..f86984589 100644
--- a/mesalib/src/mesa/vbo/vbo_noop.c
+++ b/mesalib/src/mesa/vbo/vbo_noop.c
@@ -17,9 +17,10 @@
* 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 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.
+ * 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.
*/
@@ -29,12 +30,10 @@
#include "main/glheader.h"
-#include "main/api_arrayelt.h"
#include "main/context.h"
#include "main/dispatch.h"
#include "main/dlist.h"
#include "main/eval.h"
-#include "main/mfeatures.h"
#include "vbo/vbo_noop.h"
static void GLAPIENTRY
@@ -332,84 +331,23 @@ _mesa_noop_EvalPoint2(GLint a, GLint b)
}
static void GLAPIENTRY
-_mesa_noop_Begin(GLenum mode)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_End(void)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_PrimitiveRestartNV(void)
-{
-}
-
-
-static void GLAPIENTRY
-_mesa_noop_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
-{
-}
-
-
-static void GLAPIENTRY
-_mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type,
- const GLvoid * indices)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
- const GLvoid * indices, GLint basevertex)
+_mesa_noop_ArrayElement(GLint elem)
{
}
static void GLAPIENTRY
-_mesa_noop_DrawRangeElements(GLenum mode,
- GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid * indices)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_MultiDrawElements(GLenum mode, const GLsizei * count, GLenum type,
- const GLvoid ** indices, GLsizei primcount)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_DrawRangeElementsBaseVertex(GLenum mode,
- GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid * indices,
- GLint basevertex)
-{
-}
-
-static void GLAPIENTRY
-_mesa_noop_MultiDrawElementsBaseVertex(GLenum mode, const GLsizei * count,
- GLenum type,
- const GLvoid * const *indices,
- GLsizei primcount,
- const GLint * basevertex)
+_mesa_noop_Begin(GLenum mode)
{
}
static void GLAPIENTRY
-_mesa_noop_EvalMesh1(GLenum mode, GLint i1, GLint i2)
+_mesa_noop_End(void)
{
}
static void GLAPIENTRY
-_mesa_noop_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+_mesa_noop_PrimitiveRestartNV(void)
{
}
@@ -422,11 +360,12 @@ _mesa_noop_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
void
_mesa_noop_vtxfmt_init(GLvertexformat * vfmt)
{
- _MESA_INIT_ARRAYELT_VTXFMT(vfmt, _ae_);
+ vfmt->ArrayElement = _mesa_noop_ArrayElement;
vfmt->Begin = _mesa_noop_Begin;
- _MESA_INIT_DLIST_VTXFMT(vfmt, _mesa_);
+ vfmt->CallList = _mesa_CallList;
+ vfmt->CallLists = _mesa_CallLists;
vfmt->Color3f = _mesa_noop_Color3f;
vfmt->Color3fv = _mesa_noop_Color3fv;
@@ -437,7 +376,12 @@ _mesa_noop_vtxfmt_init(GLvertexformat * vfmt)
vfmt->PrimitiveRestartNV = _mesa_noop_PrimitiveRestartNV;
- _MESA_INIT_EVAL_VTXFMT(vfmt, _mesa_noop_);
+ vfmt->EvalCoord1f = _mesa_noop_EvalCoord1f;
+ vfmt->EvalCoord1fv = _mesa_noop_EvalCoord1fv;
+ vfmt->EvalCoord2f = _mesa_noop_EvalCoord2f;
+ vfmt->EvalCoord2fv = _mesa_noop_EvalCoord2fv;
+ vfmt->EvalPoint1 = _mesa_noop_EvalPoint1;
+ vfmt->EvalPoint2 = _mesa_noop_EvalPoint2;
vfmt->FogCoordfEXT = _mesa_noop_FogCoordfEXT;
vfmt->FogCoordfvEXT = _mesa_noop_FogCoordfvEXT;
@@ -486,16 +430,6 @@ _mesa_noop_vtxfmt_init(GLvertexformat * vfmt)
vfmt->VertexAttrib3fvARB = _mesa_noop_VertexAttrib3fvARB;
vfmt->VertexAttrib4fARB = _mesa_noop_VertexAttrib4fARB;
vfmt->VertexAttrib4fvARB = _mesa_noop_VertexAttrib4fvARB;
-
- vfmt->Rectf = _mesa_noop_Rectf;
-
- vfmt->DrawArrays = _mesa_noop_DrawArrays;
- vfmt->DrawElements = _mesa_noop_DrawElements;
- vfmt->DrawRangeElements = _mesa_noop_DrawRangeElements;
- vfmt->MultiDrawElementsEXT = _mesa_noop_MultiDrawElements;
- vfmt->DrawElementsBaseVertex = _mesa_noop_DrawElementsBaseVertex;
- vfmt->DrawRangeElementsBaseVertex = _mesa_noop_DrawRangeElementsBaseVertex;
- vfmt->MultiDrawElementsBaseVertex = _mesa_noop_MultiDrawElementsBaseVertex;
}
diff --git a/mesalib/src/mesa/vbo/vbo_noop.h b/mesalib/src/mesa/vbo/vbo_noop.h
index 044d373e8..f61cd5136 100644
--- a/mesalib/src/mesa/vbo/vbo_noop.h
+++ b/mesalib/src/mesa/vbo/vbo_noop.h
@@ -17,16 +17,16 @@
* 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 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.
+ * 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.
*/
#ifndef _API_NOOP_H
#define _API_NOOP_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
diff --git a/mesalib/src/mesa/vbo/vbo_primitive_restart.c b/mesalib/src/mesa/vbo/vbo_primitive_restart.c
index a6a0149ca..418f8829d 100644
--- a/mesalib/src/mesa/vbo/vbo_primitive_restart.c
+++ b/mesalib/src/mesa/vbo/vbo_primitive_restart.c
@@ -31,6 +31,7 @@
#include "main/imports.h"
#include "main/bufferobj.h"
#include "main/macros.h"
+#include "main/varray.h"
#include "vbo.h"
#include "vbo_context.h"
@@ -171,7 +172,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
GLuint sub_prim_num;
GLuint end_index;
GLuint sub_end_index;
- GLuint restart_index = ctx->Array._RestartIndex;
+ GLuint restart_index = _mesa_primitive_restart_index(ctx, ib->type);
struct _mesa_prim temp_prim;
struct vbo_context *vbo = vbo_context(ctx);
vbo_draw_func draw_prims_func = vbo->draw_prims;
diff --git a/mesalib/src/mesa/vbo/vbo_rebase.c b/mesalib/src/mesa/vbo/vbo_rebase.c
index d0bf6c59d..65ab58bf3 100644
--- a/mesalib/src/mesa/vbo/vbo_rebase.c
+++ b/mesalib/src/mesa/vbo/vbo_rebase.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo_save.c b/mesalib/src/mesa/vbo/vbo_save.c
index ad11b5ddc..305256a3a 100644
--- a/mesalib/src/mesa/vbo/vbo_save.c
+++ b/mesalib/src/mesa/vbo/vbo_save.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
@@ -29,7 +30,6 @@
#include "main/mtypes.h"
#include "main/bufferobj.h"
#include "main/imports.h"
-#include "main/mfeatures.h"
#include "vbo_context.h"
@@ -86,7 +86,7 @@ void vbo_save_init( struct gl_context *ctx )
}
}
- ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
+ ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END;
}
diff --git a/mesalib/src/mesa/vbo/vbo_save.h b/mesalib/src/mesa/vbo/vbo_save.h
index 750117b12..aa075bb31 100644
--- a/mesalib/src/mesa/vbo/vbo_save.h
+++ b/mesalib/src/mesa/vbo/vbo_save.h
@@ -34,7 +34,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef VBO_SAVE_H
#define VBO_SAVE_H
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "vbo.h"
#include "vbo_attrib.h"
@@ -127,10 +126,10 @@ struct vbo_save_context {
struct gl_client_array arrays[VBO_ATTRIB_MAX];
const struct gl_client_array *inputs[VBO_ATTRIB_MAX];
- GLubyte attrsz[VBO_ATTRIB_MAX];
- GLenum attrtype[VBO_ATTRIB_MAX];
- GLubyte active_sz[VBO_ATTRIB_MAX];
- GLuint vertex_size;
+ GLubyte attrsz[VBO_ATTRIB_MAX]; /**< 1, 2, 3 or 4 */
+ GLenum attrtype[VBO_ATTRIB_MAX]; /**< GL_FLOAT, GL_INT, etc */
+ GLubyte active_sz[VBO_ATTRIB_MAX]; /**< 1, 2, 3 or 4 */
+ GLuint vertex_size; /**< size in GLfloats */
GLboolean out_of_memory; /**< True if last VBO allocation failed */
diff --git a/mesalib/src/mesa/vbo/vbo_save_api.c b/mesalib/src/mesa/vbo/vbo_save_api.c
index 749071753..26951bd94 100644
--- a/mesalib/src/mesa/vbo/vbo_save_api.c
+++ b/mesalib/src/mesa/vbo/vbo_save_api.c
@@ -74,7 +74,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "main/enums.h"
#include "main/eval.h"
#include "main/macros.h"
-#include "main/mfeatures.h"
#include "main/api_validate.h"
#include "main/api_arrayelt.h"
#include "main/vtxfmt.h"
@@ -306,9 +305,9 @@ _save_reset_counters(struct gl_context *ctx)
* previous prim.
*/
static void
-vbo_merge_prims(struct gl_context *ctx,
- struct _mesa_prim *prim_list,
- GLuint *prim_count)
+merge_prims(struct gl_context *ctx,
+ struct _mesa_prim *prim_list,
+ GLuint *prim_count)
{
GLuint i;
struct _mesa_prim *prev_prim = prim_list;
@@ -316,19 +315,13 @@ vbo_merge_prims(struct gl_context *ctx,
for (i = 1; i < *prim_count; i++) {
struct _mesa_prim *this_prim = prim_list + i;
- if (this_prim->mode == prev_prim->mode &&
- this_prim->mode == GL_QUADS &&
- this_prim->count % 4 == 0 &&
- prev_prim->count % 4 == 0 &&
- this_prim->start == prev_prim->start + prev_prim->count &&
- this_prim->basevertex == prev_prim->basevertex &&
- this_prim->num_instances == prev_prim->num_instances &&
- this_prim->base_instance == prev_prim->base_instance) {
+ vbo_try_prim_conversion(this_prim);
+
+ if (vbo_can_merge_prims(prev_prim, this_prim)) {
/* We've found a prim that just extend the previous one. Tack it
* onto the previous one, and let this primitive struct get dropped.
*/
- prev_prim->count += this_prim->count;
- prev_prim->end = this_prim->end;
+ vbo_merge_prims(prev_prim, this_prim);
continue;
}
@@ -421,7 +414,7 @@ _save_compile_vertex_list(struct gl_context *ctx)
*/
save->copied.nr = _save_copy_vertices(ctx, node, save->buffer);
- vbo_merge_prims(ctx, node->prim, &node->prim_count);
+ merge_prims(ctx, node->prim, &node->prim_count);
/* Deal with GL_COMPILE_AND_EXECUTE:
*/
@@ -476,6 +469,8 @@ _save_compile_vertex_list(struct gl_context *ctx)
/**
+ * This is called when we fill a vertex buffer before we hit a glEnd().
+ * We
* TODO -- If no new vertices have been stored, don't bother saving it.
*/
static void
@@ -584,7 +579,11 @@ _save_copy_from_current(struct gl_context *ctx)
}
-/* Flush existing data, set new attrib size, replay copied vertices.
+/**
+ * Called when we increase the size of a vertex attribute. For example,
+ * if we've seen one or more glTexCoord2f() calls and now we get a
+ * glTexCoord3f() call.
+ * Flush existing data, set new attrib size, replay copied vertices.
*/
static void
_save_upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
@@ -641,7 +640,7 @@ _save_upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
* and will need fixup at runtime.
*/
if (save->copied.nr) {
- GLfloat *data = save->copied.buffer;
+ const GLfloat *data = save->copied.buffer;
GLfloat *dest = save->buffer;
GLuint j;
@@ -683,6 +682,11 @@ _save_upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
}
+/**
+ * This is called when the size of a vertex attribute changes.
+ * For example, after seeing one or more glTexCoord2f() calls we
+ * get a glTexCoord4f() or glTexCoord1f() call.
+ */
static void
save_fixup_vertex(struct gl_context *ctx, GLuint attr, GLuint sz)
{
@@ -709,6 +713,11 @@ save_fixup_vertex(struct gl_context *ctx, GLuint attr, GLuint sz)
}
+/**
+ * Reset the current size of all vertex attributes to the default
+ * value of 0. This signals that we haven't yet seen any per-vertex
+ * commands such as glNormal3f() or glTexCoord2f().
+ */
static void
_save_reset_vertex(struct gl_context *ctx)
{
@@ -861,7 +870,7 @@ dlist_fallback(struct gl_context *ctx)
else {
_mesa_install_save_vtxfmt(ctx, &ctx->ListState.ListVtxfmt);
}
- ctx->Driver.SaveNeedFlush = 0;
+ ctx->Driver.SaveNeedFlush = GL_FALSE;
}
@@ -931,15 +940,16 @@ _save_CallLists(GLsizei n, GLenum type, const GLvoid * v)
-/* This begin is hooked into ... Updating of
- * ctx->Driver.CurrentSavePrimitive is already taken care of.
+/**
+ * Called via ctx->Driver.NotifySaveBegin() when a glBegin is getting
+ * compiled into a display list.
+ * Updating of ctx->Driver.CurrentSavePrimitive is already taken care of.
*/
GLboolean
vbo_save_NotifyBegin(struct gl_context *ctx, GLenum mode)
{
struct vbo_save_context *save = &vbo_context(ctx)->save;
-
- GLuint i = save->prim_count++;
+ const GLuint i = save->prim_count++;
assert(i < save->prim_max);
save->prim[i].mode = mode & VBO_SAVE_PRIM_MODE_MASK;
@@ -960,7 +970,13 @@ vbo_save_NotifyBegin(struct gl_context *ctx, GLenum mode)
else {
_mesa_install_save_vtxfmt(ctx, &save->vtxfmt);
}
- ctx->Driver.SaveNeedFlush = 1;
+
+ /* We need to call SaveFlushVertices() if there's state change */
+ ctx->Driver.SaveNeedFlush = GL_TRUE;
+
+ /* GL_TRUE means we've handled this glBegin here; don't compile a BEGIN
+ * opcode into the display list.
+ */
return GL_TRUE;
}
@@ -970,7 +986,7 @@ _save_End(void)
{
GET_CURRENT_CONTEXT(ctx);
struct vbo_save_context *save = &vbo_context(ctx)->save;
- GLint i = save->prim_count - 1;
+ const GLint i = save->prim_count - 1;
ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END;
save->prim[i].end = 1;
@@ -994,198 +1010,6 @@ _save_End(void)
}
-/* These are all errors as this vtxfmt is only installed inside
- * begin/end pairs.
- */
-static void GLAPIENTRY
-_save_DrawElements(GLenum mode, GLsizei count, GLenum type,
- const GLvoid * indices)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) count;
- (void) type;
- (void) indices;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawElements");
-}
-
-
-static void GLAPIENTRY
-_save_DrawRangeElements(GLenum mode, GLuint start, GLuint end,
- GLsizei count, GLenum type, const GLvoid * indices)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) start;
- (void) end;
- (void) count;
- (void) type;
- (void) indices;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawRangeElements");
-}
-
-
-static void GLAPIENTRY
-_save_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
- const GLvoid * indices, GLint basevertex)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) count;
- (void) type;
- (void) indices;
- (void) basevertex;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawElements");
-}
-
-
-static void GLAPIENTRY
-_save_DrawRangeElementsBaseVertex(GLenum mode,
- GLuint start,
- GLuint end,
- GLsizei count,
- GLenum type,
- const GLvoid * indices, GLint basevertex)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) start;
- (void) end;
- (void) count;
- (void) type;
- (void) indices;
- (void) basevertex;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawRangeElements");
-}
-
-
-static void GLAPIENTRY
-_save_DrawArrays(GLenum mode, GLint start, GLsizei count)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) start;
- (void) count;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawArrays");
-}
-
-
-static void GLAPIENTRY
-_save_MultiDrawElements(GLenum mode, const GLsizei *count, GLenum type,
- const GLvoid **indices, GLsizei primcount)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) count;
- (void) type;
- (void) indices;
- (void) primcount;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glMultiDrawElements");
-}
-
-
-static void GLAPIENTRY
-_save_MultiDrawElementsBaseVertex(GLenum mode, const GLsizei *count,
- GLenum type, const GLvoid * const *indices,
- GLsizei primcount, const GLint *basevertex)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) count;
- (void) type;
- (void) indices;
- (void) primcount;
- (void) basevertex;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION,
- "glMultiDrawElementsBaseVertex");
-}
-
-
-static void GLAPIENTRY
-_save_DrawTransformFeedback(GLenum mode, GLuint name)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) name;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glDrawTransformFeedback");
-}
-
-
-static void GLAPIENTRY
-_save_DrawTransformFeedbackStream(GLenum mode, GLuint name, GLuint stream)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) name;
- (void) stream;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION,
- "glDrawTransformFeedbackStream");
-}
-
-
-static void GLAPIENTRY
-_save_DrawTransformFeedbackInstanced(GLenum mode, GLuint name,
- GLsizei primcount)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) name;
- (void) primcount;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION,
- "glDrawTransformFeedbackInstanced");
-}
-
-
-static void GLAPIENTRY
-_save_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name,
- GLuint stream, GLsizei primcount)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) name;
- (void) stream;
- (void) primcount;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION,
- "glDrawTransformFeedbackStreamInstanced");
-}
-
-
-static void GLAPIENTRY
-_save_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) x1;
- (void) y1;
- (void) x2;
- (void) y2;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glRectf");
-}
-
-
-static void GLAPIENTRY
-_save_EvalMesh1(GLenum mode, GLint i1, GLint i2)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) i1;
- (void) i2;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glEvalMesh1");
-}
-
-
-static void GLAPIENTRY
-_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
-{
- GET_CURRENT_CONTEXT(ctx);
- (void) mode;
- (void) i1;
- (void) i2;
- (void) j1;
- (void) j2;
- _mesa_compile_error(ctx, GL_INVALID_OPERATION, "glEvalMesh2");
-}
-
-
static void GLAPIENTRY
_save_Begin(GLenum mode)
{
@@ -1233,8 +1057,14 @@ _save_OBE_DrawArrays(GLenum mode, GLint start, GLsizei count)
struct vbo_save_context *save = &vbo_context(ctx)->save;
GLint i;
- if (!_mesa_validate_DrawArrays(ctx, mode, start, count))
+ if (!_mesa_is_valid_prim_mode(ctx, mode)) {
+ _mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawArrays(mode)");
+ return;
+ }
+ if (count < 0) {
+ _mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawArrays(count<0)");
return;
+ }
if (save->out_of_memory)
return;
@@ -1263,8 +1093,20 @@ _save_OBE_DrawElements(GLenum mode, GLsizei count, GLenum type,
struct vbo_save_context *save = &vbo_context(ctx)->save;
GLint i;
- if (!_mesa_validate_DrawElements(ctx, mode, count, type, indices, 0))
+ if (!_mesa_is_valid_prim_mode(ctx, mode)) {
+ _mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawElements(mode)");
+ return;
+ }
+ if (count < 0) {
+ _mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawElements(count<0)");
+ return;
+ }
+ if (type != GL_UNSIGNED_BYTE &&
+ type != GL_UNSIGNED_SHORT &&
+ type != GL_UNSIGNED_INT) {
+ _mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawElements(count<0)");
return;
+ }
if (save->out_of_memory)
return;
@@ -1310,9 +1152,26 @@ _save_OBE_DrawRangeElements(GLenum mode, GLuint start, GLuint end,
GET_CURRENT_CONTEXT(ctx);
struct vbo_save_context *save = &vbo_context(ctx)->save;
- if (!_mesa_validate_DrawRangeElements(ctx, mode,
- start, end, count, type, indices, 0))
+ if (!_mesa_is_valid_prim_mode(ctx, mode)) {
+ _mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawRangeElements(mode)");
+ return;
+ }
+ if (count < 0) {
+ _mesa_compile_error(ctx, GL_INVALID_VALUE,
+ "glDrawRangeElements(count<0)");
return;
+ }
+ if (type != GL_UNSIGNED_BYTE &&
+ type != GL_UNSIGNED_SHORT &&
+ type != GL_UNSIGNED_INT) {
+ _mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawRangeElements(type)");
+ return;
+ }
+ if (end < start) {
+ _mesa_compile_error(ctx, GL_INVALID_VALUE,
+ "glDrawRangeElements(end < start)");
+ return;
+ }
if (save->out_of_memory)
return;
@@ -1360,9 +1219,8 @@ _save_vtxfmt_init(struct gl_context *ctx)
struct vbo_save_context *save = &vbo_context(ctx)->save;
GLvertexformat *vfmt = &save->vtxfmt;
- _MESA_INIT_ARRAYELT_VTXFMT(vfmt, _ae_);
+ vfmt->ArrayElement = _ae_ArrayElement;
- vfmt->Begin = _save_Begin;
vfmt->Color3f = _save_Color3f;
vfmt->Color3fv = _save_Color3fv;
vfmt->Color4f = _save_Color4f;
@@ -1485,30 +1343,42 @@ _save_vtxfmt_init(struct gl_context *ctx)
/* This will all require us to fallback to saving the list as opcodes:
*/
- _MESA_INIT_DLIST_VTXFMT(vfmt, _save_); /* inside begin/end */
+ vfmt->CallList = _save_CallList;
+ vfmt->CallLists = _save_CallLists;
- _MESA_INIT_EVAL_VTXFMT(vfmt, _save_);
+ vfmt->EvalCoord1f = _save_EvalCoord1f;
+ vfmt->EvalCoord1fv = _save_EvalCoord1fv;
+ vfmt->EvalCoord2f = _save_EvalCoord2f;
+ vfmt->EvalCoord2fv = _save_EvalCoord2fv;
+ vfmt->EvalPoint1 = _save_EvalPoint1;
+ vfmt->EvalPoint2 = _save_EvalPoint2;
/* These calls all generate GL_INVALID_OPERATION since this vtxfmt is
* only used when we're inside a glBegin/End pair.
*/
vfmt->Begin = _save_Begin;
- vfmt->Rectf = _save_Rectf;
- vfmt->DrawArrays = _save_DrawArrays;
- vfmt->DrawElements = _save_DrawElements;
- vfmt->DrawRangeElements = _save_DrawRangeElements;
- vfmt->DrawElementsBaseVertex = _save_DrawElementsBaseVertex;
- vfmt->DrawRangeElementsBaseVertex = _save_DrawRangeElementsBaseVertex;
- vfmt->MultiDrawElementsEXT = _save_MultiDrawElements;
- vfmt->MultiDrawElementsBaseVertex = _save_MultiDrawElementsBaseVertex;
- vfmt->DrawTransformFeedback = _save_DrawTransformFeedback;
- vfmt->DrawTransformFeedbackStream = _save_DrawTransformFeedbackStream;
- vfmt->DrawTransformFeedbackInstanced = _save_DrawTransformFeedbackInstanced;
- vfmt->DrawTransformFeedbackStreamInstanced =
- _save_DrawTransformFeedbackStreamInstanced;
}
+/**
+ * Initialize the dispatch table with the VBO functions for display
+ * list compilation.
+ */
+void
+vbo_initialize_save_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec)
+{
+ SET_DrawArrays(exec, _save_OBE_DrawArrays);
+ SET_DrawElements(exec, _save_OBE_DrawElements);
+ SET_DrawRangeElements(exec, _save_OBE_DrawRangeElements);
+ SET_MultiDrawElementsEXT(exec, _save_OBE_MultiDrawElements);
+ SET_MultiDrawElementsBaseVertex(exec, _save_OBE_MultiDrawElementsBaseVertex);
+ SET_Rectf(exec, _save_OBE_Rectf);
+ /* Note: other glDraw functins aren't compiled into display lists */
+}
+
+
+
void
vbo_save_SaveFlushVertices(struct gl_context *ctx)
{
@@ -1516,8 +1386,7 @@ vbo_save_SaveFlushVertices(struct gl_context *ctx)
/* Noop when we are actually active:
*/
- if (ctx->Driver.CurrentSavePrimitive == PRIM_INSIDE_UNKNOWN_PRIM ||
- ctx->Driver.CurrentSavePrimitive <= GL_POLYGON)
+ if (ctx->Driver.CurrentSavePrimitive <= PRIM_MAX)
return;
if (save->vert_count || save->prim_count)
@@ -1526,7 +1395,7 @@ vbo_save_SaveFlushVertices(struct gl_context *ctx)
_save_copy_to_current(ctx);
_save_reset_vertex(ctx);
_save_reset_counters(ctx);
- ctx->Driver.SaveNeedFlush = 0;
+ ctx->Driver.SaveNeedFlush = GL_FALSE;
}
@@ -1548,7 +1417,7 @@ vbo_save_NewList(struct gl_context *ctx, GLuint list, GLenum mode)
_save_reset_vertex(ctx);
_save_reset_counters(ctx);
- ctx->Driver.SaveNeedFlush = 0;
+ ctx->Driver.SaveNeedFlush = GL_FALSE;
}
@@ -1559,8 +1428,7 @@ vbo_save_EndList(struct gl_context *ctx)
/* EndList called inside a (saved) Begin/End pair?
*/
- if (ctx->Driver.CurrentSavePrimitive != PRIM_OUTSIDE_BEGIN_END) {
-
+ if (_mesa_inside_dlist_begin_end(ctx)) {
if (save->prim_count > 0) {
GLint i = save->prim_count - 1;
ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END;
@@ -1700,14 +1568,4 @@ vbo_save_api_init(struct vbo_save_context *save)
/* These will actually get set again when binding/drawing */
for (i = 0; i < VBO_ATTRIB_MAX; i++)
save->inputs[i] = &save->arrays[i];
-
- /* Hook our array functions into the outside-begin-end vtxfmt in
- * ctx->ListState.
- */
- ctx->ListState.ListVtxfmt.Rectf = _save_OBE_Rectf;
- ctx->ListState.ListVtxfmt.DrawArrays = _save_OBE_DrawArrays;
- ctx->ListState.ListVtxfmt.DrawElements = _save_OBE_DrawElements;
- ctx->ListState.ListVtxfmt.DrawRangeElements = _save_OBE_DrawRangeElements;
- ctx->ListState.ListVtxfmt.MultiDrawElementsEXT = _save_OBE_MultiDrawElements;
- ctx->ListState.ListVtxfmt.MultiDrawElementsBaseVertex = _save_OBE_MultiDrawElementsBaseVertex;
}
diff --git a/mesalib/src/mesa/vbo/vbo_save_draw.c b/mesalib/src/mesa/vbo/vbo_save_draw.c
index f5b5c411d..a6ce379e2 100644
--- a/mesalib/src/mesa/vbo/vbo_save_draw.c
+++ b/mesalib/src/mesa/vbo/vbo_save_draw.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/* Author:
@@ -30,7 +31,6 @@
#include "main/bufferobj.h"
#include "main/context.h"
#include "main/imports.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/macros.h"
#include "main/light.h"
@@ -269,17 +269,12 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
if (node->prim_count > 0) {
- if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END &&
- node->prim[0].begin) {
-
- /* Degenerate case: list is called inside begin/end pair and
- * includes operations such as glBegin or glDrawArrays.
- */
- if (0)
- printf("displaylist recursive begin");
-
- vbo_save_loopback_vertex_list( ctx, node );
-
+ if (_mesa_inside_begin_end(ctx) && node->prim[0].begin) {
+ /* Error: we're about to begin a new primitive but we're already
+ * inside a glBegin/End pair.
+ */
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "draw operation inside glBegin/End");
goto end;
}
else if (save->replay_flags) {
diff --git a/mesalib/src/mesa/vbo/vbo_save_loopback.c b/mesalib/src/mesa/vbo/vbo_save_loopback.c
index 98772be76..31343cd67 100644
--- a/mesalib/src/mesa/vbo/vbo_save_loopback.c
+++ b/mesalib/src/mesa/vbo/vbo_save_loopback.c
@@ -29,7 +29,6 @@
#include "main/glheader.h"
#include "main/enums.h"
#include "main/imports.h"
-#include "main/mfeatures.h"
#include "main/mtypes.h"
#include "main/dispatch.h"
#include "glapi/glapi.h"
@@ -178,7 +177,7 @@ void vbo_loopback_vertex_list( struct gl_context *ctx,
for (i = 0 ; i < prim_count ; i++) {
if ((prim[i].mode & VBO_SAVE_PRIM_WEAK) &&
- (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END))
+ _mesa_inside_begin_end(ctx))
{
loopback_weak_prim( ctx, &prim[i] );
}
diff --git a/mesalib/src/mesa/vbo/vbo_split.c b/mesalib/src/mesa/vbo/vbo_split.c
index c933a3f9a..e128f5bd0 100644
--- a/mesalib/src/mesa/vbo/vbo_split.c
+++ b/mesalib/src/mesa/vbo/vbo_split.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo_split.h b/mesalib/src/mesa/vbo/vbo_split.h
index b7f0a9c57..a4e5fa0b8 100644
--- a/mesalib/src/mesa/vbo/vbo_split.h
+++ b/mesalib/src/mesa/vbo/vbo_split.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/vbo/vbo_split_copy.c b/mesalib/src/mesa/vbo/vbo_split_copy.c
index a917f39ca..9df36df78 100644
--- a/mesalib/src/mesa/vbo/vbo_split_copy.c
+++ b/mesalib/src/mesa/vbo/vbo_split_copy.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/vbo/vbo_split_inplace.c b/mesalib/src/mesa/vbo/vbo_split_inplace.c
index 8a3830805..b26b00af8 100644
--- a/mesalib/src/mesa/vbo/vbo_split_inplace.c
+++ b/mesalib/src/mesa/vbo/vbo_split_inplace.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
diff --git a/mesalib/src/mesa/x86/3dnow.c b/mesalib/src/mesa/x86/3dnow.c
index de2fb1e2a..f12dc2610 100644
--- a/mesalib/src/mesa/x86/3dnow.c
+++ b/mesalib/src/mesa/x86/3dnow.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/3dnow.h b/mesalib/src/mesa/x86/3dnow.h
index 1c1fedcd4..e13f400d4 100644
--- a/mesalib/src/mesa/x86/3dnow.h
+++ b/mesalib/src/mesa/x86/3dnow.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/3dnow_normal.S b/mesalib/src/mesa/x86/3dnow_normal.S
index 7f5f6b357..b3908f07a 100644
--- a/mesalib/src/mesa/x86/3dnow_normal.S
+++ b/mesalib/src/mesa/x86/3dnow_normal.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/3dnow_xform1.S b/mesalib/src/mesa/x86/3dnow_xform1.S
index a73301a8d..004a734e1 100644
--- a/mesalib/src/mesa/x86/3dnow_xform1.S
+++ b/mesalib/src/mesa/x86/3dnow_xform1.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifdef USE_3DNOW_ASM
diff --git a/mesalib/src/mesa/x86/3dnow_xform2.S b/mesalib/src/mesa/x86/3dnow_xform2.S
index 2988fb7bf..333ad6342 100644
--- a/mesalib/src/mesa/x86/3dnow_xform2.S
+++ b/mesalib/src/mesa/x86/3dnow_xform2.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifdef USE_3DNOW_ASM
diff --git a/mesalib/src/mesa/x86/3dnow_xform3.S b/mesalib/src/mesa/x86/3dnow_xform3.S
index a356aaee7..740e07723 100644
--- a/mesalib/src/mesa/x86/3dnow_xform3.S
+++ b/mesalib/src/mesa/x86/3dnow_xform3.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifdef USE_3DNOW_ASM
diff --git a/mesalib/src/mesa/x86/3dnow_xform4.S b/mesalib/src/mesa/x86/3dnow_xform4.S
index b2b7c64f2..4612d368f 100644
--- a/mesalib/src/mesa/x86/3dnow_xform4.S
+++ b/mesalib/src/mesa/x86/3dnow_xform4.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifdef USE_3DNOW_ASM
diff --git a/mesalib/src/mesa/x86/Makefile.am b/mesalib/src/mesa/x86/Makefile.am
index 5976bb47c..21ce3607a 100644
--- a/mesalib/src/mesa/x86/Makefile.am
+++ b/mesalib/src/mesa/x86/Makefile.am
@@ -25,7 +25,6 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/src/mesa \
-I$(top_srcdir)/src/mapi \
- $(API_DEFINES) \
$(DEFINES)
noinst_PROGRAMS = gen_matypes
diff --git a/mesalib/src/mesa/x86/clip_args.h b/mesalib/src/mesa/x86/clip_args.h
index 796611fbf..bafa535ef 100644
--- a/mesalib/src/mesa/x86/clip_args.h
+++ b/mesalib/src/mesa/x86/clip_args.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/common_x86.c b/mesalib/src/mesa/x86/common_x86.c
index 629950723..910828f16 100644
--- a/mesalib/src/mesa/x86/common_x86.c
+++ b/mesalib/src/mesa/x86/common_x86.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/**
diff --git a/mesalib/src/mesa/x86/common_x86_asm.S b/mesalib/src/mesa/x86/common_x86_asm.S
index ea4047a0e..230d588c4 100644
--- a/mesalib/src/mesa/x86/common_x86_asm.S
+++ b/mesalib/src/mesa/x86/common_x86_asm.S
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/common_x86_asm.h b/mesalib/src/mesa/x86/common_x86_asm.h
index 0d39e3d23..a4b714396 100644
--- a/mesalib/src/mesa/x86/common_x86_asm.h
+++ b/mesalib/src/mesa/x86/common_x86_asm.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/common_x86_features.h b/mesalib/src/mesa/x86/common_x86_features.h
index 676af8c1f..2069b906e 100644
--- a/mesalib/src/mesa/x86/common_x86_features.h
+++ b/mesalib/src/mesa/x86/common_x86_features.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/gen_matypes.c b/mesalib/src/mesa/x86/gen_matypes.c
index 61f181cd9..fff6f541b 100644
--- a/mesalib/src/mesa/x86/gen_matypes.c
+++ b/mesalib/src/mesa/x86/gen_matypes.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/x86/mmx.h b/mesalib/src/mesa/x86/mmx.h
index 74e9979d3..0772e0f6f 100644
--- a/mesalib/src/mesa/x86/mmx.h
+++ b/mesalib/src/mesa/x86/mmx.h
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
diff --git a/mesalib/src/mesa/x86/norm_args.h b/mesalib/src/mesa/x86/norm_args.h
index e22f8bbd7..34a546a8b 100644
--- a/mesalib/src/mesa/x86/norm_args.h
+++ b/mesalib/src/mesa/x86/norm_args.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/sse.c b/mesalib/src/mesa/x86/sse.c
index aef15b531..f3e93248b 100644
--- a/mesalib/src/mesa/x86/sse.c
+++ b/mesalib/src/mesa/x86/sse.c
@@ -17,9 +17,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/sse.h b/mesalib/src/mesa/x86/sse.h
index e92ddc139..20a4de277 100644
--- a/mesalib/src/mesa/x86/sse.h
+++ b/mesalib/src/mesa/x86/sse.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/sse_normal.S b/mesalib/src/mesa/x86/sse_normal.S
index a8c0d38c7..7024dd0ce 100644
--- a/mesalib/src/mesa/x86/sse_normal.S
+++ b/mesalib/src/mesa/x86/sse_normal.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/** TODO:
diff --git a/mesalib/src/mesa/x86/sse_xform1.S b/mesalib/src/mesa/x86/sse_xform1.S
index 4aa9de607..d165aff6d 100644
--- a/mesalib/src/mesa/x86/sse_xform1.S
+++ b/mesalib/src/mesa/x86/sse_xform1.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/** TODO:
diff --git a/mesalib/src/mesa/x86/sse_xform2.S b/mesalib/src/mesa/x86/sse_xform2.S
index a443dad35..bb0f75696 100644
--- a/mesalib/src/mesa/x86/sse_xform2.S
+++ b/mesalib/src/mesa/x86/sse_xform2.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/** TODO:
diff --git a/mesalib/src/mesa/x86/sse_xform3.S b/mesalib/src/mesa/x86/sse_xform3.S
index 4bc22d8a5..60c011094 100644
--- a/mesalib/src/mesa/x86/sse_xform3.S
+++ b/mesalib/src/mesa/x86/sse_xform3.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/** TODO:
diff --git a/mesalib/src/mesa/x86/sse_xform4.S b/mesalib/src/mesa/x86/sse_xform4.S
index fb1fa741c..596efd06a 100644
--- a/mesalib/src/mesa/x86/sse_xform4.S
+++ b/mesalib/src/mesa/x86/sse_xform4.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
#ifdef USE_SSE_ASM
diff --git a/mesalib/src/mesa/x86/x86_cliptest.S b/mesalib/src/mesa/x86/x86_cliptest.S
index e413aee61..b8163dad9 100644
--- a/mesalib/src/mesa/x86/x86_cliptest.S
+++ b/mesalib/src/mesa/x86/x86_cliptest.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/x86_xform.c b/mesalib/src/mesa/x86/x86_xform.c
index 3dcc55e16..8d1488e8b 100644
--- a/mesalib/src/mesa/x86/x86_xform.c
+++ b/mesalib/src/mesa/x86/x86_xform.c
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/x86_xform.h b/mesalib/src/mesa/x86/x86_xform.h
index e886d9add..9052fa46a 100644
--- a/mesalib/src/mesa/x86/x86_xform.h
+++ b/mesalib/src/mesa/x86/x86_xform.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*
* Authors:
* Gareth Hughes
diff --git a/mesalib/src/mesa/x86/x86_xform2.S b/mesalib/src/mesa/x86/x86_xform2.S
index 980725ef5..b66146041 100644
--- a/mesalib/src/mesa/x86/x86_xform2.S
+++ b/mesalib/src/mesa/x86/x86_xform2.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/x86_xform3.S b/mesalib/src/mesa/x86/x86_xform3.S
index 1c782f1c5..017914095 100644
--- a/mesalib/src/mesa/x86/x86_xform3.S
+++ b/mesalib/src/mesa/x86/x86_xform3.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/x86_xform4.S b/mesalib/src/mesa/x86/x86_xform4.S
index 97a841138..e9e9b7154 100644
--- a/mesalib/src/mesa/x86/x86_xform4.S
+++ b/mesalib/src/mesa/x86/x86_xform4.S
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mesalib/src/mesa/x86/xform_args.h b/mesalib/src/mesa/x86/xform_args.h
index b773f5198..d2cf6f712 100644
--- a/mesalib/src/mesa/x86/xform_args.h
+++ b/mesalib/src/mesa/x86/xform_args.h
@@ -18,9 +18,10 @@
* 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
- * BRIAN PAUL 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.
+ * 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.
*/
/*
diff --git a/mkfontscale/man/mkfontscale.man b/mkfontscale/man/mkfontscale.man
index 4ed3d7d67..4aa88ab04 100644
--- a/mkfontscale/man/mkfontscale.man
+++ b/mkfontscale/man/mkfontscale.man
@@ -36,6 +36,8 @@ mkfontscale \- create an index of scalable font files for X
.B \-n
.I prefix
] [
+.B \-u | \-U
+] [
.B \-\-
] [
.I directory
@@ -126,6 +128,10 @@ options.
do not scan for fonts, do not write font directory files. This option
is useful when generating encoding directories only.
.TP
+.B \-u, \-U
+disable (\fI-u\fP) or enable (\fI-U\fP) indexing of ISO 10646:1 font
+encodings (default: enabled).
+.TP
.B \-\-
end of options.
.SH SEE ALSO
diff --git a/pixman/configure.ac b/pixman/configure.ac
index 38f89b31e..221179ff1 100644
--- a/pixman/configure.ac
+++ b/pixman/configure.ac
@@ -53,8 +53,8 @@ AC_PREREQ([2.57])
#
m4_define([pixman_major], 0)
-m4_define([pixman_minor], 29)
-m4_define([pixman_micro], 3)
+m4_define([pixman_minor], 31)
+m4_define([pixman_micro], 1)
m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
@@ -279,7 +279,7 @@ AC_MSG_CHECKING(whether to use Loongson MMI assembler)
xserver_save_CFLAGS=$CFLAGS
CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+AC_LINK_IFELSE([AC_LANG_SOURCE([[
#ifndef __mips_loongson_vector_rev
#error "Loongson Multimedia Instructions are only available on Loongson"
#endif
@@ -845,6 +845,13 @@ if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
fi
dnl =====================================
+dnl Check for missing sqrtf() as, e.g., for Solaris 9
+
+AC_SEARCH_LIBS([sqrtf], [m], [],
+ [AC_DEFINE([sqrtf], [sqrt],
+ [Define to sqrt if you do not have the `sqrtf' function.])])
+
+dnl =====================================
dnl Thread local storage
AC_MSG_CHECKING(for thread local storage (TLS) support)
diff --git a/pixman/pixman/pixman-arm-neon-asm.h b/pixman/pixman/pixman-arm-neon-asm.h
index 1673b080f..d0d92d74c 100644
--- a/pixman/pixman/pixman-arm-neon-asm.h
+++ b/pixman/pixman/pixman-arm-neon-asm.h
@@ -385,7 +385,7 @@
* execute simultaneously with NEON and be completely shadowed by it. Thus
* we get no performance overhead at all (*). This looks like a very nice
* feature of Cortex-A8, if used wisely. We don't have a hardware prefetcher,
- * but still can implement some rather advanced prefetch logic in sofware
+ * but still can implement some rather advanced prefetch logic in software
* for almost zero cost!
*
* (*) The overhead of the prefetcher is visible when running some trivial
diff --git a/pixman/pixman/pixman-fast-path.c b/pixman/pixman/pixman-fast-path.c
index 247aea645..3982dce8b 100644
--- a/pixman/pixman/pixman-fast-path.c
+++ b/pixman/pixman/pixman-fast-path.c
@@ -2261,89 +2261,27 @@ fast_write_back_r5g6b5 (pixman_iter_t *iter)
}
}
-typedef struct
-{
- pixman_format_code_t format;
- pixman_iter_get_scanline_t get_scanline;
- pixman_iter_write_back_t write_back;
-} fetcher_info_t;
-
-static const fetcher_info_t fetchers[] =
-{
- { PIXMAN_r5g6b5, fast_fetch_r5g6b5, fast_write_back_r5g6b5 },
- { PIXMAN_null }
-};
-
-static pixman_bool_t
-fast_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
-{
- pixman_image_t *image = iter->image;
-
-#define FLAGS \
+#define IMAGE_FLAGS \
(FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM | \
FAST_PATH_BITS_IMAGE | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST)
- if ((iter->iter_flags & ITER_NARROW) &&
- (iter->image_flags & FLAGS) == FLAGS)
- {
- const fetcher_info_t *f;
-
- for (f = &fetchers[0]; f->format != PIXMAN_null; f++)
- {
- if (image->common.extended_format_code == f->format)
- {
- uint8_t *b = (uint8_t *)image->bits.bits;
- int s = image->bits.rowstride * 4;
-
- iter->bits = b + s * iter->y + iter->x * PIXMAN_FORMAT_BPP (f->format) / 8;
- iter->stride = s;
-
- iter->get_scanline = f->get_scanline;
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-static pixman_bool_t
-fast_dest_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
+static const pixman_iter_info_t fast_iters[] =
{
- pixman_image_t *image = iter->image;
-
- if ((iter->iter_flags & ITER_NARROW) &&
- (iter->image_flags & FAST_PATH_STD_DEST_FLAGS) == FAST_PATH_STD_DEST_FLAGS)
- {
- const fetcher_info_t *f;
-
- for (f = &fetchers[0]; f->format != PIXMAN_null; f++)
- {
- if (image->common.extended_format_code == f->format)
- {
- uint8_t *b = (uint8_t *)image->bits.bits;
- int s = image->bits.rowstride * 4;
-
- iter->bits = b + s * iter->y + iter->x * PIXMAN_FORMAT_BPP (f->format) / 8;
- iter->stride = s;
-
- if ((iter->iter_flags & (ITER_IGNORE_RGB | ITER_IGNORE_ALPHA)) ==
- (ITER_IGNORE_RGB | ITER_IGNORE_ALPHA))
- {
- iter->get_scanline = fast_dest_fetch_noop;
- }
- else
- {
- iter->get_scanline = f->get_scanline;
- }
- iter->write_back = f->write_back;
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-
+ { PIXMAN_r5g6b5, IMAGE_FLAGS, ITER_NARROW | ITER_SRC,
+ _pixman_iter_init_bits_stride, fast_fetch_r5g6b5, NULL },
+
+ { PIXMAN_r5g6b5, FAST_PATH_STD_DEST_FLAGS,
+ ITER_NARROW | ITER_DEST,
+ _pixman_iter_init_bits_stride,
+ fast_fetch_r5g6b5, fast_write_back_r5g6b5 },
+
+ { PIXMAN_r5g6b5, FAST_PATH_STD_DEST_FLAGS,
+ ITER_NARROW | ITER_DEST | ITER_IGNORE_RGB | ITER_IGNORE_ALPHA,
+ _pixman_iter_init_bits_stride,
+ fast_dest_fetch_noop, fast_write_back_r5g6b5 },
+
+ { PIXMAN_null },
+};
pixman_implementation_t *
_pixman_implementation_create_fast_path (pixman_implementation_t *fallback)
@@ -2351,8 +2289,7 @@ _pixman_implementation_create_fast_path (pixman_implementation_t *fallback)
pixman_implementation_t *imp = _pixman_implementation_create (fallback, c_fast_paths);
imp->fill = fast_path_fill;
- imp->src_iter_init = fast_src_iter_init;
- imp->dest_iter_init = fast_dest_iter_init;
+ imp->iter_info = fast_iters;
return imp;
}
diff --git a/pixman/pixman/pixman-filter.c b/pixman/pixman/pixman-filter.c
index 26b39d571..5ff7b6eaa 100644
--- a/pixman/pixman/pixman-filter.c
+++ b/pixman/pixman/pixman-filter.c
@@ -28,7 +28,9 @@
#include <stdio.h>
#include <math.h>
#include <assert.h>
+#ifdef HAVE_CONFIG_H
#include <config.h>
+#endif
#include "pixman-private.h"
typedef double (* kernel_func_t) (double x);
diff --git a/pixman/pixman/pixman-general.c b/pixman/pixman/pixman-general.c
index 93a1b9acf..4da5da5e2 100644
--- a/pixman/pixman/pixman-general.c
+++ b/pixman/pixman/pixman-general.c
@@ -37,43 +37,47 @@
#include <string.h>
#include "pixman-private.h"
-static pixman_bool_t
-general_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
+static void
+general_iter_init (pixman_iter_t *iter, const pixman_iter_info_t *info)
{
pixman_image_t *image = iter->image;
- if (image->type == LINEAR)
- _pixman_linear_gradient_iter_init (image, iter);
- else if (image->type == RADIAL)
+ switch (image->type)
+ {
+ case BITS:
+ if ((iter->iter_flags & ITER_SRC) == ITER_SRC)
+ _pixman_bits_image_src_iter_init (image, iter);
+ else
+ _pixman_bits_image_dest_iter_init (image, iter);
+ break;
+
+ case LINEAR:
+ _pixman_linear_gradient_iter_init (image, iter);
+ break;
+
+ case RADIAL:
_pixman_radial_gradient_iter_init (image, iter);
- else if (image->type == CONICAL)
+ break;
+
+ case CONICAL:
_pixman_conical_gradient_iter_init (image, iter);
- else if (image->type == BITS)
- _pixman_bits_image_src_iter_init (image, iter);
- else if (image->type == SOLID)
+ break;
+
+ case SOLID:
_pixman_log_error (FUNC, "Solid image not handled by noop");
- else
- _pixman_log_error (FUNC, "Pixman bug: unknown image type\n");
+ break;
- return TRUE;
+ default:
+ _pixman_log_error (FUNC, "Pixman bug: unknown image type\n");
+ break;
+ }
}
-static pixman_bool_t
-general_dest_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
+static const pixman_iter_info_t general_iters[] =
{
- if (iter->image->type == BITS)
- {
- _pixman_bits_image_dest_iter_init (iter->image, iter);
-
- return TRUE;
- }
- else
- {
- _pixman_log_error (FUNC, "Trying to write to a non-writable image");
-
- return FALSE;
- }
-}
+ { PIXMAN_any, 0, 0, general_iter_init, NULL, NULL },
+ { PIXMAN_null },
+};
typedef struct op_info_t op_info_t;
struct op_info_t
@@ -116,7 +120,7 @@ general_composite_rect (pixman_implementation_t *imp,
pixman_iter_t src_iter, mask_iter, dest_iter;
pixman_combine_32_func_t compose;
pixman_bool_t component_alpha;
- iter_flags_t narrow, src_iter_flags;
+ iter_flags_t width_flag, src_iter_flags;
int Bpp;
int i;
@@ -124,12 +128,12 @@ general_composite_rect (pixman_implementation_t *imp,
(!mask_image || mask_image->common.flags & FAST_PATH_NARROW_FORMAT) &&
(dest_image->common.flags & FAST_PATH_NARROW_FORMAT))
{
- narrow = ITER_NARROW;
+ width_flag = ITER_NARROW;
Bpp = 4;
}
else
{
- narrow = 0;
+ width_flag = ITER_WIDE;
Bpp = 16;
}
@@ -145,7 +149,7 @@ general_composite_rect (pixman_implementation_t *imp,
mask_buffer = src_buffer + width * Bpp;
dest_buffer = mask_buffer + width * Bpp;
- if (!narrow)
+ if (width_flag == ITER_WIDE)
{
/* To make sure there aren't any NANs in the buffers */
memset (src_buffer, 0, width * Bpp);
@@ -154,11 +158,12 @@ general_composite_rect (pixman_implementation_t *imp,
}
/* src iter */
- src_iter_flags = narrow | op_flags[op].src;
+ src_iter_flags = width_flag | op_flags[op].src | ITER_SRC;
- _pixman_implementation_src_iter_init (imp->toplevel, &src_iter, src_image,
- src_x, src_y, width, height,
- src_buffer, src_iter_flags, info->src_flags);
+ _pixman_implementation_iter_init (imp->toplevel, &src_iter, src_image,
+ src_x, src_y, width, height,
+ src_buffer, src_iter_flags,
+ info->src_flags);
/* mask iter */
if ((src_iter_flags & (ITER_IGNORE_ALPHA | ITER_IGNORE_RGB)) ==
@@ -176,17 +181,19 @@ general_composite_rect (pixman_implementation_t *imp,
mask_image->common.component_alpha &&
PIXMAN_FORMAT_RGB (mask_image->bits.format);
- _pixman_implementation_src_iter_init (
- imp->toplevel, &mask_iter, mask_image, mask_x, mask_y, width, height,
- mask_buffer, narrow | (component_alpha? 0 : ITER_IGNORE_RGB), info->mask_flags);
+ _pixman_implementation_iter_init (
+ imp->toplevel, &mask_iter,
+ mask_image, mask_x, mask_y, width, height, mask_buffer,
+ ITER_SRC | width_flag | (component_alpha? 0 : ITER_IGNORE_RGB),
+ info->mask_flags);
/* dest iter */
- _pixman_implementation_dest_iter_init (
+ _pixman_implementation_iter_init (
imp->toplevel, &dest_iter, dest_image, dest_x, dest_y, width, height,
- dest_buffer, narrow | op_flags[op].dst, info->dest_flags);
+ dest_buffer, ITER_DEST | width_flag | op_flags[op].dst, info->dest_flags);
compose = _pixman_implementation_lookup_combiner (
- imp->toplevel, op, component_alpha, narrow);
+ imp->toplevel, op, component_alpha, width_flag != ITER_WIDE);
for (i = 0; i < height; ++i)
{
@@ -219,8 +226,7 @@ _pixman_implementation_create_general (void)
_pixman_setup_combiner_functions_32 (imp);
_pixman_setup_combiner_functions_float (imp);
- imp->src_iter_init = general_src_iter_init;
- imp->dest_iter_init = general_dest_iter_init;
+ imp->iter_info = general_iters;
return imp;
}
diff --git a/pixman/pixman/pixman-image.c b/pixman/pixman/pixman-image.c
index 65041b43b..4f9c2f966 100644
--- a/pixman/pixman/pixman-image.c
+++ b/pixman/pixman/pixman-image.c
@@ -502,8 +502,10 @@ compute_image_info (pixman_image_t *image)
break;
}
- /* Alpha map */
- if (!image->common.alpha_map)
+ /* Alpha maps are only supported for BITS images, so it's always
+ * safe to ignore their presense for non-BITS images
+ */
+ if (!image->common.alpha_map || image->type != BITS)
{
flags |= FAST_PATH_NO_ALPHA_MAP;
}
@@ -918,10 +920,10 @@ _pixman_image_get_solid (pixman_implementation_t *imp,
pixman_iter_t iter;
otherwise:
- _pixman_implementation_src_iter_init (
+ _pixman_implementation_iter_init (
imp, &iter, image, 0, 0, 1, 1,
(uint8_t *)&result,
- ITER_NARROW, image->common.flags);
+ ITER_NARROW | ITER_SRC, image->common.flags);
result = *iter.get_scanline (&iter, NULL);
}
diff --git a/pixman/pixman/pixman-implementation.c b/pixman/pixman/pixman-implementation.c
index cfb82bb1f..160847ad0 100644
--- a/pixman/pixman/pixman-implementation.c
+++ b/pixman/pixman/pixman-implementation.c
@@ -285,18 +285,26 @@ _pixman_implementation_fill (pixman_implementation_t *imp,
return FALSE;
}
-pixman_bool_t
-_pixman_implementation_src_iter_init (pixman_implementation_t *imp,
- pixman_iter_t *iter,
- pixman_image_t *image,
- int x,
- int y,
- int width,
- int height,
- uint8_t *buffer,
- iter_flags_t iter_flags,
- uint32_t image_flags)
+static uint32_t *
+get_scanline_null (pixman_iter_t *iter, const uint32_t *mask)
{
+ return NULL;
+}
+
+void
+_pixman_implementation_iter_init (pixman_implementation_t *imp,
+ pixman_iter_t *iter,
+ pixman_image_t *image,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint8_t *buffer,
+ iter_flags_t iter_flags,
+ uint32_t image_flags)
+{
+ pixman_format_code_t format;
+
iter->image = image;
iter->buffer = (uint32_t *)buffer;
iter->x = x;
@@ -306,47 +314,38 @@ _pixman_implementation_src_iter_init (pixman_implementation_t *imp,
iter->iter_flags = iter_flags;
iter->image_flags = image_flags;
- while (imp)
+ if (!iter->image)
{
- if (imp->src_iter_init && (*imp->src_iter_init) (imp, iter))
- return TRUE;
-
- imp = imp->fallback;
+ iter->get_scanline = get_scanline_null;
+ return;
}
- return FALSE;
-}
-
-pixman_bool_t
-_pixman_implementation_dest_iter_init (pixman_implementation_t *imp,
- pixman_iter_t *iter,
- pixman_image_t *image,
- int x,
- int y,
- int width,
- int height,
- uint8_t *buffer,
- iter_flags_t iter_flags,
- uint32_t image_flags)
-{
- iter->image = image;
- iter->buffer = (uint32_t *)buffer;
- iter->x = x;
- iter->y = y;
- iter->width = width;
- iter->height = height;
- iter->iter_flags = iter_flags;
- iter->image_flags = image_flags;
+ format = iter->image->common.extended_format_code;
while (imp)
{
- if (imp->dest_iter_init && (*imp->dest_iter_init) (imp, iter))
- return TRUE;
-
- imp = imp->fallback;
+ if (imp->iter_info)
+ {
+ const pixman_iter_info_t *info;
+
+ for (info = imp->iter_info; info->format != PIXMAN_null; ++info)
+ {
+ if ((info->format == PIXMAN_any || info->format == format) &&
+ (info->image_flags & image_flags) == info->image_flags &&
+ (info->iter_flags & iter_flags) == info->iter_flags)
+ {
+ iter->get_scanline = info->get_scanline;
+ iter->write_back = info->write_back;
+
+ if (info->initializer)
+ info->initializer (iter, info);
+ return;
+ }
+ }
+ }
+
+ imp = imp->fallback;
}
-
- return FALSE;
}
pixman_bool_t
diff --git a/pixman/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman/pixman-mips-dspr2-asm.S
index 3adbb2afe..866e93e58 100644
--- a/pixman/pixman/pixman-mips-dspr2-asm.S
+++ b/pixman/pixman/pixman-mips-dspr2-asm.S
@@ -699,6 +699,127 @@ LEAF_MIPS_DSPR2(pixman_composite_src_0888_0565_rev_asm_mips)
END(pixman_composite_src_0888_0565_rev_asm_mips)
#endif
+LEAF_MIPS_DSPR2(pixman_composite_src_pixbuf_8888_asm_mips)
+/*
+ * a0 - dst (a8b8g8r8)
+ * a1 - src (a8r8g8b8)
+ * a2 - w
+ */
+
+ SAVE_REGS_ON_STACK 0, v0
+ li v0, 0x00ff00ff
+
+ beqz a2, 3f
+ nop
+ addiu t1, a2, -1
+ beqz t1, 2f
+ nop
+1:
+ lw t0, 0(a1)
+ lw t1, 4(a1)
+ addiu a1, a1, 8
+ addiu a2, a2, -2
+ srl t2, t0, 24
+ srl t3, t1, 24
+
+ MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t2, t3, t0, t1, v0, t4, t5, t6, t7, t8, t9
+
+ sll t0, t0, 8
+ sll t1, t1, 8
+ andi t2, t2, 0xff
+ andi t3, t3, 0xff
+ or t0, t0, t2
+ or t1, t1, t3
+ wsbh t0, t0
+ wsbh t1, t1
+ rotr t0, t0, 16
+ rotr t1, t1, 16
+ sw t0, 0(a0)
+ sw t1, 4(a0)
+
+ addiu t2, a2, -1
+ bgtz t2, 1b
+ addiu a0, a0, 8
+2:
+ beqz a2, 3f
+ nop
+ lw t0, 0(a1)
+ srl t1, t0, 24
+
+ MIPS_UN8x4_MUL_UN8 t0, t1, t0, v0, t3, t4, t5
+
+ sll t0, t0, 8
+ andi t1, t1, 0xff
+ or t0, t0, t1
+ wsbh t0, t0
+ rotr t0, t0, 16
+ sw t0, 0(a0)
+3:
+ RESTORE_REGS_FROM_STACK 0, v0
+ j ra
+ nop
+
+END(pixman_composite_src_pixbuf_8888_asm_mips)
+
+LEAF_MIPS_DSPR2(pixman_composite_src_rpixbuf_8888_asm_mips)
+/*
+ * a0 - dst (a8r8g8b8)
+ * a1 - src (a8r8g8b8)
+ * a2 - w
+ */
+
+ SAVE_REGS_ON_STACK 0, v0
+ li v0, 0x00ff00ff
+
+ beqz a2, 3f
+ nop
+ addiu t1, a2, -1
+ beqz t1, 2f
+ nop
+1:
+ lw t0, 0(a1)
+ lw t1, 4(a1)
+ addiu a1, a1, 8
+ addiu a2, a2, -2
+ srl t2, t0, 24
+ srl t3, t1, 24
+
+ MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t2, t3, t0, t1, v0, t4, t5, t6, t7, t8, t9
+
+ sll t0, t0, 8
+ sll t1, t1, 8
+ andi t2, t2, 0xff
+ andi t3, t3, 0xff
+ or t0, t0, t2
+ or t1, t1, t3
+ rotr t0, t0, 8
+ rotr t1, t1, 8
+ sw t0, 0(a0)
+ sw t1, 4(a0)
+
+ addiu t2, a2, -1
+ bgtz t2, 1b
+ addiu a0, a0, 8
+2:
+ beqz a2, 3f
+ nop
+ lw t0, 0(a1)
+ srl t1, t0, 24
+
+ MIPS_UN8x4_MUL_UN8 t0, t1, t0, v0, t3, t4, t5
+
+ sll t0, t0, 8
+ andi t1, t1, 0xff
+ or t0, t0, t1
+ rotr t0, t0, 8
+ sw t0, 0(a0)
+3:
+ RESTORE_REGS_FROM_STACK 0, v0
+ j ra
+ nop
+
+END(pixman_composite_src_rpixbuf_8888_asm_mips)
+
LEAF_MIPS_DSPR2(pixman_composite_src_n_8_8888_asm_mips)
/*
* a0 - dst (a8r8g8b8)
@@ -840,34 +961,35 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
* a3 - w
*/
- SAVE_REGS_ON_STACK 8, s0, s1, s2, s3, s4, s5
- beqz a3, 4f
+ beqz a3, 8f
nop
+ SAVE_REGS_ON_STACK 8, s0, s1, s2, s3, s4, s5
+
li t6, 0xff
addiu t7, zero, -1 /* t7 = 0xffffffff */
srl t8, a1, 24 /* t8 = srca */
li t9, 0x00ff00ff
+
addiu t1, a3, -1
- beqz t1, 3f /* last pixel */
+ beqz t1, 4f /* last pixel */
nop
- beq t8, t6, 2f /* if (srca == 0xff) */
- nop
-1:
- /* a1 = src */
+
+0:
lw t0, 0(a2) /* t0 = mask */
lw t1, 4(a2) /* t1 = mask */
+ addiu a3, a3, -2 /* w = w - 2 */
or t2, t0, t1
- beqz t2, 12f /* if (t0 == 0) && (t1 == 0) */
+ beqz t2, 3f /* if (t0 == 0) && (t1 == 0) */
addiu a2, a2, 8
- and t3, t0, t1
- move t4, a1 /* t4 = src */
- move t5, a1 /* t5 = src */
+ and t2, t0, t1
+ beq t2, t7, 1f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
+ nop
+
+//if(ma)
lw t2, 0(a0) /* t2 = dst */
- beq t3, t7, 11f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- lw t3, 4(a0) /* t3 = dst */
+ lw t3, 4(a0) /* t3 = dst */
MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t8, t8, t0, t1, t9, s0, s1, s2, s3, s4, s5
-11:
not t0, t0
not t1, t1
MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
@@ -875,62 +997,79 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
addu_s.qb t3, t5, t3
sw t2, 0(a0)
sw t3, 4(a0)
-12:
- addiu a3, a3, -2
addiu t1, a3, -1
- bgtz t1, 1b
+ bgtz t1, 0b
addiu a0, a0, 8
- b 3f
+ b 4f
+ nop
+1:
+//if (t0 == 0xffffffff) && (t1 == 0xffffffff):
+ beq t8, t6, 2f /* if (srca == 0xff) */
nop
-2:
- /* a1 = src */
- lw t0, 0(a2) /* t0 = mask */
- lw t1, 4(a2) /* t1 = mask */
- or t2, t0, t1
- beqz t2, 22f /* if (t0 == 0) & (t1 == 0) */
- addiu a2, a2, 8
- and t2, t0, t1
- move t4, a1
- beq t2, t7, 21f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- move t5, a1
lw t2, 0(a0) /* t2 = dst */
lw t3, 4(a0) /* t3 = dst */
- MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
- not t0, t0
- not t1, t1
- MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
- addu_s.qb t4, t4, t2
- addu_s.qb t5, t5, t3
-21:
- sw t4, 0(a0)
- sw t5, 4(a0)
-22:
- addiu a3, a3, -2
+ not t0, a1
+ not t1, a1
+ srl t0, t0, 24
+ srl t1, t1, 24
+ MIPS_2xUN8x4_MUL_2xUN8 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+ addu_s.qb t2, a1, t2
+ addu_s.qb t3, a1, t3
+ sw t2, 0(a0)
+ sw t3, 4(a0)
addiu t1, a3, -1
- bgtz t1, 2b
+ bgtz t1, 0b
addiu a0, a0, 8
+ b 4f
+ nop
+2:
+ sw a1, 0(a0)
+ sw a1, 4(a0)
3:
- blez a3, 4f
+ addiu t1, a3, -1
+ bgtz t1, 0b
+ addiu a0, a0, 8
+
+4:
+ beqz a3, 7f
nop
/* a1 = src */
- lw t1, 0(a2) /* t1 = mask */
- beqz t1, 4f
+ lw t0, 0(a2) /* t0 = mask */
+ beqz t0, 7f /* if (t0 == 0) */
nop
- move t2, a1 /* t2 = src */
- beq t1, t7, 31f
- lw t0, 0(a0) /* t0 = dst */
-
- MIPS_UN8x4_MUL_UN8x4 a1, t1, t2, t9, t3, t4, t5, t6
- MIPS_UN8x4_MUL_UN8 t1, t8, t1, t9, t3, t4, t5
-31:
- not t1, t1
- MIPS_UN8x4_MUL_UN8x4 t0, t1, t0, t9, t3, t4, t5, t6
- addu_s.qb t0, t2, t0
- sw t0, 0(a0)
-4:
+ beq t0, t7, 5f /* if (t0 == 0xffffffff) */
+ nop
+//if(ma)
+ lw t1, 0(a0) /* t1 = dst */
+ MIPS_UN8x4_MUL_UN8x4 a1, t0, t2, t9, t3, t4, t5, s0
+ MIPS_UN8x4_MUL_UN8 t0, t8, t0, t9, t3, t4, t5
+ not t0, t0
+ MIPS_UN8x4_MUL_UN8x4 t1, t0, t1, t9, t3, t4, t5, s0
+ addu_s.qb t1, t2, t1
+ sw t1, 0(a0)
RESTORE_REGS_FROM_STACK 8, s0, s1, s2, s3, s4, s5
j ra
nop
+5:
+//if (t0 == 0xffffffff)
+ beq t8, t6, 6f /* if (srca == 0xff) */
+ nop
+ lw t1, 0(a0) /* t1 = dst */
+ not t0, a1
+ srl t0, t0, 24
+ MIPS_UN8x4_MUL_UN8 t1, t0, t1, t9, t2, t3, t4
+ addu_s.qb t1, a1, t1
+ sw t1, 0(a0)
+ RESTORE_REGS_FROM_STACK 8, s0, s1, s2, s3, s4, s5
+ j ra
+ nop
+6:
+ sw a1, 0(a0)
+7:
+ RESTORE_REGS_FROM_STACK 8, s0, s1, s2, s3, s4, s5
+8:
+ j ra
+ nop
END(pixman_composite_over_n_8888_8888_ca_asm_mips)
@@ -942,106 +1081,126 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
* a3 - w
*/
- SAVE_REGS_ON_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
- beqz a3, 4f
+ beqz a3, 8f
nop
- li t5, 0xf800f800
- li t6, 0x07e007e0
- li t7, 0x001F001F
- li t9, 0x00ff00ff
+ SAVE_REGS_ON_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
+ li t6, 0xff
+ addiu t7, zero, -1 /* t7 = 0xffffffff */
srl t8, a1, 24 /* t8 = srca */
+ li t9, 0x00ff00ff
+ li s6, 0xf800f800
+ li s7, 0x07e007e0
+ li s8, 0x001F001F
+
addiu t1, a3, -1
- beqz t1, 3f /* last pixel */
+ beqz t1, 4f /* last pixel */
nop
- li s0, 0xff /* s0 = 0xff */
- addiu s1, zero, -1 /* s1 = 0xffffffff */
- beq t8, s0, 2f /* if (srca == 0xff) */
- nop
-1:
- /* a1 = src */
+0:
lw t0, 0(a2) /* t0 = mask */
lw t1, 4(a2) /* t1 = mask */
+ addiu a3, a3, -2 /* w = w - 2 */
or t2, t0, t1
- beqz t2, 12f /* if (t0 == 0) && (t1 == 0) */
+ beqz t2, 3f /* if (t0 == 0) && (t1 == 0) */
addiu a2, a2, 8
- and t3, t0, t1
- move s2, a1 /* s2 = src */
- move s3, a1 /* s3 = src */
+ and t2, t0, t1
+ beq t2, t7, 1f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
+ nop
+
+//if(ma)
lhu t2, 0(a0) /* t2 = dst */
- beq t3, s1, 11f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- lhu t3, 2(a0) /* t3 = dst */
- MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, s2, s3, t9, t4, s4, s5, s6, s7, s8
- MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t8, t8, t0, t1, t9, t4, s4, s5, s6, s7, s8
-11:
+ lhu t3, 2(a0) /* t3 = dst */
+ MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
+ MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t8, t8, t0, t1, t9, s0, s1, s2, s3, s4, s5
not t0, t0
not t1, t1
- CONVERT_2x0565_TO_2x8888 t2, t3, s4, s5, t6, t7, t4, s6, s7, s8
- MIPS_2xUN8x4_MUL_2xUN8x4 s4, s5, t0, t1, s4, s5, t9, t4, s6, s7, s8, t0, t1
- addu_s.qb s2, s2, s4
- addu_s.qb s3, s3, s5
- CONVERT_2x8888_TO_2x0565 s2, s3, t2, t3, t5, t6, t7, s4, s5
+ CONVERT_2x0565_TO_2x8888 t2, t3, t2, t3, s7, s8, s0, s1, s2, s3
+ MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+ addu_s.qb t2, t4, t2
+ addu_s.qb t3, t5, t3
+ CONVERT_2x8888_TO_2x0565 t2, t3, t2, t3, s6, s7, s8, s0, s1
sh t2, 0(a0)
sh t3, 2(a0)
-12:
- addiu a3, a3, -2
addiu t1, a3, -1
- bgtz t1, 1b
+ bgtz t1, 0b
addiu a0, a0, 4
- b 3f
+ b 4f
+ nop
+1:
+//if (t0 == 0xffffffff) && (t1 == 0xffffffff):
+ beq t8, t6, 2f /* if (srca == 0xff) */
nop
-2:
- /* a1 = src */
- lw t0, 0(a2) /* t0 = mask */
- lw t1, 4(a2) /* t1 = mask */
- or t2, t0, t1
- beqz t2, 22f /* if (t0 == 0) & (t1 == 0) */
- addiu a2, a2, 8
- and t3, t0, t1
- move t2, a1
- beq t3, s1, 21f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- move t3, a1
lhu t2, 0(a0) /* t2 = dst */
lhu t3, 2(a0) /* t3 = dst */
- MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, s2, s3, t9, t4, s4, s5, s6, s7, s8
- not t0, t0
- not t1, t1
- CONVERT_2x0565_TO_2x8888 t2, t3, s4, s5, t6, t7, t4, s6, s7, s8
- MIPS_2xUN8x4_MUL_2xUN8x4 s4, s5, t0, t1, s4, s5, t9, t4, s6, s7, s8, t2, t3
- addu_s.qb t2, s2, s4
- addu_s.qb t3, s3, s5
-21:
- CONVERT_2x8888_TO_2x0565 t2, t3, t0, t1, t5, t6, t7, s2, s3
- sh t0, 0(a0)
- sh t1, 2(a0)
-22:
- addiu a3, a3, -2
+ not t0, a1
+ not t1, a1
+ srl t0, t0, 24
+ srl t1, t1, 24
+ CONVERT_2x0565_TO_2x8888 t2, t3, t2, t3, s7, s8, s0, s1, s2, s3
+ MIPS_2xUN8x4_MUL_2xUN8 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+ addu_s.qb t2, a1, t2
+ addu_s.qb t3, a1, t3
+ CONVERT_2x8888_TO_2x0565 t2, t3, t2, t3, s6, s7, s8, s0, s1
+ sh t2, 0(a0)
+ sh t3, 2(a0)
addiu t1, a3, -1
- bgtz t1, 2b
+ bgtz t1, 0b
addiu a0, a0, 4
+ b 4f
+ nop
+2:
+ CONVERT_1x8888_TO_1x0565 a1, t2, s0, s1
+ sh t2, 0(a0)
+ sh t2, 2(a0)
3:
- blez a3, 4f
+ addiu t1, a3, -1
+ bgtz t1, 0b
+ addiu a0, a0, 4
+
+4:
+ beqz a3, 7f
nop
/* a1 = src */
- lw t1, 0(a2) /* t1 = mask */
- beqz t1, 4f
+ lw t0, 0(a2) /* t0 = mask */
+ beqz t0, 7f /* if (t0 == 0) */
nop
- move t2, a1 /* t2 = src */
- beq t1, t7, 31f
- lhu t0, 0(a0) /* t0 = dst */
-
- MIPS_UN8x4_MUL_UN8x4 a1, t1, t2, t9, t3, t4, t5, t6
- MIPS_UN8x4_MUL_UN8 t1, t8, t1, t9, t3, t4, t5
-31:
- not t1, t1
- CONVERT_1x0565_TO_1x8888 t0, s1, s2, s3
- MIPS_UN8x4_MUL_UN8x4 s1, t1, t3, t9, t4, t5, t6, t7
- addu_s.qb t0, t2, t3
- CONVERT_1x8888_TO_1x0565 t0, s1, s2, s3
- sh s1, 0(a0)
-4:
- RESTORE_REGS_FROM_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
+ beq t0, t7, 5f /* if (t0 == 0xffffffff) */
+ nop
+//if(ma)
+ lhu t1, 0(a0) /* t1 = dst */
+ MIPS_UN8x4_MUL_UN8x4 a1, t0, t2, t9, t3, t4, t5, s0
+ MIPS_UN8x4_MUL_UN8 t0, t8, t0, t9, t3, t4, t5
+ not t0, t0
+ CONVERT_1x0565_TO_1x8888 t1, s1, s2, s3
+ MIPS_UN8x4_MUL_UN8x4 s1, t0, s1, t9, t3, t4, t5, s0
+ addu_s.qb s1, t2, s1
+ CONVERT_1x8888_TO_1x0565 s1, t1, s0, s2
+ sh t1, 0(a0)
+ RESTORE_REGS_FROM_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
+ j ra
+ nop
+5:
+//if (t0 == 0xffffffff)
+ beq t8, t6, 6f /* if (srca == 0xff) */
+ nop
+ lhu t1, 0(a0) /* t1 = dst */
+ not t0, a1
+ srl t0, t0, 24
+ CONVERT_1x0565_TO_1x8888 t1, s1, s2, s3
+ MIPS_UN8x4_MUL_UN8 s1, t0, s1, t9, t2, t3, t4
+ addu_s.qb s1, a1, s1
+ CONVERT_1x8888_TO_1x0565 s1, t1, s0, s2
+ sh t1, 0(a0)
+ RESTORE_REGS_FROM_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
+ j ra
+ nop
+6:
+ CONVERT_1x8888_TO_1x0565 a1, t1, s0, s2
+ sh t1, 0(a0)
+7:
+ RESTORE_REGS_FROM_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7, s8
+8:
j ra
nop
@@ -2936,101 +3095,265 @@ END(pixman_composite_over_reverse_n_8888_asm_mips)
LEAF_MIPS_DSPR2(pixman_composite_in_n_8_asm_mips)
/*
* a0 - dst (a8)
- * a1 - src (a8r8g8b8)
+ * a1 - src (32bit constant)
* a2 - w
*/
- beqz a2, 5f
+ li t9, 0x00ff00ff
+ beqz a2, 3f
nop
-
- SAVE_REGS_ON_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7
- move t7, a1
- srl t5, t7, 24
- replv.ph t5, t5
- srl t9, a2, 2 /* t1 = how many multiples of 4 src pixels */
- beqz t9, 2f /* branch if less than 4 src pixels */
+ srl t7, a2, 2 /* t7 = how many multiples of 4 dst pixels */
+ beqz t7, 1f /* branch if less than 4 src pixels */
nop
-1:
- addiu t9, t9, -1
- addiu a2, a2, -4
+ srl t8, a1, 24
+ replv.ph t8, t8
+
+0:
+ beqz t7, 1f
+ addiu t7, t7, -1
lbu t0, 0(a0)
lbu t1, 1(a0)
lbu t2, 2(a0)
lbu t3, 3(a0)
- muleu_s.ph.qbl s0, t0, t5
- muleu_s.ph.qbr s1, t0, t5
- muleu_s.ph.qbl s2, t1, t5
- muleu_s.ph.qbr s3, t1, t5
- muleu_s.ph.qbl s4, t2, t5
- muleu_s.ph.qbr s5, t2, t5
- muleu_s.ph.qbl s6, t3, t5
- muleu_s.ph.qbr s7, t3, t5
-
- shrl.ph t4, s0, 8
- shrl.ph t6, s1, 8
- shrl.ph t7, s2, 8
- shrl.ph t8, s3, 8
- addq.ph t0, s0, t4
- addq.ph t1, s1, t6
- addq.ph t2, s2, t7
- addq.ph t3, s3, t8
- shra_r.ph t0, t0, 8
- shra_r.ph t1, t1, 8
+ precr_sra.ph.w t1, t0, 0
+ precr_sra.ph.w t3, t2, 0
+ precr.qb.ph t0, t3, t1
+
+ muleu_s.ph.qbl t2, t0, t8
+ muleu_s.ph.qbr t3, t0, t8
+ shra_r.ph t4, t2, 8
+ shra_r.ph t5, t3, 8
+ and t4, t4, t9
+ and t5, t5, t9
+ addq.ph t2, t2, t4
+ addq.ph t3, t3, t5
shra_r.ph t2, t2, 8
shra_r.ph t3, t3, 8
- shrl.ph t4, s4, 8
- shrl.ph t6, s5, 8
- shrl.ph t7, s6, 8
- shrl.ph t8, s7, 8
- addq.ph s0, s4, t4
- addq.ph s1, s5, t6
- addq.ph s2, s6, t7
- addq.ph s3, s7, t8
- shra_r.ph t4, s0, 8
- shra_r.ph t6, s1, 8
- shra_r.ph t7, s2, 8
- shra_r.ph t8, s3, 8
-
- precr.qb.ph s0, t0, t1
- precr.qb.ph s1, t2, t3
- precr.qb.ph s2, t4, t6
- precr.qb.ph s3, t7, t8
+ precr.qb.ph t2, t2, t3
- sb s0, 0(a0)
- sb s1, 1(a0)
- sb s2, 2(a0)
- sb s3, 3(a0)
- bgtz t9, 1b
+ sb t2, 0(a0)
+ srl t2, t2, 8
+ sb t2, 1(a0)
+ srl t2, t2, 8
+ sb t2, 2(a0)
+ srl t2, t2, 8
+ sb t2, 3(a0)
+ addiu a2, a2, -4
+ b 0b
addiu a0, a0, 4
-2:
- beqz a2, 4f
+
+1:
+ beqz a2, 3f
nop
-3:
- lbu t1, 0(a0)
+ srl t8, a1, 24
+2:
+ lbu t0, 0(a0)
+
+ mul t2, t0, t8
+ shra_r.ph t3, t2, 8
+ andi t3, t3, 0x00ff
+ addq.ph t2, t2, t3
+ shra_r.ph t2, t2, 8
- muleu_s.ph.qbl t4, t1, t5
- muleu_s.ph.qbr t7, t1, t5
- shrl.ph t6, t4, 8
- shrl.ph t0, t7, 8
- addq.ph t8, t4, t6
- addq.ph t9, t7, t0
- shra_r.ph t8, t8, 8
- shra_r.ph t9, t9, 8
- precr.qb.ph t2, t8, t9
sb t2, 0(a0)
addiu a2, a2, -1
- bnez a2, 3b
+ bnez a2, 2b
addiu a0, a0, 1
-4:
- RESTORE_REGS_FROM_STACK 20, s0, s1, s2, s3, s4, s5, s6, s7
-5:
+
+3:
j ra
nop
END(pixman_composite_in_n_8_asm_mips)
+LEAF_MIPS_DSPR2(pixman_scaled_nearest_scanline_8888_8888_OVER_asm_mips)
+/*
+ * a0 - dst (a8r8g8b8)
+ * a1 - src (a8r8g8b8)
+ * a2 - w
+ * a3 - vx
+ * 16(sp) - unit_x
+ */
+
+ SAVE_REGS_ON_STACK 0, s0, s1, s2, s3
+ lw t8, 16(sp) /* t8 = unit_x */
+ li t6, 0x00ff00ff
+ beqz a2, 3f
+ nop
+ addiu t1, a2, -1
+ beqz t1, 2f
+ nop
+1:
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t0, a1, t0
+ lw t0, 0(t0) /* t0 = source (a8r8g8b8) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+
+ sra t1, a3, 16 /* t0 = vx >> 16 */
+ sll t1, t1, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t1, a1, t1
+ lw t1, 0(t1) /* t1 = source (a8r8g8b8) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+
+ lw t2, 0(a0) /* t2 = destination (a8r8g8b8) */
+ lw t3, 4(a0) /* t3 = destination (a8r8g8b8) */
+
+ OVER_2x8888_2x8888 t0, t1, t2, t3, t4, t5, t6, t7, t9, s0, s1, s2, s3
+
+ sw t4, 0(a0)
+ sw t5, 4(a0)
+ addiu a2, a2, -2
+ addiu t1, a2, -1
+ bgtz t1, 1b
+ addiu a0, a0, 8
+2:
+ beqz a2, 3f
+ nop
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t0, a1, t0
+ lw t0, 0(t0) /* t0 = source (a8r8g8b8) */
+ lw t1, 0(a0) /* t1 = destination (a8r8g8b8) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+
+ OVER_8888_8888 t0, t1, t2, t6, t4, t5, t3, t7
+
+ sw t2, 0(a0)
+3:
+ RESTORE_REGS_FROM_STACK 0, s0, s1, s2, s3
+ j ra
+ nop
+
+END(pixman_scaled_nearest_scanline_8888_8888_OVER_asm_mips)
+
+LEAF_MIPS_DSPR2(pixman_scaled_nearest_scanline_8888_0565_OVER_asm_mips)
+/*
+ * a0 - dst (r5g6b5)
+ * a1 - src (a8r8g8b8)
+ * a2 - w
+ * a3 - vx
+ * 16(sp) - unit_x
+ */
+
+ SAVE_REGS_ON_STACK 24, s0, s1, s2, s3, s4, v0, v1
+ lw t8, 40(sp) /* t8 = unit_x */
+ li t4, 0x00ff00ff
+ li t5, 0xf800f800
+ li t6, 0x07e007e0
+ li t7, 0x001F001F
+ beqz a2, 3f
+ nop
+ addiu t1, a2, -1
+ beqz t1, 2f
+ nop
+1:
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t0, a1, t0
+ lw t0, 0(t0) /* t0 = source (a8r8g8b8) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+ sra t1, a3, 16 /* t0 = vx >> 16 */
+ sll t1, t1, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t1, a1, t1
+ lw t1, 0(t1) /* t1 = source (a8r8g8b8) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+ lhu t2, 0(a0) /* t2 = destination (r5g6b5) */
+ lhu t3, 2(a0) /* t3 = destination (r5g6b5) */
+
+ CONVERT_2x0565_TO_2x8888 t2, t3, v0, v1, t6, t7, s0, s1, s2, s3
+ OVER_2x8888_2x8888 t0, t1, v0, v1, t2, t3, t4, t9, s0, s1, s2, s3, s4
+ CONVERT_2x8888_TO_2x0565 t2, t3, v0, v1, t5, t6, t7, t9, s2
+
+ sh v0, 0(a0)
+ sh v1, 2(a0)
+ addiu a2, a2, -2
+ addiu t1, a2, -1
+ bgtz t1, 1b
+ addiu a0, a0, 4
+2:
+ beqz a2, 3f
+ nop
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 2 /* t0 = t0 * 4 (a8r8g8b8) */
+ addu t0, a1, t0
+ lw t0, 0(t0) /* t0 = source (a8r8g8b8) */
+ lhu t1, 0(a0) /* t1 = destination (r5g6b5) */
+ addu a3, a3, t8 /* a3 = vx + unit_x */
+
+ CONVERT_1x0565_TO_1x8888 t1, t2, t5, t6
+ OVER_8888_8888 t0, t2, t1, t4, t3, t5, t6, t7
+ CONVERT_1x8888_TO_1x0565 t1, t2, t5, t6
+
+ sh t2, 0(a0)
+3:
+ RESTORE_REGS_FROM_STACK 24, s0, s1, s2, s3, s4, v0, v1
+ j ra
+ nop
+
+END(pixman_scaled_nearest_scanline_8888_0565_OVER_asm_mips)
+
+LEAF_MIPS_DSPR2(pixman_scaled_nearest_scanline_0565_8888_SRC_asm_mips)
+/*
+ * a0 - dst (a8r8g8b8)
+ * a1 - src (r5g6b5)
+ * a2 - w
+ * a3 - vx
+ * 16(sp) - unit_x
+ */
+
+ SAVE_REGS_ON_STACK 0, v0
+ beqz a2, 3f
+ nop
+
+ lw v0, 16(sp) /* v0 = unit_x */
+ addiu t1, a2, -1
+ beqz t1, 2f
+ nop
+
+ li t4, 0x07e007e0
+ li t5, 0x001F001F
+1:
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 1 /* t0 = t0 * 2 ((r5g6b5)) */
+ addu t0, a1, t0
+ lhu t0, 0(t0) /* t0 = source ((r5g6b5)) */
+ addu a3, a3, v0 /* a3 = vx + unit_x */
+ sra t1, a3, 16 /* t1 = vx >> 16 */
+ sll t1, t1, 1 /* t1 = t1 * 2 ((r5g6b5)) */
+ addu t1, a1, t1
+ lhu t1, 0(t1) /* t1 = source ((r5g6b5)) */
+ addu a3, a3, v0 /* a3 = vx + unit_x */
+ addiu a2, a2, -2
+
+ CONVERT_2x0565_TO_2x8888 t0, t1, t2, t3, t4, t5, t6, t7, t8, t9
+
+ sw t2, 0(a0)
+ sw t3, 4(a0)
+
+ addiu t2, a2, -1
+ bgtz t2, 1b
+ addiu a0, a0, 8
+2:
+ beqz a2, 3f
+ nop
+ sra t0, a3, 16 /* t0 = vx >> 16 */
+ sll t0, t0, 1 /* t0 = t0 * 2 ((r5g6b5)) */
+ addu t0, a1, t0
+ lhu t0, 0(t0) /* t0 = source ((r5g6b5)) */
+
+ CONVERT_1x0565_TO_1x8888 t0, t1, t2, t3
+
+ sw t1, 0(a0)
+3:
+ RESTORE_REGS_FROM_STACK 0, v0
+ j ra
+ nop
+
+END(pixman_scaled_nearest_scanline_0565_8888_SRC_asm_mips)
+
LEAF_MIPS_DSPR2(pixman_scaled_nearest_scanline_8888_8_0565_OVER_asm_mips)
/*
* a0 - dst (r5g6b5)
diff --git a/pixman/pixman/pixman-mips-dspr2-asm.h b/pixman/pixman/pixman-mips-dspr2-asm.h
index b330c0f0d..cab122d80 100644
--- a/pixman/pixman/pixman-mips-dspr2-asm.h
+++ b/pixman/pixman/pixman-mips-dspr2-asm.h
@@ -354,17 +354,16 @@ LEAF_MIPS32R2(symbol) \
out1_565, out2_565, \
maskR, maskG, maskB, \
scratch1, scratch2
- precrq.ph.w \scratch1, \in2_8888, \in1_8888
- precr_sra.ph.w \in2_8888, \in1_8888, 0
- shll.ph \scratch1, \scratch1, 8
- srl \in2_8888, \in2_8888, 3
- and \scratch2, \in2_8888, \maskB
- and \scratch1, \scratch1, \maskR
- srl \in2_8888, \in2_8888, 2
- and \out2_565, \in2_8888, \maskG
- or \out2_565, \out2_565, \scratch2
- or \out1_565, \out2_565, \scratch1
- srl \out2_565, \out1_565, 16
+ precr.qb.ph \scratch1, \in2_8888, \in1_8888
+ precrq.qb.ph \in2_8888, \in2_8888, \in1_8888
+ and \out1_565, \scratch1, \maskR
+ shrl.ph \scratch1, \scratch1, 3
+ shll.ph \in2_8888, \in2_8888, 3
+ and \scratch1, \scratch1, \maskB
+ or \out1_565, \out1_565, \scratch1
+ and \in2_8888, \in2_8888, \maskG
+ or \out1_565, \out1_565, \in2_8888
+ srl \out2_565, \out1_565, 16
.endm
/*
@@ -587,6 +586,36 @@ LEAF_MIPS32R2(symbol) \
addu_s.qb \out_8888, \out_8888, \s_8888
.endm
+/*
+ * OVER operation on two a8r8g8b8 source pixels (s1_8888 and s2_8888) and two
+ * a8r8g8b8 destination pixels (d1_8888 and d2_8888). It also requires maskLSR
+ * needed for rounding process. maskLSR must have following value:
+ * li maskLSR, 0x00ff00ff
+ */
+.macro OVER_2x8888_2x8888 s1_8888, \
+ s2_8888, \
+ d1_8888, \
+ d2_8888, \
+ out1_8888, \
+ out2_8888, \
+ maskLSR, \
+ scratch1, scratch2, scratch3, \
+ scratch4, scratch5, scratch6
+ not \scratch1, \s1_8888
+ srl \scratch1, \scratch1, 24
+ not \scratch2, \s2_8888
+ srl \scratch2, \scratch2, 24
+ MIPS_2xUN8x4_MUL_2xUN8 \d1_8888, \d2_8888, \
+ \scratch1, \scratch2, \
+ \out1_8888, \out2_8888, \
+ \maskLSR, \
+ \scratch3, \scratch4, \scratch5, \
+ \scratch6, \d1_8888, \d2_8888
+
+ addu_s.qb \out1_8888, \out1_8888, \s1_8888
+ addu_s.qb \out2_8888, \out2_8888, \s2_8888
+.endm
+
.macro MIPS_UN8x4_MUL_UN8_ADD_UN8x4 s_8888, \
m_8, \
d_8888, \
diff --git a/pixman/pixman/pixman-mips-dspr2.c b/pixman/pixman/pixman-mips-dspr2.c
index 1ea244576..e10c9df0a 100644
--- a/pixman/pixman/pixman-mips-dspr2.c
+++ b/pixman/pixman/pixman-mips-dspr2.c
@@ -54,6 +54,10 @@ PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_0888_8888_rev,
PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_0888_0565_rev,
uint8_t, 3, uint16_t, 1)
#endif
+PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_pixbuf_8888,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_rpixbuf_8888,
+ uint32_t, 1, uint32_t, 1)
PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, over_8888_8888,
uint32_t, 1, uint32_t, 1)
PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, over_8888_0565,
@@ -121,6 +125,13 @@ PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_0565_8_0565, uint16_t, 1,
PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8888_8888, uint32_t, 1,
uint32_t, 1, uint32_t, 1)
+PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_DST (8888_8888, OVER,
+ uint32_t, uint32_t)
+PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_DST (8888_0565, OVER,
+ uint32_t, uint16_t)
+PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_DST (0565_8888, SRC,
+ uint16_t, uint32_t)
+
PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_8888, SRC,
uint32_t, uint32_t)
PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_0565, SRC,
@@ -292,6 +303,10 @@ static const pixman_fast_path_t mips_dspr2_fast_paths[] =
PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, mips_composite_src_0888_8888_rev),
PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, mips_composite_src_0888_0565_rev),
#endif
+ PIXMAN_STD_FAST_PATH (SRC, pixbuf, pixbuf, a8r8g8b8, mips_composite_src_pixbuf_8888),
+ PIXMAN_STD_FAST_PATH (SRC, pixbuf, pixbuf, a8b8g8r8, mips_composite_src_rpixbuf_8888),
+ PIXMAN_STD_FAST_PATH (SRC, rpixbuf, rpixbuf, a8r8g8b8, mips_composite_src_rpixbuf_8888),
+ PIXMAN_STD_FAST_PATH (SRC, rpixbuf, rpixbuf, a8b8g8r8, mips_composite_src_pixbuf_8888),
PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8r8g8b8, mips_composite_src_n_8_8888),
PIXMAN_STD_FAST_PATH (SRC, solid, a8, x8r8g8b8, mips_composite_src_n_8_8888),
PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8b8g8r8, mips_composite_src_n_8_8888),
@@ -357,6 +372,22 @@ static const pixman_fast_path_t mips_dspr2_fast_paths[] =
PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, mips_composite_over_reverse_n_8888),
PIXMAN_STD_FAST_PATH (IN, solid, null, a8, mips_composite_in_n_8),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8888),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, mips_8888_8888),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8888),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, mips_8888_8888),
+
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_0565),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_0565),
+
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (SRC, b5g6r5, x8b8g8r8, mips_0565_8888),
+ PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, x8r8g8b8, mips_0565_8888),
+ /* Note: NONE repeat is not supported yet */
+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, r5g6b5, a8r8g8b8, mips_0565_8888),
+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, b5g6r5, a8b8g8r8, mips_0565_8888),
+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, r5g6b5, a8r8g8b8, mips_0565_8888),
+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, b5g6r5, a8b8g8r8, mips_0565_8888),
+
PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_8_0565),
PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_8_0565),
diff --git a/pixman/pixman/pixman-mips-dspr2.h b/pixman/pixman/pixman-mips-dspr2.h
index 4ac9ff95d..955ed70b8 100644
--- a/pixman/pixman/pixman-mips-dspr2.h
+++ b/pixman/pixman/pixman-mips-dspr2.h
@@ -246,6 +246,48 @@ mips_composite_##name (pixman_implementation_t *imp, \
} \
}
+/****************************************************************************/
+
+#define PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_DST(name, op, \
+ src_type, dst_type) \
+void \
+pixman_scaled_nearest_scanline_##name##_##op##_asm_mips ( \
+ dst_type * dst, \
+ const src_type * src, \
+ int32_t w, \
+ pixman_fixed_t vx, \
+ pixman_fixed_t unit_x); \
+ \
+static force_inline void \
+scaled_nearest_scanline_mips_##name##_##op (dst_type * pd, \
+ const src_type * ps, \
+ int32_t w, \
+ pixman_fixed_t vx, \
+ pixman_fixed_t unit_x, \
+ pixman_fixed_t max_vx, \
+ pixman_bool_t zero_src) \
+{ \
+ pixman_scaled_nearest_scanline_##name##_##op##_asm_mips (pd, ps, w, \
+ vx, unit_x); \
+} \
+ \
+FAST_NEAREST_MAINLOOP (mips_##name##_cover_##op, \
+ scaled_nearest_scanline_mips_##name##_##op, \
+ src_type, dst_type, COVER) \
+FAST_NEAREST_MAINLOOP (mips_##name##_none_##op, \
+ scaled_nearest_scanline_mips_##name##_##op, \
+ src_type, dst_type, NONE) \
+FAST_NEAREST_MAINLOOP (mips_##name##_pad_##op, \
+ scaled_nearest_scanline_mips_##name##_##op, \
+ src_type, dst_type, PAD)
+
+/* Provide entries for the fast path table */
+#define PIXMAN_MIPS_SIMPLE_NEAREST_FAST_PATH(op,s,d,func) \
+ SIMPLE_NEAREST_FAST_PATH_COVER (op,s,d,func), \
+ SIMPLE_NEAREST_FAST_PATH_NONE (op,s,d,func), \
+ SIMPLE_NEAREST_FAST_PATH_PAD (op,s,d,func)
+
+
/*****************************************************************************/
#define PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_A8_DST(flags, name, op, \
diff --git a/pixman/pixman/pixman-mmx.c b/pixman/pixman/pixman-mmx.c
index 14790c029..c94d282a9 100644
--- a/pixman/pixman/pixman-mmx.c
+++ b/pixman/pixman/pixman-mmx.c
@@ -301,6 +301,29 @@ negate (__m64 mask)
return _mm_xor_si64 (mask, MC (4x00ff));
}
+/* Computes the product of two unsigned fixed-point 8-bit values from 0 to 1
+ * and maps its result to the same range.
+ *
+ * Jim Blinn gives multiple ways to compute this in "Jim Blinn's Corner:
+ * Notation, Notation, Notation", the first of which is
+ *
+ * prod(a, b) = (a * b + 128) / 255.
+ *
+ * By approximating the division by 255 as 257/65536 it can be replaced by a
+ * multiply and a right shift. This is the implementation that we use in
+ * pix_multiply(), but we _mm_mulhi_pu16() by 257 (part of SSE1 or Extended
+ * 3DNow!, and unavailable at the time of the book's publication) to perform
+ * the multiplication and right shift in a single operation.
+ *
+ * prod(a, b) = ((a * b + 128) * 257) >> 16.
+ *
+ * A third way (how pix_multiply() was implemented prior to 14208344) exists
+ * also that performs the multiplication by 257 with adds and shifts.
+ *
+ * Where temp = a * b + 128
+ *
+ * prod(a, b) = (temp + (temp >> 8)) >> 8.
+ */
static force_inline __m64
pix_multiply (__m64 a, __m64 b)
{
@@ -3899,52 +3922,23 @@ mmx_fetch_a8 (pixman_iter_t *iter, const uint32_t *mask)
return iter->buffer;
}
-typedef struct
-{
- pixman_format_code_t format;
- pixman_iter_get_scanline_t get_scanline;
-} fetcher_info_t;
-
-static const fetcher_info_t fetchers[] =
-{
- { PIXMAN_x8r8g8b8, mmx_fetch_x8r8g8b8 },
- { PIXMAN_r5g6b5, mmx_fetch_r5g6b5 },
- { PIXMAN_a8, mmx_fetch_a8 },
- { PIXMAN_null }
-};
-
-static pixman_bool_t
-mmx_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
-{
- pixman_image_t *image = iter->image;
-
-#define FLAGS \
+#define IMAGE_FLAGS \
(FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM | \
FAST_PATH_BITS_IMAGE | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST)
- if ((iter->iter_flags & ITER_NARROW) &&
- (iter->image_flags & FLAGS) == FLAGS)
- {
- const fetcher_info_t *f;
-
- for (f = &fetchers[0]; f->format != PIXMAN_null; f++)
- {
- if (image->common.extended_format_code == f->format)
- {
- uint8_t *b = (uint8_t *)image->bits.bits;
- int s = image->bits.rowstride * 4;
-
- iter->bits = b + s * iter->y + iter->x * PIXMAN_FORMAT_BPP (f->format) / 8;
- iter->stride = s;
-
- iter->get_scanline = f->get_scanline;
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
+static const pixman_iter_info_t mmx_iters[] =
+{
+ { PIXMAN_x8r8g8b8, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, mmx_fetch_x8r8g8b8, NULL
+ },
+ { PIXMAN_r5g6b5, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, mmx_fetch_r5g6b5, NULL
+ },
+ { PIXMAN_a8, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, mmx_fetch_a8, NULL
+ },
+ { PIXMAN_null },
+};
static const pixman_fast_path_t mmx_fast_paths[] =
{
@@ -4074,7 +4068,7 @@ _pixman_implementation_create_mmx (pixman_implementation_t *fallback)
imp->blt = mmx_blt;
imp->fill = mmx_fill;
- imp->src_iter_init = mmx_src_iter_init;
+ imp->iter_info = mmx_iters;
return imp;
}
diff --git a/pixman/pixman/pixman-noop.c b/pixman/pixman/pixman-noop.c
index e39996d9d..e59890492 100644
--- a/pixman/pixman/pixman-noop.c
+++ b/pixman/pixman/pixman-noop.c
@@ -37,12 +37,6 @@ noop_composite (pixman_implementation_t *imp,
return;
}
-static void
-dest_write_back_direct (pixman_iter_t *iter)
-{
- iter->buffer += iter->image->bits.rowstride;
-}
-
static uint32_t *
noop_get_scanline (pixman_iter_t *iter, const uint32_t *mask)
{
@@ -53,110 +47,102 @@ noop_get_scanline (pixman_iter_t *iter, const uint32_t *mask)
return result;
}
-static uint32_t *
-get_scanline_null (pixman_iter_t *iter, const uint32_t *mask)
-{
- return NULL;
+static void
+noop_init_solid_narrow (pixman_iter_t *iter,
+ const pixman_iter_info_t *info)
+{
+ pixman_image_t *image = iter->image;
+ uint32_t *buffer = iter->buffer;
+ uint32_t *end = buffer + iter->width;
+ uint32_t color;
+
+ if (iter->image->type == SOLID)
+ color = image->solid.color_32;
+ else
+ color = image->bits.fetch_pixel_32 (&image->bits, 0, 0);
+
+ while (buffer < end)
+ *(buffer++) = color;
}
-static pixman_bool_t
-noop_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
+static void
+noop_init_solid_wide (pixman_iter_t *iter,
+ const pixman_iter_info_t *info)
{
pixman_image_t *image = iter->image;
+ argb_t *buffer = (argb_t *)iter->buffer;
+ argb_t *end = buffer + iter->width;
+ argb_t color;
-#define FLAGS \
- (FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM)
-
- if (!image)
- {
- iter->get_scanline = get_scanline_null;
- }
- else if ((iter->iter_flags & (ITER_IGNORE_ALPHA | ITER_IGNORE_RGB)) ==
- (ITER_IGNORE_ALPHA | ITER_IGNORE_RGB))
- {
- iter->get_scanline = _pixman_iter_get_scanline_noop;
- }
- else if (image->common.extended_format_code == PIXMAN_solid &&
- (iter->image->type == SOLID ||
- (iter->image_flags & FAST_PATH_NO_ALPHA_MAP)))
- {
- if (iter->iter_flags & ITER_NARROW)
- {
- uint32_t *buffer = iter->buffer;
- uint32_t *end = buffer + iter->width;
- uint32_t color;
-
- if (image->type == SOLID)
- color = image->solid.color_32;
- else
- color = image->bits.fetch_pixel_32 (&image->bits, 0, 0);
-
- while (buffer < end)
- *(buffer++) = color;
- }
- else
- {
- argb_t *buffer = (argb_t *)iter->buffer;
- argb_t *end = buffer + iter->width;
- argb_t color;
-
- if (image->type == SOLID)
- color = image->solid.color_float;
- else
- color = image->bits.fetch_pixel_float (&image->bits, 0, 0);
-
- while (buffer < end)
- *(buffer++) = color;
- }
-
- iter->get_scanline = _pixman_iter_get_scanline_noop;
- }
- else if (image->common.extended_format_code == PIXMAN_a8r8g8b8 &&
- (iter->iter_flags & ITER_NARROW) &&
- (iter->image_flags & FLAGS) == FLAGS &&
- iter->x >= 0 && iter->y >= 0 &&
- iter->x + iter->width <= image->bits.width &&
- iter->y + iter->height <= image->bits.height)
- {
- iter->buffer =
- image->bits.bits + iter->y * image->bits.rowstride + iter->x;
-
- iter->get_scanline = noop_get_scanline;
- }
+ if (iter->image->type == SOLID)
+ color = image->solid.color_float;
else
- {
- return FALSE;
- }
+ color = image->bits.fetch_pixel_float (&image->bits, 0, 0);
- return TRUE;
+ while (buffer < end)
+ *(buffer++) = color;
}
-static pixman_bool_t
-noop_dest_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
+static void
+noop_init_direct_buffer (pixman_iter_t *iter, const pixman_iter_info_t *info)
{
pixman_image_t *image = iter->image;
- uint32_t image_flags = iter->image_flags;
- uint32_t iter_flags = iter->iter_flags;
-
- if ((image_flags & FAST_PATH_STD_DEST_FLAGS) == FAST_PATH_STD_DEST_FLAGS &&
- (iter_flags & ITER_NARROW) == ITER_NARROW &&
- ((image->common.extended_format_code == PIXMAN_a8r8g8b8) ||
- (image->common.extended_format_code == PIXMAN_x8r8g8b8 &&
- (iter_flags & (ITER_LOCALIZED_ALPHA)))))
- {
- iter->buffer = image->bits.bits + iter->y * image->bits.rowstride + iter->x;
-
- iter->get_scanline = _pixman_iter_get_scanline_noop;
- iter->write_back = dest_write_back_direct;
-
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+
+ iter->buffer =
+ image->bits.bits + iter->y * image->bits.rowstride + iter->x;
}
+static void
+dest_write_back_direct (pixman_iter_t *iter)
+{
+ iter->buffer += iter->image->bits.rowstride;
+}
+
+static const pixman_iter_info_t noop_iters[] =
+{
+ /* Source iters */
+ { PIXMAN_any,
+ 0, ITER_IGNORE_ALPHA | ITER_IGNORE_RGB | ITER_SRC,
+ NULL,
+ _pixman_iter_get_scanline_noop,
+ NULL
+ },
+ { PIXMAN_solid,
+ FAST_PATH_NO_ALPHA_MAP, ITER_NARROW | ITER_SRC,
+ noop_init_solid_narrow,
+ _pixman_iter_get_scanline_noop,
+ NULL,
+ },
+ { PIXMAN_solid,
+ FAST_PATH_NO_ALPHA_MAP, ITER_WIDE | ITER_SRC,
+ noop_init_solid_wide,
+ _pixman_iter_get_scanline_noop,
+ NULL
+ },
+ { PIXMAN_a8r8g8b8,
+ FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM |
+ FAST_PATH_BITS_IMAGE | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST,
+ ITER_NARROW | ITER_SRC,
+ noop_init_direct_buffer,
+ noop_get_scanline,
+ NULL
+ },
+ /* Dest iters */
+ { PIXMAN_a8r8g8b8,
+ FAST_PATH_STD_DEST_FLAGS, ITER_NARROW | ITER_DEST,
+ noop_init_direct_buffer,
+ _pixman_iter_get_scanline_noop,
+ dest_write_back_direct
+ },
+ { PIXMAN_x8r8g8b8,
+ FAST_PATH_STD_DEST_FLAGS, ITER_NARROW | ITER_DEST | ITER_LOCALIZED_ALPHA,
+ noop_init_direct_buffer,
+ _pixman_iter_get_scanline_noop,
+ dest_write_back_direct
+ },
+ { PIXMAN_null },
+};
+
static const pixman_fast_path_t noop_fast_paths[] =
{
{ PIXMAN_OP_DST, PIXMAN_any, 0, PIXMAN_any, 0, PIXMAN_any, 0, noop_composite },
@@ -169,8 +155,7 @@ _pixman_implementation_create_noop (pixman_implementation_t *fallback)
pixman_implementation_t *imp =
_pixman_implementation_create (fallback, noop_fast_paths);
- imp->src_iter_init = noop_src_iter_init;
- imp->dest_iter_init = noop_dest_iter_init;
+ imp->iter_info = noop_iters;
return imp;
}
diff --git a/pixman/pixman/pixman-private.h b/pixman/pixman/pixman-private.h
index 6d9c05321..af4a0b6e0 100644
--- a/pixman/pixman/pixman-private.h
+++ b/pixman/pixman/pixman-private.h
@@ -212,7 +212,8 @@ typedef void (* pixman_iter_write_back_t) (pixman_iter_t *iter);
typedef enum
{
- ITER_NARROW = (1 << 0),
+ ITER_NARROW = (1 << 0),
+ ITER_WIDE = (1 << 1),
/* "Localized alpha" is when the alpha channel is used only to compute
* the alpha value of the destination. This means that the computation
@@ -229,9 +230,15 @@ typedef enum
* we can treat it as if it were ARGB, which means in some cases we can
* avoid copying it to a temporary buffer.
*/
- ITER_LOCALIZED_ALPHA = (1 << 1),
- ITER_IGNORE_ALPHA = (1 << 2),
- ITER_IGNORE_RGB = (1 << 3)
+ ITER_LOCALIZED_ALPHA = (1 << 2),
+ ITER_IGNORE_ALPHA = (1 << 3),
+ ITER_IGNORE_RGB = (1 << 4),
+
+ /* These indicate whether the iterator is for a source
+ * or a destination image
+ */
+ ITER_SRC = (1 << 5),
+ ITER_DEST = (1 << 6)
} iter_flags_t;
struct pixman_iter_t
@@ -255,6 +262,19 @@ struct pixman_iter_t
int stride;
};
+typedef struct pixman_iter_info_t pixman_iter_info_t;
+typedef void (* pixman_iter_initializer_t) (pixman_iter_t *iter,
+ const pixman_iter_info_t *info);
+struct pixman_iter_info_t
+{
+ pixman_format_code_t format;
+ uint32_t image_flags;
+ iter_flags_t iter_flags;
+ pixman_iter_initializer_t initializer;
+ pixman_iter_get_scanline_t get_scanline;
+ pixman_iter_write_back_t write_back;
+};
+
void
_pixman_bits_image_setup_accessors (bits_image_t *image);
@@ -454,8 +474,6 @@ typedef pixman_bool_t (*pixman_fill_func_t) (pixman_implementation_t *imp,
int width,
int height,
uint32_t filler);
-typedef pixman_bool_t (*pixman_iter_init_func_t) (pixman_implementation_t *imp,
- pixman_iter_t *iter);
void _pixman_setup_combiner_functions_32 (pixman_implementation_t *imp);
void _pixman_setup_combiner_functions_float (pixman_implementation_t *imp);
@@ -477,11 +495,10 @@ struct pixman_implementation_t
pixman_implementation_t * toplevel;
pixman_implementation_t * fallback;
const pixman_fast_path_t * fast_paths;
+ const pixman_iter_info_t * iter_info;
pixman_blt_func_t blt;
pixman_fill_func_t fill;
- pixman_iter_init_func_t src_iter_init;
- pixman_iter_init_func_t dest_iter_init;
pixman_combine_32_func_t combine_32[PIXMAN_N_OPERATORS];
pixman_combine_32_func_t combine_32_ca[PIXMAN_N_OPERATORS];
@@ -542,29 +559,17 @@ _pixman_implementation_fill (pixman_implementation_t *imp,
int height,
uint32_t filler);
-pixman_bool_t
-_pixman_implementation_src_iter_init (pixman_implementation_t *imp,
- pixman_iter_t *iter,
- pixman_image_t *image,
- int x,
- int y,
- int width,
- int height,
- uint8_t *buffer,
- iter_flags_t flags,
- uint32_t image_flags);
-
-pixman_bool_t
-_pixman_implementation_dest_iter_init (pixman_implementation_t *imp,
- pixman_iter_t *iter,
- pixman_image_t *image,
- int x,
- int y,
- int width,
- int height,
- uint8_t *buffer,
- iter_flags_t flags,
- uint32_t image_flags);
+void
+_pixman_implementation_iter_init (pixman_implementation_t *imp,
+ pixman_iter_t *iter,
+ pixman_image_t *image,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint8_t *buffer,
+ iter_flags_t flags,
+ uint32_t image_flags);
/* Specific implementations */
pixman_implementation_t *
@@ -647,6 +652,9 @@ _pixman_compute_composite_region32 (pixman_region32_t * region,
uint32_t *
_pixman_iter_get_scanline_noop (pixman_iter_t *iter, const uint32_t *mask);
+void
+_pixman_iter_init_bits_stride (pixman_iter_t *iter, const pixman_iter_info_t *info);
+
/* These "formats" all have depth 0, so they
* will never clash with any real ones
*/
diff --git a/pixman/pixman/pixman-region.c b/pixman/pixman/pixman-region.c
index 2d6f1571c..59bc9c797 100644
--- a/pixman/pixman/pixman-region.c
+++ b/pixman/pixman/pixman-region.c
@@ -1858,7 +1858,7 @@ pixman_region_subtract_o (region_type_t * region,
else if (r2->x1 <= x1)
{
/*
- * Subtrahend preceeds minuend: nuke left edge of minuend.
+ * Subtrahend precedes minuend: nuke left edge of minuend.
*/
x1 = r2->x2;
if (x1 >= r1->x2)
@@ -1982,7 +1982,7 @@ PREFIX (_subtract) (region_type_t *reg_d,
}
/* Add those rectangles in region 1 that aren't in region 2,
- do yucky substraction for overlaps, and
+ do yucky subtraction for overlaps, and
just throw away rectangles in region 2 that aren't in region 1 */
if (!pixman_op (reg_d, reg_m, reg_s, pixman_region_subtract_o, TRUE, FALSE))
return FALSE;
@@ -2042,7 +2042,7 @@ PREFIX (_inverse) (region_type_t *new_reg, /* Destination region */
}
/* Add those rectangles in region 1 that aren't in region 2,
- * do yucky substraction for overlaps, and
+ * do yucky subtraction for overlaps, and
* just throw away rectangles in region 2 that aren't in region 1
*/
inv_reg.extents = *inv_rect;
diff --git a/pixman/pixman/pixman-sse2.c b/pixman/pixman/pixman-sse2.c
index c7e9a4bb2..dde923524 100644
--- a/pixman/pixman/pixman-sse2.c
+++ b/pixman/pixman/pixman-sse2.c
@@ -5554,19 +5554,27 @@ FAST_NEAREST_MAINLOOP_COMMON (sse2_8888_n_8888_normal_OVER,
scaled_nearest_scanline_sse2_8888_n_8888_OVER,
uint32_t, uint32_t, uint32_t, NORMAL, TRUE, TRUE)
-#define BMSK ((1 << BILINEAR_INTERPOLATION_BITS) - 1)
-
-#define BILINEAR_DECLARE_VARIABLES \
+#if BILINEAR_INTERPOLATION_BITS < 8
+# define BILINEAR_DECLARE_VARIABLES \
const __m128i xmm_wt = _mm_set_epi16 (wt, wt, wt, wt, wt, wt, wt, wt); \
const __m128i xmm_wb = _mm_set_epi16 (wb, wb, wb, wb, wb, wb, wb, wb); \
- const __m128i xmm_xorc8 = _mm_set_epi16 (0, 0, 0, 0, BMSK, BMSK, BMSK, BMSK);\
- const __m128i xmm_addc8 = _mm_set_epi16 (0, 0, 0, 0, 1, 1, 1, 1); \
- const __m128i xmm_xorc7 = _mm_set_epi16 (0, BMSK, 0, BMSK, 0, BMSK, 0, BMSK);\
- const __m128i xmm_addc7 = _mm_set_epi16 (0, 1, 0, 1, 0, 1, 0, 1); \
+ const __m128i xmm_addc = _mm_set_epi16 (0, 1, 0, 1, 0, 1, 0, 1); \
+ const __m128i xmm_ux = _mm_set_epi16 (unit_x, -unit_x, unit_x, -unit_x, \
+ unit_x, -unit_x, unit_x, -unit_x); \
+ const __m128i xmm_zero = _mm_setzero_si128 (); \
+ __m128i xmm_x = _mm_set_epi16 (vx, -(vx + 1), vx, -(vx + 1), \
+ vx, -(vx + 1), vx, -(vx + 1))
+#else
+# define BILINEAR_DECLARE_VARIABLES \
+ const __m128i xmm_wt = _mm_set_epi16 (wt, wt, wt, wt, wt, wt, wt, wt); \
+ const __m128i xmm_wb = _mm_set_epi16 (wb, wb, wb, wb, wb, wb, wb, wb); \
+ const __m128i xmm_addc = _mm_set_epi16 (0, 0, 0, 0, 1, 1, 1, 1); \
const __m128i xmm_ux = _mm_set_epi16 (unit_x, unit_x, unit_x, unit_x, \
- unit_x, unit_x, unit_x, unit_x); \
+ -unit_x, -unit_x, -unit_x, -unit_x); \
const __m128i xmm_zero = _mm_setzero_si128 (); \
- __m128i xmm_x = _mm_set_epi16 (vx, vx, vx, vx, vx, vx, vx, vx)
+ __m128i xmm_x = _mm_set_epi16 (vx, vx, vx, vx, \
+ -(vx + 1), -(vx + 1), -(vx + 1), -(vx + 1))
+#endif
#define BILINEAR_INTERPOLATE_ONE_PIXEL(pix) \
do { \
@@ -5585,8 +5593,8 @@ do { \
if (BILINEAR_INTERPOLATION_BITS < 8) \
{ \
/* calculate horizontal weights */ \
- xmm_wh = _mm_add_epi16 (xmm_addc7, _mm_xor_si128 (xmm_xorc7, \
- _mm_srli_epi16 (xmm_x, 16 - BILINEAR_INTERPOLATION_BITS))); \
+ xmm_wh = _mm_add_epi16 (xmm_addc, _mm_srli_epi16 (xmm_x, \
+ 16 - BILINEAR_INTERPOLATION_BITS)); \
xmm_x = _mm_add_epi16 (xmm_x, xmm_ux); \
/* horizontal interpolation */ \
a = _mm_madd_epi16 (_mm_unpackhi_epi16 (_mm_shuffle_epi32 ( \
@@ -5595,8 +5603,8 @@ do { \
else \
{ \
/* calculate horizontal weights */ \
- xmm_wh = _mm_add_epi16 (xmm_addc8, _mm_xor_si128 (xmm_xorc8, \
- _mm_srli_epi16 (xmm_x, 16 - BILINEAR_INTERPOLATION_BITS))); \
+ xmm_wh = _mm_add_epi16 (xmm_addc, _mm_srli_epi16 (xmm_x, \
+ 16 - BILINEAR_INTERPOLATION_BITS)); \
xmm_x = _mm_add_epi16 (xmm_x, xmm_ux); \
/* horizontal interpolation */ \
xmm_lo = _mm_mullo_epi16 (a, xmm_wh); \
@@ -6332,52 +6340,23 @@ sse2_fetch_a8 (pixman_iter_t *iter, const uint32_t *mask)
return iter->buffer;
}
-typedef struct
-{
- pixman_format_code_t format;
- pixman_iter_get_scanline_t get_scanline;
-} fetcher_info_t;
-
-static const fetcher_info_t fetchers[] =
-{
- { PIXMAN_x8r8g8b8, sse2_fetch_x8r8g8b8 },
- { PIXMAN_r5g6b5, sse2_fetch_r5g6b5 },
- { PIXMAN_a8, sse2_fetch_a8 },
- { PIXMAN_null }
-};
-
-static pixman_bool_t
-sse2_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
-{
- pixman_image_t *image = iter->image;
-
-#define FLAGS \
+#define IMAGE_FLAGS \
(FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM | \
FAST_PATH_BITS_IMAGE | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST)
- if ((iter->iter_flags & ITER_NARROW) &&
- (iter->image_flags & FLAGS) == FLAGS)
- {
- const fetcher_info_t *f;
-
- for (f = &fetchers[0]; f->format != PIXMAN_null; f++)
- {
- if (image->common.extended_format_code == f->format)
- {
- uint8_t *b = (uint8_t *)image->bits.bits;
- int s = image->bits.rowstride * 4;
-
- iter->bits = b + s * iter->y + iter->x * PIXMAN_FORMAT_BPP (f->format) / 8;
- iter->stride = s;
-
- iter->get_scanline = f->get_scanline;
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
+static const pixman_iter_info_t sse2_iters[] =
+{
+ { PIXMAN_x8r8g8b8, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, sse2_fetch_x8r8g8b8, NULL
+ },
+ { PIXMAN_r5g6b5, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, sse2_fetch_r5g6b5, NULL
+ },
+ { PIXMAN_a8, IMAGE_FLAGS, ITER_NARROW,
+ _pixman_iter_init_bits_stride, sse2_fetch_a8, NULL
+ },
+ { PIXMAN_null },
+};
#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
__attribute__((__force_align_arg_pointer__))
@@ -6435,7 +6414,7 @@ _pixman_implementation_create_sse2 (pixman_implementation_t *fallback)
imp->blt = sse2_blt;
imp->fill = sse2_fill;
- imp->src_iter_init = sse2_src_iter_init;
+ imp->iter_info = sse2_iters;
return imp;
}
diff --git a/pixman/pixman/pixman-utils.c b/pixman/pixman/pixman-utils.c
index f31171f6d..98723a800 100644
--- a/pixman/pixman/pixman-utils.c
+++ b/pixman/pixman/pixman-utils.c
@@ -214,6 +214,17 @@ _pixman_iter_get_scanline_noop (pixman_iter_t *iter, const uint32_t *mask)
return iter->buffer;
}
+void
+_pixman_iter_init_bits_stride (pixman_iter_t *iter, const pixman_iter_info_t *info)
+{
+ pixman_image_t *image = iter->image;
+ uint8_t *b = (uint8_t *)image->bits.bits;
+ int s = image->bits.rowstride * 4;
+
+ iter->bits = b + s * iter->y + iter->x * PIXMAN_FORMAT_BPP (info->format) / 8;
+ iter->stride = s;
+}
+
#define N_TMP_BOXES (16)
pixman_bool_t
diff --git a/pixman/pixman/pixman-vmx.c b/pixman/pixman/pixman-vmx.c
index 6868704a8..f629003ab 100644
--- a/pixman/pixman/pixman-vmx.c
+++ b/pixman/pixman/pixman-vmx.c
@@ -25,7 +25,9 @@
* Based on fbmmx.c by Owen Taylor, Søren Sandmann and Nicholas Miell
*/
+#ifdef HAVE_CONFIG_H
#include <config.h>
+#endif
#include "pixman-private.h"
#include "pixman-combine32.h"
#include <altivec.h>
diff --git a/pixman/pixman/pixman.c b/pixman/pixman/pixman.c
index 184f0c4e6..9555ceaaf 100644
--- a/pixman/pixman/pixman.c
+++ b/pixman/pixman/pixman.c
@@ -605,7 +605,7 @@ pixman_image_composite32 (pixman_op_t op,
else
{
mask_format = PIXMAN_null;
- info.mask_flags = FAST_PATH_IS_OPAQUE;
+ info.mask_flags = FAST_PATH_IS_OPAQUE | FAST_PATH_NO_ALPHA_MAP;
}
dest_format = dest->common.extended_format_code;
diff --git a/pixman/pixman/refactor b/pixman/pixman/refactor
deleted file mode 100644
index 52fceab17..000000000
--- a/pixman/pixman/refactor
+++ /dev/null
@@ -1,478 +0,0 @@
-Roadmap
-
-- Move all the fetchers etc. into pixman-image to make pixman-compose.c
- less intimidating.
-
- DONE
-
-- Make combiners for unified alpha take a mask argument. That way
- we won't need two separate paths for unified vs component in the
- general compositing code.
-
- DONE, except that the Altivec code needs to be updated. Luca is
- looking into that.
-
-- Delete separate 'unified alpha' path
-
- DONE
-
-- Split images into their own files
-
- DONE
-
-- Split the gradient walker code out into its own file
-
- DONE
-
-- Add scanline getters per image
-
- DONE
-
-- Generic 64 bit fetcher
-
- DONE
-
-- Split fast path tables into their respective architecture dependent
- files.
-
-See "Render Algorithm" below for rationale
-
-Images will eventually have these virtual functions:
-
- get_scanline()
- get_scanline_wide()
- get_pixel()
- get_pixel_wide()
- get_untransformed_pixel()
- get_untransformed_pixel_wide()
- get_unfiltered_pixel()
- get_unfiltered_pixel_wide()
-
- store_scanline()
- store_scanline_wide()
-
-1.
-
-Initially we will just have get_scanline() and get_scanline_wide();
-these will be based on the ones in pixman-compose. Hopefully this will
-reduce the complexity in pixman_composite_rect_general().
-
-Note that there is access considerations - the compose function is
-being compiled twice.
-
-
-2.
-
-Split image types into their own source files. Export noop virtual
-reinit() call. Call this whenever a property of the image changes.
-
-
-3.
-
-Split the get_scanline() call into smaller functions that are
-initialized by the reinit() call.
-
-The Render Algorithm:
- (first repeat, then filter, then transform, then clip)
-
-Starting from a destination pixel (x, y), do
-
- 1 x = x - xDst + xSrc
- y = y - yDst + ySrc
-
- 2 reject pixel that is outside the clip
-
- This treats clipping as something that happens after
- transformation, which I think is correct for client clips. For
- hierarchy clips it is wrong, but who really cares? Without
- GraphicsExposes hierarchy clips are basically irrelevant. Yes,
- you could imagine cases where the pixels of a subwindow of a
- redirected, transformed window should be treated as
- transparent. I don't really care
-
- Basically, I think the render spec should say that pixels that
- are unavailable due to the hierarcy have undefined content,
- and that GraphicsExposes are not generated. Ie., basically
- that using non-redirected windows as sources is fail. This is
- at least consistent with the current implementation and we can
- update the spec later if someone makes it work.
-
- The implication for render is that it should stop passing the
- hierarchy clip to pixman. In pixman, if a souce image has a
- clip it should be used in computing the composite region and
- nowhere else, regardless of what "has_client_clip" says. The
- default should be for there to not be any clip.
-
- I would really like to get rid of the client clip as well for
- source images, but unfortunately there is at least one
- application in the wild that uses them.
-
- 3 Transform pixel: (x, y) = T(x, y)
-
- 4 Call p = GetUntransformedPixel (x, y)
-
- 5 If the image has an alpha map, then
-
- Call GetUntransformedPixel (x, y) on the alpha map
-
- add resulting alpha channel to p
-
- return p
-
- Where GetUnTransformedPixel is:
-
- 6 switch (filter)
- {
- case NEAREST:
- return GetUnfilteredPixel (x, y);
- break;
-
- case BILINEAR:
- return GetUnfilteredPixel (...) // 4 times
- break;
-
- case CONVOLUTION:
- return GetUnfilteredPixel (...) // as many times as necessary.
- break;
- }
-
- Where GetUnfilteredPixel (x, y) is
-
- 7 switch (repeat)
- {
- case REPEAT_NORMAL:
- case REPEAT_PAD:
- case REPEAT_REFLECT:
- // adjust x, y as appropriate
- break;
-
- case REPEAT_NONE:
- if (x, y) is outside image bounds
- return 0;
- break;
- }
-
- return GetRawPixel(x, y)
-
- Where GetRawPixel (x, y) is
-
- 8 Compute the pixel in question, depending on image type.
-
-For gradients, repeat has a totally different meaning, so
-UnfilteredPixel() and RawPixel() must be the same function so that
-gradients can do their own repeat algorithm.
-
-So, the GetRawPixel
-
- for bits must deal with repeats
- for gradients must deal with repeats (differently)
- for solids, should ignore repeats.
-
- for polygons, when we add them, either ignore repeats or do
- something similar to bits (in which case, we may want an extra
- layer of indirection to modify the coordinates).
-
-It is then possible to build things like "get scanline" or "get tile" on
-top of this. In the simplest case, just repeatedly calling GetPixel()
-would work, but specialized get_scanline()s or get_tile()s could be
-plugged in for common cases.
-
-By not plugging anything in for images with access functions, we only
-have to compile the pixel functions twice, not the scanline functions.
-
-And we can get rid of fetchers for the bizarre formats that no one
-uses. Such as b2g3r3 etc. r1g2b1? Seriously? It is also worth
-considering a generic format based pixel fetcher for these edge cases.
-
-Since the actual routines depend on the image attributes, the images
-must be notified when those change and update their function pointers
-appropriately. So there should probably be a virtual function called
-(* reinit) or something like that.
-
-There will also be wide fetchers for both pixels and lines. The line
-fetcher will just call the wide pixel fetcher. The wide pixel fetcher
-will just call expand, except for 10 bit formats.
-
-Rendering pipeline:
-
-Drawable:
- 0. if (picture has alpha map)
- 0.1. Position alpha map according to the alpha_x/alpha_y
- 0.2. Where the two drawables intersect, the alpha channel
- Replace the alpha channel of source with the one
- from the alpha map. Replacement only takes place
- in the intersection of the two drawables' geometries.
- 1. Repeat the drawable according to the repeat attribute
- 2. Reconstruct a continuous image according to the filter
- 3. Transform according to the transform attribute
- 4. Position image such that src_x, src_y is over dst_x, dst_y
- 5. Sample once per destination pixel
- 6. Clip. If a pixel is not within the source clip, then no
- compositing takes place at that pixel. (Ie., it's *not*
- treated as 0).
-
- Sampling a drawable:
-
- - If the channel does not have an alpha channel, the pixels in it
- are treated as opaque.
-
- Note on reconstruction:
-
- - The top left pixel has coordinates (0.5, 0.5) and pixels are
- spaced 1 apart.
-
-Gradient:
- 1. Unless gradient type is conical, repeat the underlying (0, 1)
- gradient according to the repeat attribute
- 2. Integrate the gradient across the plane according to type.
- 3. Transform according to transform attribute
- 4. Position gradient
- 5. Sample once per destination pixel.
- 6. Clip
-
-Solid Fill:
- 1. Repeat has no effect
- 2. Image is already continuous and defined for the entire plane
- 3. Transform has no effect
- 4. Positioning has no effect
- 5. Sample once per destination pixel.
- 6. Clip
-
-Polygon:
- 1. Repeat has no effect
- 2. Image is already continuous and defined on the whole plane
- 3. Transform according to transform attribute
- 4. Position image
- 5. Supersample 15x17 per destination pixel.
- 6. Clip
-
-Possibly interesting additions:
- - More general transformations, such as warping, or general
- shading.
-
- - Shader image where a function is called to generate the
- pixel (ie., uploading assembly code).
-
- - Resampling kernels
-
- In principle the polygon image uses a 15x17 box filter for
- resampling. If we allow general resampling filters, then we
- get all the various antialiasing types for free.
-
- Bilinear downsampling looks terrible and could be much
- improved by a resampling filter. NEAREST reconstruction
- combined with a box resampling filter is what GdkPixbuf
- does, I believe.
-
- Useful for high frequency gradients as well.
-
- (Note that the difference between a reconstruction and a
- resampling filter is mainly where in the pipeline they
- occur. High quality resampling should use a correctly
- oriented kernel so it should happen after transformation.
-
- An implementation can transform the resampling kernel and
- convolve it with the reconstruction if it so desires, but it
- will need to deal with the fact that the resampling kernel
- will not necessarily be pixel aligned.
-
- "Output kernels"
-
- One could imagine doing the resampling after compositing,
- ie., for each destination pixel sample each source image 16
- times, then composite those subpixels individually, then
- finally apply a kernel.
-
- However, this is effectively the same as full screen
- antialiasing, which is a simpler way to think about it. So
- resampling kernels may make sense for individual images, but
- not as a post-compositing step.
-
- Fullscreen AA is inefficient without chained compositing
- though. Consider an (image scaled up to oversample size IN
- some polygon) scaled down to screen size. With the current
- implementation, there will be a huge temporary. With chained
- compositing, the whole thing ends up being equivalent to the
- output kernel from above.
-
- - Color space conversion
-
- The complete model here is that each surface has a color
- space associated with it and that the compositing operation
- also has one associated with it. Note also that gradients
- should have associcated colorspaces.
-
- - Dithering
-
- If people dither something that is already dithered, it will
- look terrible, but don't do that, then. (Dithering happens
- after resampling if at all - what is the relationship
- with color spaces? Presumably dithering should happen in linear
- intensity space).
-
- - Floating point surfaces, 16, 32 and possibly 64 bit per
- channel.
-
- Maybe crack:
-
- - Glyph polygons
-
- If glyphs could be given as polygons, they could be
- positioned and rasterized more accurately. The glyph
- structure would need subpixel positioning though.
-
- - Luminance vs. coverage for the alpha channel
-
- Whether the alpha channel should be interpreted as luminance
- modulation or as coverage (intensity modulation). This is a
- bit of a departure from the rendering model though. It could
- also be considered whether it should be possible to have
- both channels in the same drawable.
-
- - Alternative for component alpha
-
- - Set component-alpha on the output image.
-
- - This means each of the components are sampled
- independently and composited in the corresponding
- channel only.
-
- - Have 3 x oversampled mask
-
- - Scale it down by 3 horizontally, with [ 1/3, 1/3, 1/3 ]
- resampling filter.
-
- Is this equivalent to just using a component alpha mask?
-
- Incompatible changes:
-
- - Gradients could be specified with premultiplied colors. (You
- can use a mask to get things like gradients from solid red to
- transparent red.
-
-Refactoring pixman
-
-The pixman code is not particularly nice to put it mildly. Among the
-issues are
-
-- inconsistent naming style (fb vs Fb, camelCase vs
- underscore_naming). Sometimes there is even inconsistency *within*
- one name.
-
- fetchProc32 ACCESS(pixman_fetchProcForPicture32)
-
- may be one of the uglies names ever created.
-
- coding style:
- use the one from cairo except that pixman uses this brace style:
-
- while (blah)
- {
- }
-
- Format do while like this:
-
- do
- {
-
- }
- while (...);
-
-- PIXMAN_COMPOSITE_RECT_GENERAL() is horribly complex
-
-- switch case logic in pixman-access.c
-
- Instead it would be better to just store function pointers in the
- image objects themselves,
-
- get_pixel()
- get_scanline()
-
-- Much of the scanline fetching code is for formats that no one
- ever uses. a2r2g2b2 anyone?
-
- It would probably be worthwhile having a generic fetcher for any
- pixman format whatsoever.
-
-- Code related to particular image types should be split into individual
- files.
-
- pixman-bits-image.c
- pixman-linear-gradient-image.c
- pixman-radial-gradient-image.c
- pixman-solid-image.c
-
-- Fast path code should be split into files based on architecture:
-
- pixman-mmx-fastpath.c
- pixman-sse2-fastpath.c
- pixman-c-fastpath.c
-
- etc.
-
- Each of these files should then export a fastpath table, which would
- be declared in pixman-private.h. This should allow us to get rid
- of the pixman-mmx.h files.
-
- The fast path table should describe each fast path. Ie there should
- be bitfields indicating what things the fast path can handle, rather than
- like now where it is only allowed to take one format per src/mask/dest. Ie.,
-
- {
- FAST_a8r8g8b8 | FAST_x8r8g8b8,
- FAST_null,
- FAST_x8r8g8b8,
- FAST_repeat_normal | FAST_repeat_none,
- the_fast_path
- }
-
-There should then be *one* file that implements pixman_image_composite().
-This should do this:
-
- optimize_operator();
-
- convert 1x1 repeat to solid (actually this should be done at
- image creation time).
-
- is there a useful fastpath?
-
-There should be a file called pixman-cpu.c that contains all the
-architecture specific stuff to detect what CPU features we have.
-
-Issues that must be kept in mind:
-
- - we need accessor code to be preserved
-
- - maybe there should be a "store_scanline" too?
-
- Is this sufficient?
-
- We should preserve the optimization where the
- compositing happens directly in the destination
- whenever possible.
-
- - It should be possible to create GPU samplers from the
- images.
-
-The "horizontal" classification should be a bit in the image, the
-"vertical" classification should just happen inside the gradient
-file. Note though that
-
- (a) these will change if the tranformation/repeat changes.
-
- (b) at the moment the optimization for linear gradients
- takes the source rectangle into account. Presumably
- this is to also optimize the case where the gradient
- is close enough to horizontal?
-
-Who is responsible for repeats? In principle it should be the scanline
-fetch. Right now NORMAL repeats are handled by walk_composite_region()
-while other repeats are handled by the scanline code.
-
-
-(Random note on filtering: do you filter before or after
-transformation? Hardware is going to filter after transformation;
-this is also what pixman does currently). It's not completely clear
-what filtering *after* transformation means. One thing that might look
-good would be to do *supersampling*, ie., compute multiple subpixels
-per destination pixel, then average them together.
diff --git a/pixman/test/blitters-test.c b/pixman/test/blitters-test.c
index 8766fa800..a2c6ff4d8 100644
--- a/pixman/test/blitters-test.c
+++ b/pixman/test/blitters-test.c
@@ -46,7 +46,16 @@ create_random_image (pixman_format_code_t *allowed_formats,
/* do the allocation */
buf = aligned_malloc (64, stride * height);
- prng_randmemset (buf, stride * height, RANDMEMSET_MORE_00_AND_FF);
+ if (prng_rand_n (4) == 0)
+ {
+ /* uniform distribution */
+ prng_randmemset (buf, stride * height, 0);
+ }
+ else
+ {
+ /* significantly increased probability for 0x00 and 0xFF */
+ prng_randmemset (buf, stride * height, RANDMEMSET_MORE_00_AND_FF);
+ }
img = pixman_image_create_bits (fmt, width, height, buf, stride);
@@ -393,6 +402,6 @@ main (int argc, const char *argv[])
}
return fuzzer_test_main("blitters", 2000000,
- 0xD8265D5E,
+ 0x0CF3283B,
test_composite, argc, argv);
}
diff --git a/pixman/test/lowlevel-blt-bench.c b/pixman/test/lowlevel-blt-bench.c
index 4e16f7ba1..1049e21e7 100644
--- a/pixman/test/lowlevel-blt-bench.c
+++ b/pixman/test/lowlevel-blt-bench.c
@@ -385,6 +385,7 @@ bench_composite (char * testname,
double t1, t2, t3, pix_cnt;
int64_t n, l1test_width, nlines;
double bytes_per_pix = 0;
+ pixman_bool_t bench_pixbuf = FALSE;
pixman_composite_func_t func = pixman_image_composite_wrapper;
@@ -422,16 +423,20 @@ bench_composite (char * testname,
mask_img = NULL;
xmask_img = NULL;
+ if (strcmp (testname, "pixbuf") == 0 || strcmp (testname, "rpixbuf") == 0)
+ {
+ bench_pixbuf = TRUE;
+ }
if (!(mask_flags & SOLID_FLAG) && mask_fmt != PIXMAN_null)
{
bytes_per_pix += (mask_fmt >> 24) / ((op == PIXMAN_OP_SRC) ? 8.0 : 4.0);
mask_img = pixman_image_create_bits (mask_fmt,
WIDTH, HEIGHT,
- mask,
+ bench_pixbuf ? src : mask,
WIDTH * 4);
xmask_img = pixman_image_create_bits (mask_fmt,
XWIDTH, XHEIGHT,
- mask,
+ bench_pixbuf ? src : mask,
XWIDTH * 4);
}
else if (mask_fmt != PIXMAN_null)
@@ -643,6 +648,8 @@ tests_tbl[] =
{ "src_0888_0565", PIXMAN_r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_r5g6b5 },
{ "src_0888_8888", PIXMAN_r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_a8r8g8b8 },
{ "src_0888_x888", PIXMAN_r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_x8r8g8b8 },
+ { "src_0888_8888_rev", PIXMAN_b8g8r8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_x8r8g8b8 },
+ { "src_0888_0565_rev", PIXMAN_b8g8r8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_r5g6b5 },
{ "src_x888_x888", PIXMAN_x8r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_x8r8g8b8 },
{ "src_x888_8888", PIXMAN_x8r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_a8r8g8b8 },
{ "src_8888_8888", PIXMAN_a8r8g8b8, 0, PIXMAN_OP_SRC, PIXMAN_null, 0, PIXMAN_a8r8g8b8 },
@@ -707,6 +714,8 @@ tests_tbl[] =
{ "outrev_n_8888_x888_ca", PIXMAN_a8r8g8b8, 1, PIXMAN_OP_OUT_REV, PIXMAN_a8r8g8b8, 2, PIXMAN_x8r8g8b8 },
{ "outrev_n_8888_8888_ca", PIXMAN_a8r8g8b8, 1, PIXMAN_OP_OUT_REV, PIXMAN_a8r8g8b8, 2, PIXMAN_a8r8g8b8 },
{ "over_reverse_n_8888", PIXMAN_a8r8g8b8, 0, PIXMAN_OP_OVER_REVERSE, PIXMAN_null, 0, PIXMAN_a8r8g8b8 },
+ { "pixbuf", PIXMAN_x8b8g8r8, 0, PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, 0, PIXMAN_a8r8g8b8 },
+ { "rpixbuf", PIXMAN_x8b8g8r8, 0, PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, 0, PIXMAN_a8b8g8r8 },
};
int
diff --git a/pixman/test/prng-test.c b/pixman/test/prng-test.c
index 0a3ad5e8f..c1d9320cc 100644
--- a/pixman/test/prng-test.c
+++ b/pixman/test/prng-test.c
@@ -106,7 +106,10 @@ int main (int argc, char *argv[])
{
const uint32_t ref_crc[RANDMEMSET_MORE_00_AND_FF + 1] =
{
- 0xBA06763D, 0x103FC550, 0x8B59ABA5, 0xD82A0F39
+ 0xBA06763D, 0x103FC550, 0x8B59ABA5, 0xD82A0F39,
+ 0xD2321099, 0xFD8C5420, 0xD3B7C42A, 0xFC098093,
+ 0x85E01DE0, 0x6680F8F7, 0x4D32DD3C, 0xAE52382B,
+ 0x149E6CB5, 0x8B336987, 0x15DCB2B3, 0x8A71B781
};
uint32_t crc1, crc2;
uint32_t ref, seed, seed0, seed1, seed2, seed3;
diff --git a/pixman/test/utils-prng.c b/pixman/test/utils-prng.c
index 967b8989a..7b32e3531 100644
--- a/pixman/test/utils-prng.c
+++ b/pixman/test/utils-prng.c
@@ -107,6 +107,7 @@ randmemset_internal (prng_t *prng,
{
prng_t local_prng = *prng;
prng_rand_128_data_t randdata;
+ size_t i;
while (size >= 16)
{
@@ -138,6 +139,22 @@ randmemset_internal (prng_t *prng,
};
randdata.vb &= (t.vb >= const_40);
}
+ if (flags & RANDMEMSET_MORE_FFFFFFFF)
+ {
+ const uint32x4 const_C0000000 =
+ {
+ 0xC0000000, 0xC0000000, 0xC0000000, 0xC0000000
+ };
+ randdata.vw |= ((t.vw << 30) >= const_C0000000);
+ }
+ if (flags & RANDMEMSET_MORE_00000000)
+ {
+ const uint32x4 const_40000000 =
+ {
+ 0x40000000, 0x40000000, 0x40000000, 0x40000000
+ };
+ randdata.vw &= ((t.vw << 30) >= const_40000000);
+ }
#else
#define PROCESS_ONE_LANE(i) \
if (flags & RANDMEMSET_MORE_FF) \
@@ -155,6 +172,18 @@ randmemset_internal (prng_t *prng,
mask_00 |= mask_00 >> 2; \
mask_00 |= mask_00 >> 4; \
randdata.w[i] &= mask_00; \
+ } \
+ if (flags & RANDMEMSET_MORE_FFFFFFFF) \
+ { \
+ int32_t mask_ff = ((t.w[i] << 30) & (t.w[i] << 31)) & \
+ 0x80000000; \
+ randdata.w[i] |= mask_ff >> 31; \
+ } \
+ if (flags & RANDMEMSET_MORE_00000000) \
+ { \
+ int32_t mask_00 = ((t.w[i] << 30) | (t.w[i] << 31)) & \
+ 0x80000000; \
+ randdata.w[i] &= mask_00 >> 31; \
}
PROCESS_ONE_LANE (0)
@@ -198,7 +227,8 @@ randmemset_internal (prng_t *prng,
}
size -= 16;
}
- while (size > 0)
+ i = 0;
+ while (i < size)
{
uint8_t randbyte = prng_rand_r (&local_prng) & 0xFF;
if (flags != 0)
@@ -208,9 +238,25 @@ randmemset_internal (prng_t *prng,
randbyte = 0xFF;
if ((flags & RANDMEMSET_MORE_00) && (t < 0x40))
randbyte = 0x00;
+ if (i % 4 == 0 && i + 4 <= size)
+ {
+ t = prng_rand_r (&local_prng) & 0xFF;
+ if ((flags & RANDMEMSET_MORE_FFFFFFFF) && (t >= 0xC0))
+ {
+ memset(&buf[i], 0xFF, 4);
+ i += 4;
+ continue;
+ }
+ if ((flags & RANDMEMSET_MORE_00000000) && (t < 0x40))
+ {
+ memset(&buf[i], 0x00, 4);
+ i += 4;
+ continue;
+ }
+ }
}
- *buf++ = randbyte;
- size--;
+ buf[i] = randbyte;
+ i++;
}
*prng = local_prng;
}
@@ -218,8 +264,10 @@ randmemset_internal (prng_t *prng,
/*
* Fill memory buffer with random data. Flags argument may be used
* to tweak some statistics properties:
- * RANDMEMSET_MORE_00 - set ~25% of bytes to 0x00
- * RANDMEMSET_MORE_FF - set ~25% of bytes to 0xFF
+ * RANDMEMSET_MORE_00 - set ~25% of bytes to 0x00
+ * RANDMEMSET_MORE_FF - set ~25% of bytes to 0xFF
+ * RANDMEMSET_MORE_00000000 - ~25% chance for 00000000 4-byte clusters
+ * RANDMEMSET_MORE_FFFFFFFF - ~25% chance for FFFFFFFF 4-byte clusters
*/
void prng_randmemset_r (prng_t *prng,
void *voidbuf,
diff --git a/pixman/test/utils-prng.h b/pixman/test/utils-prng.h
index 285107f08..564ffcef1 100644
--- a/pixman/test/utils-prng.h
+++ b/pixman/test/utils-prng.h
@@ -153,7 +153,10 @@ typedef enum
{
RANDMEMSET_MORE_00 = 1, /* ~25% chance for 0x00 bytes */
RANDMEMSET_MORE_FF = 2, /* ~25% chance for 0xFF bytes */
- RANDMEMSET_MORE_00_AND_FF = (RANDMEMSET_MORE_00 | RANDMEMSET_MORE_FF)
+ RANDMEMSET_MORE_00000000 = 4, /* ~25% chance for 0x00000000 clusters */
+ RANDMEMSET_MORE_FFFFFFFF = 8, /* ~25% chance for 0xFFFFFFFF clusters */
+ RANDMEMSET_MORE_00_AND_FF = (RANDMEMSET_MORE_00 | RANDMEMSET_MORE_00000000 |
+ RANDMEMSET_MORE_FF | RANDMEMSET_MORE_FFFFFFFF)
} prng_randmemset_flags_t;
/* Set the 32-bit seed for PRNG */
diff --git a/xkbcomp/man/xkbcomp.man b/xkbcomp/man/xkbcomp.man
index 0486b7dd7..667c98506 100644
--- a/xkbcomp/man/xkbcomp.man
+++ b/xkbcomp/man/xkbcomp.man
@@ -47,6 +47,18 @@ Produce a C header file as output (.h extension).
.B \-dflts
Compute defaults for any missing components, such as key names.
.TP 8
+.B \-em1 \fImsg\fP
+Print \fImsg\fP before printing first error message.
+.TP 8
+.B \-emp \fImsg\fP
+Print \fImsg\fP at the start of each message line.
+.TP 8
+.B \-eml \fImsg\fP
+If there were any errors, print \fImsg\fP before exiting.
+.TP 8
+.B \-help, -?
+Show available options.
+.TP 8
.B \-I\fIdir\fP
Specifies top-level directories to be searched for files included by the
keymap description. After all directories specified by \-I options
diff --git a/xkbcomp/utils.h b/xkbcomp/utils.h
index 63eda3632..b00067d6e 100644
--- a/xkbcomp/utils.h
+++ b/xkbcomp/utils.h
@@ -35,7 +35,9 @@
#include <X11/Xfuncs.h>
#include <stddef.h>
+#ifdef HAVE_CONFIG_H
#include "config.h"
+#endif
#ifndef NUL
#define NUL '\0'
@@ -247,7 +249,7 @@ extern
extern int uDebugIndentSize;
#define uDebugIndent(l) (uDebugIndentLevel+=(l))
#define uDebugOutdent(l) (uDebugIndentLevel-=(l))
-#ifdef DEBUG_ON
+#ifdef DEBUG
#define uDEBUG(f,s) { if (DEBUG_VAR&(f)) uDebug(s);}
#define uDEBUG1(f,s,a) { if (DEBUG_VAR&(f)) uDebug(s,a);}
#define uDEBUG2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebug(s,a,b);}
diff --git a/xorg-server/COPYING b/xorg-server/COPYING
index 7aa0df080..cc52a3282 100644
--- a/xorg-server/COPYING
+++ b/xorg-server/COPYING
@@ -20,6 +20,7 @@ Copyright © 1999 Keith Packard
Copyright © 2007-2009 Red Hat, Inc.
Copyright © 2005-2008 Daniel Stone
Copyright © 2006-2009 Simon Thum
+Copyright © 2003-2008, 2013 Geert Uytterhoeven
Copyright © 2006 Luc Verhaegen
Permission is hereby granted, free of charge, to any person obtaining a
diff --git a/xorg-server/Xext/saver.c b/xorg-server/Xext/saver.c
index 8de043f8e..fe81bc4d7 100644
--- a/xorg-server/Xext/saver.c
+++ b/xorg-server/Xext/saver.c
@@ -531,15 +531,16 @@ CreateSaverWindow(ScreenPtr pScreen)
mask |= CWBorderPixmap;
}
if (pAttr->pCursor) {
+ CursorPtr cursor;
if (!pWin->optional)
if (!MakeWindowOptional(pWin)) {
FreeResource(pWin->drawable.id, RT_NONE);
return FALSE;
}
- pAttr->pCursor->refcnt++;
+ cursor = RefCursor(pAttr->pCursor);
if (pWin->optional->cursor)
FreeCursor(pWin->optional->cursor, (Cursor) 0);
- pWin->optional->cursor = pAttr->pCursor;
+ pWin->optional->cursor = cursor;
pWin->cursorIsNone = FALSE;
CheckWindowOptionalNeed(pWin);
mask |= CWCursor;
@@ -1065,8 +1066,7 @@ ScreenSaverSetAttributes(ClientPtr client)
client->errorValue = cursorID;
goto PatchUp;
}
- pCursor->refcnt++;
- pAttr->pCursor = pCursor;
+ pAttr->pCursor = RefCursor(pCursor);
pAttr->mask &= ~CWCursor;
}
break;
diff --git a/xorg-server/Xext/xvmain.c b/xorg-server/Xext/xvmain.c
index c2860b86a..0c5dc9bc1 100644
--- a/xorg-server/Xext/xvmain.c
+++ b/xorg-server/Xext/xvmain.c
@@ -156,8 +156,8 @@ XvExtensionInit(void)
if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0))
return;
- /* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN
- INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */
+ /* Look to see if any screens were initialized; if not then
+ init global variables so the extension can function */
if (XvScreenGeneration != serverGeneration) {
if (!CreateResourceTypes()) {
ErrorF("XvExtensionInit: Unable to allocate resource types\n");
diff --git a/xorg-server/Xi/chgdctl.c b/xorg-server/Xi/chgdctl.c
index 31d3a57f3..d078aa248 100644
--- a/xorg-server/Xi/chgdctl.c
+++ b/xorg-server/Xi/chgdctl.c
@@ -122,6 +122,12 @@ ProcXChangeDeviceControl(ClientPtr client)
if (ret != Success)
goto out;
+ /* XTest devices are special, none of the below apply to them anyway */
+ if (IsXTestDevice(dev, NULL)) {
+ ret = BadMatch;
+ goto out;
+ }
+
rep = (xChangeDeviceControlReply) {
.repType = X_Reply,
.RepType = X_ChangeDeviceControl,
diff --git a/xorg-server/Xi/devbell.c b/xorg-server/Xi/devbell.c
index c75b94dee..202c8de18 100644
--- a/xorg-server/Xi/devbell.c
+++ b/xorg-server/Xi/devbell.c
@@ -142,7 +142,8 @@ ProcXDeviceBell(ClientPtr client)
newpercent = base + newpercent;
else
newpercent = base - newpercent + stuff->percent;
+ if (proc == NULL)
+ return BadValue;
(*proc) (newpercent, dev, ctrl, class);
-
return Success;
}
diff --git a/xorg-server/Xi/exevents.c b/xorg-server/Xi/exevents.c
index 6779139b5..2bbc6f091 100644
--- a/xorg-server/Xi/exevents.c
+++ b/xorg-server/Xi/exevents.c
@@ -1036,47 +1036,22 @@ DeliverOneTouchEvent(ClientPtr client, DeviceIntPtr dev, TouchPointInfoPtr ti,
static void
ActivateEarlyAccept(DeviceIntPtr dev, TouchPointInfoPtr ti)
{
- int rc;
ClientPtr client;
XID error;
+ GrabPtr grab = ti->listeners[0].grab;
- rc = dixLookupClient(&client, ti->listeners[0].listener, serverClient,
- DixSendAccess);
- if (rc != Success) {
- ErrorF("[Xi] Failed to lookup early accepting client.\n");
- return;
- }
+ BUG_RETURN(ti->listeners[0].type != LISTENER_GRAB &&
+ ti->listeners[0].type != LISTENER_POINTER_GRAB);
+ BUG_RETURN(!grab);
+
+ client = rClient(grab);
if (TouchAcceptReject(client, dev, XIAcceptTouch, ti->client_id,
- ti->listeners[0].window->drawable.id, &error) !=
- Success)
+ ti->listeners[0].window->drawable.id, &error) != Success)
ErrorF("[Xi] Failed to accept touch grab after early acceptance.\n");
}
/**
- * Generate and deliver a TouchEnd event.
- *
- * @param dev The device to deliver the event for.
- * @param ti The touch point record to deliver the event for.
- * @param flags Internal event flags. The called does not need to provide
- * TOUCH_CLIENT_ID and TOUCH_POINTER_EMULATED, this function will ensure
- * they are set appropriately.
- * @param resource The client resource to deliver to, or 0 for all clients.
- */
-static void
-EmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource)
-{
- InternalEvent event;
-
- flags |= TOUCH_CLIENT_ID;
- if (ti->emulate_pointer)
- flags |= TOUCH_POINTER_EMULATED;
- TouchDeliverDeviceClassesChangedEvent(ti, GetTimeInMillis(), resource);
- GetDixTouchEnd(&event, dev, ti, flags);
- DeliverTouchEvents(dev, ti, &event, resource);
-}
-
-/**
* Find the oldest touch that still has a pointer emulation client.
*
* Pointer emulation can only be performed for the oldest touch. Otherwise, the
@@ -1127,10 +1102,10 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchOwnershipEvent *ev)
{
TouchListener *listener = &ti->listeners[0]; /* new owner */
+ int accepted_early = listener->state == LISTENER_EARLY_ACCEPT;
/* Deliver the ownership */
- if (listener->state == LISTENER_AWAITING_OWNER ||
- listener->state == LISTENER_EARLY_ACCEPT)
+ if (listener->state == LISTENER_AWAITING_OWNER || accepted_early)
DeliverTouchEvents(dev, ti, (InternalEvent *) ev,
listener->listener);
else if (listener->state == LISTENER_AWAITING_BEGIN) {
@@ -1144,15 +1119,24 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchEventHistoryReplay(ti, dev, listener->listener);
}
- /* If we've just removed the last grab and the touch has physically
- * ended, send a TouchEnd event too and finalise the touch. */
- if (ti->num_listeners == 1 && ti->num_grabs == 0 && ti->pending_finish) {
- EmitTouchEnd(dev, ti, 0, 0);
- TouchEndTouch(dev, ti);
- return;
+ /* New owner has Begin/Update but not end. If touch is pending_finish,
+ * emulate the TouchEnd now */
+ if (ti->pending_finish) {
+ TouchEmitTouchEnd(dev, ti, 0, 0);
+
+ /* If the last owner is not a touch grab, finalise the touch, we
+ won't get more correspondence on this.
+ */
+ if (ti->num_listeners == 1 &&
+ (ti->num_grabs == 0 ||
+ listener->grab->grabtype != XI2 ||
+ !xi2mask_isset(listener->grab->xi2mask, dev, XI_TouchBegin))) {
+ TouchEndTouch(dev, ti);
+ return;
+ }
}
- if (listener->state == LISTENER_EARLY_ACCEPT)
+ if (accepted_early)
ActivateEarlyAccept(dev, ti);
}
@@ -1196,7 +1180,7 @@ TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
for (i = 0; i < ti->num_listeners; i++) {
if (ti->listeners[i].listener == resource) {
if (ti->listeners[i].state != LISTENER_HAS_END)
- EmitTouchEnd(sourcedev, ti, TOUCH_REJECT, resource);
+ TouchEmitTouchEnd(sourcedev, ti, TOUCH_REJECT, resource);
break;
}
}
@@ -1223,9 +1207,16 @@ TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
* touchpoint if it is pending finish.
*/
static void
-ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
- TouchOwnershipEvent *ev)
+ProcessTouchOwnershipEvent(TouchOwnershipEvent *ev,
+ DeviceIntPtr dev)
{
+ TouchPointInfoPtr ti = TouchFindByClientID(dev, ev->touchid);
+
+ if (!ti) {
+ DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
+ dev->name, ev->type, ev->touchid);
+ return;
+ }
if (ev->reason == XIRejectTouch)
TouchRejected(dev, ti, ev->resource, ev);
@@ -1236,12 +1227,12 @@ ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
* already seen the end. This ensures that the touch record is ended in
* the server. */
if (ti->listeners[0].state == LISTENER_HAS_END)
- EmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[0].listener);
+ TouchEmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[0].listener);
/* The touch owner has accepted the touch. Send TouchEnd events to
* everyone else, and truncate the list of listeners. */
for (i = 1; i < ti->num_listeners; i++)
- EmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[i].listener);
+ TouchEmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[i].listener);
while (ti->num_listeners > 1)
TouchRemoveListener(ti, ti->listeners[1].listener);
@@ -1410,7 +1401,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
}
if (!deliveries)
- DeliverOneGrabbedEvent(ptrev, dev, grab->grabtype);
+ deliveries = DeliverOneGrabbedEvent(ptrev, dev, grab->grabtype);
/* We must accept the touch sequence once a pointer listener has
* received one event past ButtonPress. */
@@ -1418,8 +1409,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
!(ev->device_event.flags & TOUCH_CLIENT_ID))
TouchListenerAcceptReject(dev, ti, 0, XIAcceptTouch);
- if (ev->any.type == ET_TouchEnd &&
- !(ev->device_event.flags & TOUCH_CLIENT_ID) &&
+ if (deliveries && ev->any.type == ET_TouchEnd &&
!dev->button->buttonsDown &&
dev->deviceGrab.fromPassiveGrab && GrabIsPointerGrab(grab)) {
(*dev->deviceGrab.DeactivateGrab) (dev);
@@ -1438,8 +1428,11 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
*/
if (!devgrab && dev->deviceGrab.grab && dev->deviceGrab.implicitGrab) {
TouchListener *l;
+ GrabPtr g;
devgrab = dev->deviceGrab.grab;
+ g = AllocGrab(devgrab);
+ BUG_WARN(!g);
*dev->deviceGrab.sync.event = ev->device_event;
@@ -1448,8 +1441,8 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
* event selection. Thus, we update the last listener in the array.
*/
l = &ti->listeners[ti->num_listeners - 1];
- l->listener = devgrab->resource;
- l->grab = devgrab;
+ l->listener = g->resource;
+ l->grab = g;
//l->resource_type = RT_NONE;
if (devgrab->grabtype != XI2 || devgrab->type != XI_TouchBegin)
@@ -1538,12 +1531,9 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
if (!t)
return;
- if (ev->any.type == ET_TouchOwnership)
- touchid = ev->touch_ownership_event.touchid;
- else
- touchid = ev->device_event.touchid;
+ touchid = ev->device_event.touchid;
- if (type == ET_TouchBegin) {
+ if (type == ET_TouchBegin && !(ev->device_event.flags & TOUCH_REPLAYING)) {
ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid,
emulate_pointer);
}
@@ -1610,23 +1600,19 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
* called after event type mutation. Touch end events are always processed
* in order to end touch records. */
/* FIXME: check this */
- if ((type == ET_TouchBegin && !TouchBuildSprite(dev, ti, ev)) ||
+ if ((type == ET_TouchBegin &&
+ !(ev->device_event.flags & TOUCH_REPLAYING) &&
+ !TouchBuildSprite(dev, ti, ev)) ||
(type != ET_TouchEnd && ti->sprite.spriteTraceGood == 0))
return;
- /* TouchOwnership events are handled separately from the rest, as they
- * have more complex semantics. */
- if (ev->any.type == ET_TouchOwnership)
- ProcessTouchOwnershipEvent(dev, ti, &ev->touch_ownership_event);
- else {
- TouchCopyValuatorData(&ev->device_event, ti);
- /* WARNING: the event type may change to TouchUpdate in
- * DeliverTouchEvents if a TouchEnd was delivered to a grabbing
- * owner */
- DeliverTouchEvents(dev, ti, (InternalEvent *) ev, 0);
- if (ev->any.type == ET_TouchEnd)
- TouchEndTouch(dev, ti);
- }
+ TouchCopyValuatorData(&ev->device_event, ti);
+ /* WARNING: the event type may change to TouchUpdate in
+ * DeliverTouchEvents if a TouchEnd was delivered to a grabbing
+ * owner */
+ DeliverTouchEvents(dev, ti, ev, ev->device_event.resource);
+ if (ev->any.type == ET_TouchEnd)
+ TouchEndTouch(dev, ti);
if (emulate_pointer)
UpdateDeviceState(dev, &ev->device_event);
@@ -1820,10 +1806,14 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
break;
case ET_TouchBegin:
case ET_TouchUpdate:
- case ET_TouchOwnership:
case ET_TouchEnd:
ProcessTouchEvent(ev, device);
break;
+ case ET_TouchOwnership:
+ /* TouchOwnership events are handled separately from the rest, as they
+ * have more complex semantics. */
+ ProcessTouchOwnershipEvent(&ev->touch_ownership_event, device);
+ break;
case ET_BarrierHit:
case ET_BarrierLeave:
ProcessBarrierEvent(ev, device);
@@ -1848,6 +1838,14 @@ DeliverTouchBeginEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
listener->type == LISTENER_POINTER_GRAB) {
rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
grab, xi2mask);
+ if (rc == Success) {
+ listener->state = LISTENER_IS_OWNER;
+ /* async grabs cannot replay, so automatically accept this touch */
+ if (dev->deviceGrab.grab &&
+ dev->deviceGrab.fromPassiveGrab &&
+ dev->deviceGrab.grab->pointerMode == GrabModeAsync)
+ ActivateEarlyAccept(dev, ti);
+ }
goto out;
}
@@ -1865,7 +1863,7 @@ DeliverTouchBeginEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
if (has_ownershipmask)
TouchSendOwnershipEvent(dev, ti, 0, listener->listener);
- if (!has_ownershipmask || listener->type == LISTENER_REGULAR)
+ if (listener->type == LISTENER_REGULAR)
state = LISTENER_HAS_ACCEPTED;
else
state = LISTENER_IS_OWNER;
@@ -1888,13 +1886,13 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
grab, xi2mask);
- if (ti->num_listeners > 1) {
- ev->any.type = ET_TouchUpdate;
- ev->device_event.flags |= TOUCH_PENDING_END;
- if (!(ev->device_event.flags & TOUCH_CLIENT_ID))
- ti->pending_finish = TRUE;
- }
-
+ /* Once we send a TouchEnd to a legacy listener, we're already well
+ * past the accepting/rejecting stage (can only happen on
+ * GrabModeSync + replay. This listener now gets the end event,
+ * and we can continue.
+ */
+ if (rc == Success)
+ listener->state = LISTENER_HAS_END;
goto out;
}
@@ -1920,7 +1918,7 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
if ((ti->num_listeners > 1 ||
- listener->state != LISTENER_HAS_ACCEPTED) &&
+ (ti->num_grabs > 0 && listener->state != LISTENER_HAS_ACCEPTED)) &&
(ev->device_event.flags & (TOUCH_ACCEPT | TOUCH_REJECT)) == 0) {
ev->any.type = ET_TouchUpdate;
ev->device_event.flags |= TOUCH_PENDING_END;
@@ -2021,6 +2019,9 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
{
ProximityClassPtr proxc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->proximity != NULL, FALSE);
+
proxc = (ProximityClassPtr) malloc(sizeof(ProximityClassRec));
if (!proxc)
return FALSE;
@@ -2046,10 +2047,10 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval,
{
AxisInfoPtr ax;
- if (!dev || !dev->valuator || (minval > maxval && mode == Absolute))
- return FALSE;
- if (axnum >= dev->valuator->numAxes)
- return FALSE;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->valuator == NULL, FALSE);
+ BUG_RETURN_VAL(axnum >= dev->valuator->numAxes, FALSE);
+ BUG_RETURN_VAL(minval > maxval && mode == Absolute, FALSE);
ax = dev->valuator->axes + axnum;
@@ -2079,8 +2080,9 @@ SetScrollValuator(DeviceIntPtr dev, int axnum, enum ScrollType type,
InternalEvent dce;
DeviceIntPtr master;
- if (!dev || !dev->valuator || axnum >= dev->valuator->numAxes)
- return FALSE;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->valuator == NULL, FALSE);
+ BUG_RETURN_VAL(axnum >= dev->valuator->numAxes, FALSE);
switch (type) {
case SCROLL_TYPE_VERTICAL:
@@ -2220,8 +2222,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
}
/**
- * Grab the given key. If grabtype is XI, the key is a keycode. If
- * grabtype is XI2, the key is a keysym.
+ * Grab the given key.
*/
int
GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
@@ -2845,7 +2846,7 @@ CheckDeviceGrabAndHintWindow(WindowPtr pWin, int type,
(deliveryMask & DeviceButtonGrabMask)) {
GrabPtr tempGrab;
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
if (!tempGrab)
return;
diff --git a/xorg-server/Xi/extinit.c b/xorg-server/Xi/extinit.c
index 619d0e468..a49a42152 100644
--- a/xorg-server/Xi/extinit.c
+++ b/xorg-server/Xi/extinit.c
@@ -848,24 +848,24 @@ SBarrierEvent(xXIBarrierEvent * from,
*to = *from;
- swaps(&from->sequenceNumber);
- swapl(&from->length);
- swaps(&from->evtype);
- swapl(&from->time);
- swaps(&from->deviceid);
- swaps(&from->sourceid);
- swapl(&from->event);
- swapl(&from->root);
- swapl(&from->root_x);
- swapl(&from->root_y);
-
- swapl(&from->dx.integral);
- swapl(&from->dx.frac);
- swapl(&from->dy.integral);
- swapl(&from->dy.frac);
- swapl(&from->dtime);
- swapl(&from->barrier);
- swapl(&from->eventid);
+ swaps(&to->sequenceNumber);
+ swapl(&to->length);
+ swaps(&to->evtype);
+ swapl(&to->time);
+ swaps(&to->deviceid);
+ swaps(&to->sourceid);
+ swapl(&to->event);
+ swapl(&to->root);
+ swapl(&to->root_x);
+ swapl(&to->root_y);
+
+ swapl(&to->dx.integral);
+ swapl(&to->dx.frac);
+ swapl(&to->dy.integral);
+ swapl(&to->dy.frac);
+ swapl(&to->dtime);
+ swapl(&to->barrier);
+ swapl(&to->eventid);
}
/** Event swapping function for XI2 events. */
@@ -1171,6 +1171,8 @@ IResetProc(ExtensionEntry * unused)
free(xi_all_devices.name);
free(xi_all_master_devices.name);
+
+ XIBarrierReset();
}
/***********************************************************************
diff --git a/xorg-server/Xi/setdval.c b/xorg-server/Xi/setdval.c
index 4c9c99f55..463e4f38c 100644
--- a/xorg-server/Xi/setdval.c
+++ b/xorg-server/Xi/setdval.c
@@ -110,6 +110,9 @@ ProcXSetDeviceValuators(ClientPtr client)
if (dev->valuator == NULL)
return BadMatch;
+ if (IsXTestDevice(dev, NULL))
+ return BadMatch;
+
if (stuff->first_valuator + stuff->num_valuators > dev->valuator->numAxes)
return BadValue;
diff --git a/xorg-server/Xi/setmode.c b/xorg-server/Xi/setmode.c
index 535655257..5ed09136e 100644
--- a/xorg-server/Xi/setmode.c
+++ b/xorg-server/Xi/setmode.c
@@ -104,6 +104,10 @@ ProcXSetDeviceMode(ClientPtr client)
return rc;
if (dev->valuator == NULL)
return BadMatch;
+
+ if (IsXTestDevice(dev, NULL))
+ return BadMatch;
+
if ((dev->deviceGrab.grab) && !SameClient(dev->deviceGrab.grab, client))
rep.status = AlreadyGrabbed;
else
diff --git a/xorg-server/Xi/ungrdevb.c b/xorg-server/Xi/ungrdevb.c
index c4632fadc..b02510ea0 100644
--- a/xorg-server/Xi/ungrdevb.c
+++ b/xorg-server/Xi/ungrdevb.c
@@ -127,7 +127,7 @@ ProcXUngrabDeviceButton(ClientPtr client)
(stuff->modifiers & ~AllModifiersMask))
return BadValue;
- temporaryGrab = AllocGrab();
+ temporaryGrab = AllocGrab(NULL);
if (!temporaryGrab)
return BadAlloc;
diff --git a/xorg-server/Xi/ungrdevk.c b/xorg-server/Xi/ungrdevk.c
index 3273878d3..f98117168 100644
--- a/xorg-server/Xi/ungrdevk.c
+++ b/xorg-server/Xi/ungrdevk.c
@@ -134,7 +134,7 @@ ProcXUngrabDeviceKey(ClientPtr client)
(stuff->modifiers & ~AllModifiersMask))
return BadValue;
- temporaryGrab = AllocGrab();
+ temporaryGrab = AllocGrab(NULL);
if (!temporaryGrab)
return BadAlloc;
diff --git a/xorg-server/Xi/xibarriers.c b/xorg-server/Xi/xibarriers.c
index fccab8615..6732ce9dc 100644
--- a/xorg-server/Xi/xibarriers.c
+++ b/xorg-server/Xi/xibarriers.c
@@ -917,3 +917,15 @@ XIBarrierInit(void)
return PointerBarrierType;
}
+
+void
+XIBarrierReset(void)
+{
+ int i;
+ for (i = 0; i < screenInfo.numScreens; i++) {
+ ScreenPtr pScreen = screenInfo.screens[i];
+ BarrierScreenPtr cs = GetBarrierScreen(pScreen);
+ free(cs);
+ SetBarrierScreen(pScreen, NULL);
+ }
+}
diff --git a/xorg-server/Xi/xibarriers.h b/xorg-server/Xi/xibarriers.h
index 11e84ec9f..f61b48214 100644
--- a/xorg-server/Xi/xibarriers.h
+++ b/xorg-server/Xi/xibarriers.h
@@ -36,8 +36,8 @@ int
XIDestroyPointerBarrier(ClientPtr client,
xXFixesDestroyPointerBarrierReq * stuff);
-Bool
-XIBarrierInit(void);
+Bool XIBarrierInit(void);
+void XIBarrierReset(void);
int SProcXIBarrierReleasePointer(ClientPtr client);
int ProcXIBarrierReleasePointer(ClientPtr client);
diff --git a/xorg-server/Xi/xigrabdev.c b/xorg-server/Xi/xigrabdev.c
index 09186e84f..63d95bc1c 100644
--- a/xorg-server/Xi/xigrabdev.c
+++ b/xorg-server/Xi/xigrabdev.c
@@ -67,6 +67,8 @@ ProcXIGrabDevice(ClientPtr client)
uint8_t status;
GrabMask mask = { 0 };
int mask_len;
+ unsigned int keyboard_mode;
+ unsigned int pointer_mode;
REQUEST(xXIGrabDeviceReq);
REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
@@ -78,6 +80,15 @@ ProcXIGrabDevice(ClientPtr client)
if (!IsMaster(dev))
stuff->paired_device_mode = GrabModeAsync;
+ if (IsKeyboardDevice(dev)) {
+ keyboard_mode = stuff->grab_mode;
+ pointer_mode = stuff->paired_device_mode;
+ }
+ else {
+ keyboard_mode = stuff->paired_device_mode;
+ pointer_mode = stuff->grab_mode;
+ }
+
if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
stuff->mask_len * 4) != Success)
return BadValue;
@@ -91,8 +102,8 @@ ProcXIGrabDevice(ClientPtr client)
xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
mask_len);
- ret = GrabDevice(client, dev, stuff->grab_mode,
- stuff->paired_device_mode,
+ ret = GrabDevice(client, dev, pointer_mode,
+ keyboard_mode,
stuff->grab_window,
stuff->owner_events,
stuff->time,
diff --git a/xorg-server/Xi/xipassivegrab.c b/xorg-server/Xi/xipassivegrab.c
index 62a3a469f..eccec0ab8 100644
--- a/xorg-server/Xi/xipassivegrab.c
+++ b/xorg-server/Xi/xipassivegrab.c
@@ -307,7 +307,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD);
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
if (!tempGrab)
return BadAlloc;
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac
index e0750bbcc..89a7a9db9 100644
--- a/xorg-server/configure.ac
+++ b/xorg-server/configure.ac
@@ -26,9 +26,9 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.14.99.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2013-03-18"
-RELEASE_NAME="Pok Pok Meyer Lemon"
+AC_INIT([xorg-server], 1.14.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2013-04-24"
+RELEASE_NAME="Sweet Tea"
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
@@ -2223,6 +2223,14 @@ AC_SUBST([prefix])
AC_CONFIG_COMMANDS([sdksyms], [touch hw/xfree86/sdksyms.dep])
+if test "x$CONFIG_HAL" = xno && test "x$CONFIG_UDEV" = xno; then
+ AC_WARN([
+ ***********************************************
+ Neither HAL nor udev backend will be enabled.
+ Input device hotplugging will not be available!
+ ***********************************************])
+fi
+
AC_OUTPUT([
Makefile
glx/Makefile
diff --git a/xorg-server/dix/cursor.c b/xorg-server/dix/cursor.c
index 1ee127ac5..cd8305c6c 100644
--- a/xorg-server/dix/cursor.c
+++ b/xorg-server/dix/cursor.c
@@ -114,9 +114,13 @@ FreeCursor(pointer value, XID cid)
ScreenPtr pscr;
DeviceIntPtr pDev = NULL; /* unused anyway */
- if (--pCurs->refcnt != 0)
+
+ UnrefCursor(pCurs);
+ if (CursorRefCount(pCurs) != 0)
return Success;
+ BUG_WARN(CursorRefCount(pCurs) < 0);
+
for (nscr = 0; nscr < screenInfo.numScreens; nscr++) {
pscr = screenInfo.screens[nscr];
(void) (*pscr->UnrealizeCursor) (pDev, pscr, pCurs);
@@ -127,6 +131,29 @@ FreeCursor(pointer value, XID cid)
return Success;
}
+CursorPtr
+RefCursor(CursorPtr cursor)
+{
+ if (cursor)
+ cursor->refcnt++;
+ return cursor;
+}
+
+CursorPtr
+UnrefCursor(CursorPtr cursor)
+{
+ if (cursor)
+ cursor->refcnt--;
+ return cursor;
+}
+
+int
+CursorRefCount(const CursorPtr cursor)
+{
+ return cursor ? cursor->refcnt : 0;
+}
+
+
/*
* We check for empty cursors so that we won't have to display them
*/
diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c
index be236dd70..a680ed8d7 100644
--- a/xorg-server/dix/devices.c
+++ b/xorg-server/dix/devices.c
@@ -112,8 +112,8 @@ DeviceSetTransform(DeviceIntPtr dev, float *transform_data)
* Transform is the user supplied (affine) transform
* InvScale scales coordinates back up into their native range
*/
- sx = dev->valuator->axes[0].max_value - dev->valuator->axes[0].min_value;
- sy = dev->valuator->axes[1].max_value - dev->valuator->axes[1].min_value;
+ sx = dev->valuator->axes[0].max_value - dev->valuator->axes[0].min_value + 1;
+ sy = dev->valuator->axes[1].max_value - dev->valuator->axes[1].min_value + 1;
/* invscale */
pixman_f_transform_init_scale(&scale, sx, sy);
@@ -281,7 +281,6 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
dev->deviceGrab.grabTime = currentTime;
dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab;
dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab;
- dev->deviceGrab.activeGrab = AllocGrab();
dev->deviceGrab.sync.event = calloc(1, sizeof(DeviceEvent));
XkbSetExtension(dev, ProcessKeyboardEvent);
@@ -795,6 +794,7 @@ FreeDeviceClass(int type, pointer *class)
free((*t)->touches[i].valuators);
}
+ free((*t)->touches);
free((*t));
break;
}
@@ -976,7 +976,8 @@ CloseDevice(DeviceIntPtr dev)
}
}
- FreeGrab(dev->deviceGrab.activeGrab);
+ if (dev->deviceGrab.grab)
+ FreeGrab(dev->deviceGrab.grab);
free(dev->deviceGrab.sync.event);
free(dev->config_info); /* Allocated in xf86ActivateDevice. */
free(dev->last.scroll);
@@ -1051,6 +1052,7 @@ CloseDownDevices(void)
inputInfo.pointer = NULL;
XkbDeleteRulesDflts();
+ XkbDeleteRulesUsed();
OsReleaseSignals();
}
@@ -1275,6 +1277,9 @@ InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom *labels,
ButtonClassPtr butc;
int i;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->button != NULL, FALSE);
+
butc = calloc(1, sizeof(ButtonClassRec));
if (!butc)
return FALSE;
@@ -1335,8 +1340,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
int i;
ValuatorClassPtr valc;
- if (!dev)
- return FALSE;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
if (numAxes > MAX_VALUATORS) {
LogMessage(X_WARNING,
@@ -1365,7 +1369,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
valc->numMotionEvents = numMotionEvents;
valc->motionHintWindow = NullWindow;
- if (mode & OutOfProximity)
+ if ((mode & OutOfProximity) && !dev->proximity)
InitProximityClassDeviceStruct(dev);
dev->valuator = valc;
@@ -1445,6 +1449,9 @@ InitFocusClassDeviceStruct(DeviceIntPtr dev)
{
FocusClassPtr focc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->focus != NULL, FALSE);
+
focc = malloc(sizeof(FocusClassRec));
if (!focc)
return FALSE;
@@ -1464,6 +1471,9 @@ InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
{
PtrFeedbackPtr feedc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->ptrfeed != NULL, FALSE);
+
feedc = malloc(sizeof(PtrFeedbackClassRec));
if (!feedc)
return FALSE;
@@ -1505,6 +1515,9 @@ InitStringFeedbackClassDeviceStruct(DeviceIntPtr dev,
int i;
StringFeedbackPtr feedc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->stringfeed != NULL, FALSE);
+
feedc = malloc(sizeof(StringFeedbackClassRec));
if (!feedc)
return FALSE;
@@ -1539,6 +1552,9 @@ InitBellFeedbackClassDeviceStruct(DeviceIntPtr dev, BellProcPtr bellProc,
{
BellFeedbackPtr feedc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->bell != NULL, FALSE);
+
feedc = malloc(sizeof(BellFeedbackClassRec));
if (!feedc)
return FALSE;
@@ -1558,6 +1574,9 @@ InitLedFeedbackClassDeviceStruct(DeviceIntPtr dev, LedCtrlProcPtr controlProc)
{
LedFeedbackPtr feedc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->leds != NULL, FALSE);
+
feedc = malloc(sizeof(LedFeedbackClassRec));
if (!feedc)
return FALSE;
@@ -1578,6 +1597,9 @@ InitIntegerFeedbackClassDeviceStruct(DeviceIntPtr dev,
{
IntegerFeedbackPtr feedc;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->intfeed != NULL, FALSE);
+
feedc = malloc(sizeof(IntegerFeedbackClassRec));
if (!feedc)
return FALSE;
@@ -1598,6 +1620,11 @@ InitPointerDeviceStruct(DevicePtr device, CARD8 *map, int numButtons,
{
DeviceIntPtr dev = (DeviceIntPtr) device;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->button != NULL, FALSE);
+ BUG_RETURN_VAL(dev->valuator != NULL, FALSE);
+ BUG_RETURN_VAL(dev->ptrfeed != NULL, FALSE);
+
return (InitButtonClassDeviceStruct(dev, numButtons, btn_labels, map) &&
InitValuatorClassDeviceStruct(dev, numAxes, axes_labels,
numMotionEvents, Relative) &&
@@ -1618,14 +1645,13 @@ InitTouchClassDeviceStruct(DeviceIntPtr device, unsigned int max_touches,
TouchClassPtr touch;
int i;
- if (device->touch || !device->valuator)
- return FALSE;
+ BUG_RETURN_VAL(device == NULL, FALSE);
+ BUG_RETURN_VAL(device->touch != NULL, FALSE);
+ BUG_RETURN_VAL(device->valuator == NULL, FALSE);
/* Check the mode is valid, and at least X and Y axes. */
- if (mode != XIDirectTouch && mode != XIDependentTouch)
- return FALSE;
- if (num_axes < 2)
- return FALSE;
+ BUG_RETURN_VAL(mode != XIDirectTouch && mode != XIDependentTouch, FALSE);
+ BUG_RETURN_VAL(num_axes < 2, FALSE);
if (num_axes > MAX_VALUATORS) {
LogMessage(X_WARNING,
@@ -2766,9 +2792,10 @@ AllocDevicePair(ClientPtr client, const char *name,
keyboard->type = (master) ? MASTER_KEYBOARD : SLAVE;
/* The ClassesRec stores the device classes currently not used. */
- pointer->unused_classes = calloc(1, sizeof(ClassesRec));
-
- keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
+ if (IsMaster(pointer)) {
+ pointer->unused_classes = calloc(1, sizeof(ClassesRec));
+ keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
+ }
*ptr = pointer;
diff --git a/xorg-server/dix/dispatch.c b/xorg-server/dix/dispatch.c
index 8d6173525..51d0de25f 100644
--- a/xorg-server/dix/dispatch.c
+++ b/xorg-server/dix/dispatch.c
@@ -465,6 +465,7 @@ Dispatch(void)
free(clientReady);
dispatchException &= ~DE_RESET;
SmartScheduleLatencyLimited = 0;
+ ResetOsBuffers();
}
static int VendorRelease = VENDOR_RELEASE;
@@ -3398,6 +3399,7 @@ CloseDownClient(ClientPtr client)
clientinfo.setup = (xConnSetup *) NULL;
CallCallbacks((&ClientStateCallback), (pointer) &clientinfo);
}
+ TouchListenerGone(client->clientAsMask);
FreeClientResources(client);
/* Disable client ID tracking. This must be done after
* ClientStateCallback. */
@@ -3942,7 +3944,6 @@ void
AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new)
{
assert(new->isGPU);
- assert(!new->current_master);
xorg_list_add(&new->output_head, &pScreen->output_slave_list);
new->current_master = pScreen;
}
@@ -3959,7 +3960,6 @@ void
AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new)
{
assert(new->isGPU);
- assert(!new->current_master);
xorg_list_add(&new->offload_head, &pScreen->offload_slave_list);
new->current_master = pScreen;
}
diff --git a/xorg-server/dix/dixutils.c b/xorg-server/dix/dixutils.c
index 3f24629b4..c250bb1db 100644
--- a/xorg-server/dix/dixutils.c
+++ b/xorg-server/dix/dixutils.c
@@ -849,7 +849,7 @@ DeleteCallbackList(CallbackListPtr *pcbl)
}
void
-InitCallbackManager(void)
+DeleteCallbackManager(void)
{
int i;
@@ -861,3 +861,9 @@ InitCallbackManager(void)
numCallbackListsToCleanup = 0;
listsToCleanup = NULL;
}
+
+void
+InitCallbackManager(void)
+{
+ DeleteCallbackManager();
+}
diff --git a/xorg-server/dix/eventconvert.c b/xorg-server/dix/eventconvert.c
index 2c411cf40..f7ecdba77 100644
--- a/xorg-server/dix/eventconvert.c
+++ b/xorg-server/dix/eventconvert.c
@@ -501,9 +501,7 @@ appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo * info,
info->min.frac = 0;
info->max.integral = dce->valuators[axisnumber].max;
info->max.frac = 0;
- /* FIXME: value */
- info->value.integral = 0;
- info->value.frac = 0;
+ info->value = double_to_fp3232(dce->valuators[axisnumber].value);
info->resolution = dce->valuators[axisnumber].resolution;
info->number = axisnumber;
info->mode = dce->valuators[axisnumber].mode;
@@ -684,17 +682,18 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
xde->root_x = double_to_fp1616(ev->root_x + ev->root_x_frac);
xde->root_y = double_to_fp1616(ev->root_y + ev->root_y_frac);
- if (ev->type == ET_TouchUpdate)
- xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
- else
- xde->flags = ev->flags;
+ if (IsTouchEvent((InternalEvent *)ev)) {
+ if (ev->type == ET_TouchUpdate)
+ xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
- if (IsTouchEvent((InternalEvent *) ev) &&
- ev->flags & TOUCH_POINTER_EMULATED)
- xde->flags |= XITouchEmulatingPointer;
+ if (ev->flags & TOUCH_POINTER_EMULATED)
+ xde->flags |= XITouchEmulatingPointer;
+ } else {
+ xde->flags = ev->flags;
- if (ev->key_repeat)
- xde->flags |= XIKeyRepeat;
+ if (ev->key_repeat)
+ xde->flags |= XIKeyRepeat;
+ }
xde->mods.base_mods = ev->mods.base;
xde->mods.latched_mods = ev->mods.latched;
diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c
index 051205233..e5db348c6 100644
--- a/xorg-server/dix/events.c
+++ b/xorg-server/dix/events.c
@@ -931,8 +931,7 @@ ChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor)
(*pScreen->DisplayCursor) (pDev, pScreen, cursor);
FreeCursor(pSprite->current, (Cursor) 0);
- pSprite->current = cursor;
- pSprite->current->refcnt++;
+ pSprite->current = RefCursor(cursor);
}
}
@@ -1427,21 +1426,23 @@ UpdateTouchesForGrab(DeviceIntPtr mouse)
for (i = 0; i < mouse->touch->num_touches; i++) {
TouchPointInfoPtr ti = mouse->touch->touches + i;
+ TouchListener *listener = &ti->listeners[0];
GrabPtr grab = mouse->deviceGrab.grab;
if (ti->active &&
- CLIENT_BITS(ti->listeners[0].listener) == grab->resource) {
- ti->listeners[0].listener = grab->resource;
- ti->listeners[0].level = grab->grabtype;
- ti->listeners[0].state = LISTENER_IS_OWNER;
- ti->listeners[0].window = grab->window;
+ CLIENT_BITS(listener->listener) == grab->resource) {
+ listener->listener = grab->resource;
+ listener->level = grab->grabtype;
+ listener->state = LISTENER_IS_OWNER;
+ listener->window = grab->window;
if (grab->grabtype == CORE || grab->grabtype == XI ||
!xi2mask_isset(grab->xi2mask, mouse, XI_TouchBegin))
- ti->listeners[0].type = LISTENER_POINTER_GRAB;
+ listener->type = LISTENER_POINTER_GRAB;
else
- ti->listeners[0].type = LISTENER_GRAB;
- ti->listeners[0].grab = grab;
+ listener->type = LISTENER_GRAB;
+ FreeGrab(listener->grab);
+ listener->grab = AllocGrab(grab);
}
}
}
@@ -1466,6 +1467,7 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
TimeStamp time, Bool autoGrab)
{
GrabInfoPtr grabinfo = &mouse->deviceGrab;
+ GrabPtr oldgrab = grabinfo->grab;
WindowPtr oldWin = (grabinfo->grab) ?
grabinfo->grab->window : mouse->spriteInfo->sprite->win;
Bool isPassive = autoGrab & ~ImplicitGrabMask;
@@ -1488,16 +1490,15 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
grabinfo->grabTime = syncEvents.time;
else
grabinfo->grabTime = time;
- if (grab->cursor)
- grab->cursor->refcnt++;
- CopyGrab(grabinfo->activeGrab, grab);
- grabinfo->grab = grabinfo->activeGrab;
+ grabinfo->grab = AllocGrab(grab);
grabinfo->fromPassiveGrab = isPassive;
grabinfo->implicitGrab = autoGrab & ImplicitGrabMask;
PostNewCursor(mouse);
UpdateTouchesForGrab(mouse);
CheckGrabForSyncs(mouse, (Bool) grab->pointerMode,
(Bool) grab->keyboardMode);
+ if (oldgrab)
+ FreeGrab(oldgrab);
}
/**
@@ -1547,13 +1548,13 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
if (grab->confineTo)
ConfineCursorToWindow(mouse, GetCurrentRootWindow(mouse), FALSE, FALSE);
PostNewCursor(mouse);
- if (grab->cursor)
- FreeCursor(grab->cursor, (Cursor) 0);
if (!wasImplicit && grab->grabtype == XI2)
ReattachToOldMaster(mouse);
ComputeFreezes();
+
+ FreeGrab(grab);
}
/**
@@ -1566,6 +1567,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time,
Bool passive)
{
GrabInfoPtr grabinfo = &keybd->deviceGrab;
+ GrabPtr oldgrab = grabinfo->grab;
WindowPtr oldWin;
/* slave devices need to float for the duration of the grab. */
@@ -1591,12 +1593,13 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time,
grabinfo->grabTime = syncEvents.time;
else
grabinfo->grabTime = time;
- CopyGrab(grabinfo->activeGrab, grab);
- grabinfo->grab = grabinfo->activeGrab;
+ grabinfo->grab = AllocGrab(grab);
grabinfo->fromPassiveGrab = passive;
grabinfo->implicitGrab = passive & ImplicitGrabMask;
CheckGrabForSyncs(keybd, (Bool) grab->keyboardMode,
(Bool) grab->pointerMode);
+ if (oldgrab)
+ FreeGrab(oldgrab);
}
/**
@@ -1638,6 +1641,8 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd)
ReattachToOldMaster(keybd);
ComputeFreezes();
+
+ FreeGrab(grab);
}
void
@@ -1742,6 +1747,16 @@ AllowSome(ClientPtr client, TimeStamp time, DeviceIntPtr thisDev, int newState)
}
break;
}
+
+ /* We've unfrozen the grab. If the grab was a touch grab, we're now the
+ * owner and expected to accept/reject it. Reject == ReplayPointer which
+ * we've handled in ComputeFreezes() (during DeactivateGrab) above,
+ * anything else is accept.
+ */
+ if (newState != NOT_GRABBED /* Replay */ &&
+ IsTouchEvent((InternalEvent*)grabinfo->sync.event)) {
+ TouchAcceptAndEnd(thisDev, grabinfo->sync.event->touchid);
+ }
}
/**
@@ -1974,7 +1989,7 @@ ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win,
else
return FALSE;
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
if (!tempGrab)
return FALSE;
tempGrab->next = NULL;
@@ -3194,11 +3209,10 @@ InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
pSprite->pEnqueueScreen = screenInfo.screens[0];
pSprite->pDequeueScreen = pSprite->pEnqueueScreen;
}
- if (pCursor)
- pCursor->refcnt++;
+ pCursor = RefCursor(pCursor);
if (pSprite->current)
FreeCursor(pSprite->current, None);
- pSprite->current = pCursor;
+ pSprite->current = RefCursor(pCursor);
if (pScreen) {
(*pScreen->RealizeCursor) (pDev, pScreen, pSprite->current);
@@ -3277,9 +3291,7 @@ UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen)
pSprite->hotLimits.x2 = pScreen->width;
pSprite->hotLimits.y2 = pScreen->height;
pSprite->win = win;
- pCursor = wCursor(win);
- if (pCursor)
- pCursor->refcnt++;
+ pCursor = RefCursor(wCursor(win));
if (pSprite->current)
FreeCursor(pSprite->current, 0);
pSprite->current = pCursor;
@@ -3881,7 +3893,7 @@ CheckPassiveGrabsOnWindow(WindowPtr pWin,
if (!grab)
return NULL;
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
/* Fill out the grab details, but leave the type for later before
* comparing */
@@ -4839,7 +4851,6 @@ ProcGrabPointer(ClientPtr client)
GrabPtr grab;
GrabMask mask;
WindowPtr confineTo;
- CursorPtr oldCursor;
BYTE status;
REQUEST(xGrabPointerReq);
@@ -4862,15 +4873,10 @@ ProcGrabPointer(ClientPtr client)
return rc;
}
- oldCursor = NullCursor;
grab = device->deviceGrab.grab;
- if (grab) {
- if (grab->confineTo && !confineTo)
- ConfineCursorToWindow(device, GetCurrentRootWindow(device), FALSE,
- FALSE);
- oldCursor = grab->cursor;
- }
+ if (grab && grab->confineTo && !confineTo)
+ ConfineCursorToWindow(device, GetCurrentRootWindow(device), FALSE, FALSE);
mask.core = stuff->eventMask;
@@ -4880,9 +4886,6 @@ ProcGrabPointer(ClientPtr client)
if (rc != Success)
return rc;
- if (oldCursor && status == GrabSuccess)
- FreeCursor(oldCursor, (Cursor) 0);
-
rep = (xGrabPointerReply) {
.type = X_Reply,
.status = status,
@@ -4938,9 +4941,7 @@ ProcChangeActivePointerGrab(ClientPtr client)
(CompareTimeStamps(time, device->deviceGrab.grabTime) == EARLIER))
return Success;
oldCursor = grab->cursor;
- grab->cursor = newCursor;
- if (newCursor)
- newCursor->refcnt++;
+ grab->cursor = RefCursor(newCursor);
PostNewCursor(device);
if (oldCursor)
FreeCursor(oldCursor, (Cursor) 0);
@@ -5070,7 +5071,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev,
else {
GrabPtr tempGrab;
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
tempGrab->next = NULL;
tempGrab->window = pWin;
@@ -5085,7 +5086,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev,
else
xi2mask_merge(tempGrab->xi2mask, mask->xi2mask);
tempGrab->device = dev;
- tempGrab->cursor = cursor;
+ tempGrab->cursor = RefCursor(cursor);
tempGrab->confineTo = confineTo;
tempGrab->grabtype = grabtype;
(*grabInfo->ActivateGrab) (dev, tempGrab, time, FALSE);
@@ -5426,7 +5427,7 @@ ProcUngrabKey(ClientPtr client)
client->errorValue = stuff->modifiers;
return BadValue;
}
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
if (!tempGrab)
return BadAlloc;
tempGrab->resource = client->clientAsMask;
@@ -5620,7 +5621,7 @@ ProcUngrabButton(ClientPtr client)
ptr = PickPointer(client);
- tempGrab = AllocGrab();
+ tempGrab = AllocGrab(NULL);
if (!tempGrab)
return BadAlloc;
tempGrab->resource = client->clientAsMask;
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index a4f192cf0..51d4fd4da 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -277,6 +277,7 @@ CreateClassesChangedEvent(InternalEvent *event,
dce->valuators[i].mode = slave->valuator->axes[i].mode;
dce->valuators[i].name = slave->valuator->axes[i].label;
dce->valuators[i].scroll = slave->valuator->axes[i].scroll;
+ dce->valuators[i].value = slave->valuator->axisVal[i];
}
}
if (slave->key) {
@@ -297,11 +298,11 @@ rescaleValuatorAxis(double coord, AxisInfoPtr from, AxisInfoPtr to,
if (from && from->min_value < from->max_value) {
fmin = from->min_value;
- fmax = from->max_value;
+ fmax = from->max_value + 1;
}
if (to && to->min_value < to->max_value) {
tmin = to->min_value;
- tmax = to->max_value;
+ tmax = to->max_value + 1;
}
if (fmin == tmin && fmax == tmax)
@@ -769,6 +770,29 @@ add_to_scroll_valuator(DeviceIntPtr dev, ValuatorMask *mask, int valuator, doubl
}
+static void
+scale_for_device_resolution(DeviceIntPtr dev, ValuatorMask *mask)
+{
+ double x;
+ ValuatorClassPtr v = dev->valuator;
+ int xrange = v->axes[0].max_value - v->axes[0].min_value + 1;
+ int yrange = v->axes[1].max_value - v->axes[1].min_value + 1;
+
+ double screen_ratio = 1.0 * screenInfo.width/screenInfo.height;
+ double device_ratio = 1.0 * xrange/yrange;
+ double resolution_ratio = 1.0;
+ double ratio;
+
+ if (!valuator_mask_fetch_double(mask, 0, &x))
+ return;
+
+ if (v->axes[0].resolution != 0 && v->axes[1].resolution != 0)
+ resolution_ratio = 1.0 * v->axes[0].resolution/v->axes[1].resolution;
+
+ ratio = device_ratio/resolution_ratio/screen_ratio;
+ valuator_mask_set_double(mask, 0, x * ratio);
+}
+
/**
* Move the device's pointer by the values given in @valuators.
*
@@ -780,27 +804,14 @@ moveRelative(DeviceIntPtr dev, int flags, ValuatorMask *mask)
{
int i;
Bool clip_xy = IsMaster(dev) || !IsFloating(dev);
+ ValuatorClassPtr v = dev->valuator;
/* for abs devices in relative mode, we've just scaled wrong, since we
mapped the device's shape into the screen shape. Undo this. */
- if ((flags & POINTER_ABSOLUTE) == 0 && dev->valuator &&
- dev->valuator->axes[0].min_value < dev->valuator->axes[0].max_value) {
-
- double ratio = 1.0 * screenInfo.width/screenInfo.height;
-
- if (ratio > 1.0) {
- double y;
- if (valuator_mask_fetch_double(mask, 1, &y)) {
- y *= ratio;
- valuator_mask_set_double(mask, 1, y);
- }
- } else {
- double x;
- if (valuator_mask_fetch_double(mask, 0, &x)) {
- x *= ratio;
- valuator_mask_set_double(mask, 0, x);
- }
- }
+ if ((flags & POINTER_ABSOLUTE) == 0 && v && v->numAxes > 1 &&
+ v->axes[0].min_value < v->axes[0].max_value &&
+ v->axes[1].min_value < v->axes[1].max_value) {
+ scale_for_device_resolution(dev, mask);
}
/* calc other axes, clip, drop back into valuators */
@@ -913,9 +924,9 @@ scale_to_desktop(DeviceIntPtr dev, ValuatorMask *mask,
/* scale x&y to desktop coordinates */
*screenx = rescaleValuatorAxis(x, dev->valuator->axes + 0, NULL,
- screenInfo.x, screenInfo.width - 1);
+ screenInfo.x, screenInfo.width);
*screeny = rescaleValuatorAxis(y, dev->valuator->axes + 1, NULL,
- screenInfo.y, screenInfo.height - 1);
+ screenInfo.y, screenInfo.height);
*devx = x;
*devy = y;
@@ -1355,6 +1366,12 @@ QueuePointerEvents(DeviceIntPtr device, int type,
* is the last coordinate on the first screen and must be rescaled for the
* event to be m. XI2 clients that do their own coordinate mapping would
* otherwise interpret the position of the device elsewere to the cursor.
+ * However, this scaling leads to losses:
+ * if we have two ScreenRecs we scale from e.g. [0..44704] (Wacom I4) to
+ * [0..2048[. that gives us 2047.954 as desktop coord, or the per-screen
+ * coordinate 1023.954. Scaling that back into the device coordinate range
+ * gives us 44703. So off by one device unit. It's a bug, but we'll have to
+ * live with it because with all this scaling, we just cannot win.
*
* @return the number of events written into events.
*/
diff --git a/xorg-server/dix/grabs.c b/xorg-server/dix/grabs.c
index 3b02352df..a03897af4 100644
--- a/xorg-server/dix/grabs.c
+++ b/xorg-server/dix/grabs.c
@@ -189,7 +189,7 @@ UngrabAllDevices(Bool kill_client)
}
GrabPtr
-AllocGrab(void)
+AllocGrab(const GrabPtr src)
{
GrabPtr grab = calloc(1, sizeof(GrabRec));
@@ -201,6 +201,12 @@ AllocGrab(void)
}
}
+ if (src && !CopyGrab(grab, src)) {
+ free(grab->xi2mask);
+ free(grab);
+ grab = NULL;
+ }
+
return grab;
}
@@ -213,7 +219,7 @@ CreateGrab(int client, DeviceIntPtr device, DeviceIntPtr modDevice,
{
GrabPtr grab;
- grab = AllocGrab();
+ grab = AllocGrab(NULL);
if (!grab)
return (GrabPtr) NULL;
grab->resource = FakeClientID(client);
@@ -235,13 +241,11 @@ CreateGrab(int client, DeviceIntPtr device, DeviceIntPtr modDevice,
grab->detail.exact = keybut;
grab->detail.pMask = NULL;
grab->confineTo = confineTo;
- grab->cursor = cursor;
+ grab->cursor = RefCursor(cursor);
grab->next = NULL;
if (grabtype == XI2)
xi2mask_merge(grab->xi2mask, mask->xi2mask);
- if (cursor)
- cursor->refcnt++;
return grab;
}
@@ -249,8 +253,7 @@ CreateGrab(int client, DeviceIntPtr device, DeviceIntPtr modDevice,
void
FreeGrab(GrabPtr pGrab)
{
- if (pGrab->grabtype == XI2 && pGrab->type == XI_TouchBegin)
- TouchListenerGone(pGrab->resource);
+ BUG_RETURN(!pGrab);
free(pGrab->modifiersDetail.pMask);
free(pGrab->detail.pMask);
@@ -269,9 +272,6 @@ CopyGrab(GrabPtr dst, const GrabPtr src)
Mask *details_mask = NULL;
XI2Mask *xi2mask;
- if (src->cursor)
- src->cursor->refcnt++;
-
if (src->modifiersDetail.pMask) {
int len = MasksPerDetailMask * sizeof(Mask);
@@ -309,6 +309,7 @@ CopyGrab(GrabPtr dst, const GrabPtr src)
dst->modifiersDetail.pMask = mdetails_mask;
dst->detail.pMask = details_mask;
dst->xi2mask = xi2mask;
+ dst->cursor = RefCursor(src->cursor);
xi2mask_merge(dst->xi2mask, src->xi2mask);
diff --git a/xorg-server/dix/main.c b/xorg-server/dix/main.c
index bea1a8d5a..e69cd931f 100644
--- a/xorg-server/dix/main.c
+++ b/xorg-server/dix/main.c
@@ -211,6 +211,9 @@ main(int argc, char *argv[], char *envp[])
ScreenPtr pScreen = screenInfo.gpuscreens[i];
if (!CreateScratchPixmapsForScreen(pScreen))
FatalError("failed to create scratch pixmaps");
+ if (pScreen->CreateScreenResources &&
+ !(*pScreen->CreateScreenResources) (pScreen))
+ FatalError("failed to create screen resources");
}
for (i = 0; i < screenInfo.numScreens; i++) {
@@ -355,12 +358,16 @@ main(int argc, char *argv[], char *envp[])
dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT);
serverClient->devPrivates = NULL;
+ dixFreeRegistry();
+
FreeFonts();
FreeAllAtoms();
FreeAuditTimer();
+ DeleteCallbackManager();
+
if (dispatchException & DE_TERMINATE) {
CloseWellKnownConnections();
}
diff --git a/xorg-server/dix/pixmap.c b/xorg-server/dix/pixmap.c
index 241881262..fe9214739 100644
--- a/xorg-server/dix/pixmap.c
+++ b/xorg-server/dix/pixmap.c
@@ -243,6 +243,8 @@ Bool PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region)
}
dst = dirty->slave_dst->master_pixmap;
+ if (!dst)
+ dst = dirty->slave_dst;
RegionTranslate(dirty_region, -dirty->x, -dirty->y);
n = RegionNumRects(dirty_region);
diff --git a/xorg-server/dix/registry.c b/xorg-server/dix/registry.c
index 5bad0fdd4..82a3340e1 100644
--- a/xorg-server/dix/registry.c
+++ b/xorg-server/dix/registry.c
@@ -280,14 +280,9 @@ LookupResourceName(RESTYPE resource)
return resources[resource] ? resources[resource] : XREGISTRY_UNKNOWN;
}
-/*
- * Setup and teardown
- */
void
-dixResetRegistry(void)
+dixFreeRegistry(void)
{
- ExtensionEntry extEntry = { .name = CORE };
-
/* Free all memory */
while (nmajor--) {
while (nminor[nmajor])
@@ -315,9 +310,23 @@ dixResetRegistry(void)
nmajor = nevent = nerror = nresource = 0;
+ if (fh) {
+ fclose(fh);
+ fh = NULL;
+ }
+}
+
+/*
+ * Setup and teardown
+ */
+void
+dixResetRegistry(void)
+{
+ ExtensionEntry extEntry = { .name = CORE };
+
+ dixFreeRegistry();
+
/* Open the protocol file */
- if (fh)
- fclose(fh);
fh = fopen(FILENAME, "r");
if (!fh)
LogMessage(X_WARNING,
diff --git a/xorg-server/dix/touch.c b/xorg-server/dix/touch.c
index 891cc7803..a4b6d7eea 100644
--- a/xorg-server/dix/touch.c
+++ b/xorg-server/dix/touch.c
@@ -263,6 +263,7 @@ void
TouchFreeTouchPoint(DeviceIntPtr device, int index)
{
TouchPointInfoPtr ti;
+ int i;
if (!device->touch || index >= device->touch->num_touches)
return;
@@ -271,6 +272,9 @@ TouchFreeTouchPoint(DeviceIntPtr device, int index)
if (ti->active)
TouchEndTouch(device, ti);
+ for (i = 0; i < ti->num_listeners; i++)
+ TouchRemoveListener(ti, ti->listeners[0].listener);
+
valuator_mask_free(&ti->valuators);
free(ti->sprite.spriteTrace);
ti->sprite.spriteTrace = NULL;
@@ -365,6 +369,8 @@ TouchBeginTouch(DeviceIntPtr dev, int sourceid, uint32_t touchid,
void
TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti)
{
+ int i;
+
if (ti->emulate_pointer) {
GrabPtr grab;
@@ -376,6 +382,9 @@ TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti)
}
}
+ for (i = 0; i < ti->num_listeners; i++)
+ TouchRemoveListener(ti, ti->listeners[0].listener);
+
ti->active = FALSE;
ti->pending_finish = FALSE;
ti->sprite.spriteTraceGood = 0;
@@ -474,7 +483,21 @@ TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
DeviceEvent *ev = &ti->history[i];
ev->flags |= TOUCH_REPLAYING;
- DeliverTouchEvents(dev, ti, (InternalEvent *) ev, resource);
+ ev->resource = resource;
+ /* FIXME:
+ We're replaying ti->history which contains the TouchBegin +
+ all TouchUpdates for ti. This needs to be passed on to the next
+ listener. If that is a touch listener, everything is dandy.
+ If the TouchBegin however triggers a sync passive grab, the
+ TouchUpdate events must be sent to EnqueueEvent so the events end
+ up in syncEvents.pending to be forwarded correctly in a
+ subsequent ComputeFreeze().
+
+ However, if we just send them to EnqueueEvent the sync'ing device
+ prevents handling of touch events for ownership listeners who
+ want the events right here, right now.
+ */
+ dev->public.processInputProc((InternalEvent*)ev, dev);
}
}
@@ -620,14 +643,14 @@ TouchConvertToPointerEvent(const InternalEvent *event,
BUG_WARN_MSG(!(event->device_event.flags & TOUCH_POINTER_EMULATED),
"Non-emulating touch event\n");
- *motion_event = *event;
+ motion_event->device_event = event->device_event;
motion_event->any.type = ET_Motion;
motion_event->device_event.detail.button = 0;
motion_event->device_event.flags = XIPointerEmulated;
if (nevents > 1) {
BUG_RETURN_VAL(!button_event, 0);
- *button_event = *event;
+ button_event->device_event = event->device_event;
button_event->any.type = ptrtype;
button_event->device_event.flags = XIPointerEmulated;
/* detail is already correct */
@@ -678,15 +701,23 @@ void
TouchAddListener(TouchPointInfoPtr ti, XID resource, int resource_type,
enum InputLevel level, enum TouchListenerType type,
enum TouchListenerState state, WindowPtr window,
- GrabPtr grab)
+ const GrabPtr grab)
{
+ GrabPtr g = NULL;
+
+ /* We need a copy of the grab, not the grab itself since that may be
+ * deleted by a UngrabButton request and leaves us with a dangling
+ * pointer */
+ if (grab)
+ g = AllocGrab(grab);
+
ti->listeners[ti->num_listeners].listener = resource;
ti->listeners[ti->num_listeners].resource_type = resource_type;
ti->listeners[ti->num_listeners].level = level;
ti->listeners[ti->num_listeners].state = state;
ti->listeners[ti->num_listeners].type = type;
ti->listeners[ti->num_listeners].window = window;
- ti->listeners[ti->num_listeners].grab = grab;
+ ti->listeners[ti->num_listeners].grab = g;
if (grab)
ti->num_grabs++;
ti->num_listeners++;
@@ -704,21 +735,25 @@ TouchRemoveListener(TouchPointInfoPtr ti, XID resource)
int i;
for (i = 0; i < ti->num_listeners; i++) {
- if (ti->listeners[i].listener == resource) {
- int j;
+ int j;
+ TouchListener *listener = &ti->listeners[i];
- if (ti->listeners[i].grab) {
- ti->listeners[i].grab = NULL;
- ti->num_grabs--;
- }
+ if (listener->listener != resource)
+ continue;
- for (j = i; j < ti->num_listeners - 1; j++)
- ti->listeners[j] = ti->listeners[j + 1];
- ti->num_listeners--;
- ti->listeners[ti->num_listeners].listener = 0;
- ti->listeners[ti->num_listeners].state = LISTENER_AWAITING_BEGIN;
- return TRUE;
+ if (listener->grab) {
+ FreeGrab(listener->grab);
+ listener->grab = NULL;
+ ti->num_grabs--;
}
+
+ for (j = i; j < ti->num_listeners - 1; j++)
+ ti->listeners[j] = ti->listeners[j + 1];
+ ti->num_listeners--;
+ ti->listeners[ti->num_listeners].listener = 0;
+ ti->listeners[ti->num_listeners].state = LISTENER_AWAITING_BEGIN;
+
+ return TRUE;
}
return FALSE;
}
@@ -874,7 +909,7 @@ TouchSetupListeners(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev)
SpritePtr sprite = &ti->sprite;
WindowPtr win;
- if (dev->deviceGrab.grab)
+ if (dev->deviceGrab.grab && !dev->deviceGrab.fromPassiveGrab)
TouchAddActiveGrabListener(dev, ti, ev, dev->deviceGrab.grab);
/* We set up an active touch listener for existing touches, but not any
@@ -954,11 +989,11 @@ TouchListenerGone(XID resource)
continue;
for (j = 0; j < ti->num_listeners; j++) {
- if (ti->listeners[j].listener != resource)
+ if (CLIENT_BITS(ti->listeners[j].listener) != resource)
continue;
nev = GetTouchOwnershipEvents(events, dev, ti, XIRejectTouch,
- resource, 0);
+ ti->listeners[j].listener, 0);
for (k = 0; k < nev; k++)
mieqProcessDeviceEvent(dev, events + k, NULL);
@@ -1061,3 +1096,46 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
FreeEventList(eventlist, GetMaximumEventsNum());
}
+
+/**
+ * Generate and deliver a TouchEnd event.
+ *
+ * @param dev The device to deliver the event for.
+ * @param ti The touch point record to deliver the event for.
+ * @param flags Internal event flags. The called does not need to provide
+ * TOUCH_CLIENT_ID and TOUCH_POINTER_EMULATED, this function will ensure
+ * they are set appropriately.
+ * @param resource The client resource to deliver to, or 0 for all clients.
+ */
+void
+TouchEmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource)
+{
+ InternalEvent event;
+
+ /* We're not processing a touch end for a frozen device */
+ if (dev->deviceGrab.sync.frozen)
+ return;
+
+ flags |= TOUCH_CLIENT_ID;
+ if (ti->emulate_pointer)
+ flags |= TOUCH_POINTER_EMULATED;
+ TouchDeliverDeviceClassesChangedEvent(ti, GetTimeInMillis(), resource);
+ GetDixTouchEnd(&event, dev, ti, flags);
+ DeliverTouchEvents(dev, ti, &event, resource);
+ if (ti->num_grabs == 0)
+ UpdateDeviceState(dev, &event.device_event);
+}
+
+void
+TouchAcceptAndEnd(DeviceIntPtr dev, int touchid)
+{
+ TouchPointInfoPtr ti = TouchFindByClientID(dev, touchid);
+ if (!ti)
+ return;
+
+ TouchListenerAcceptReject(dev, ti, 0, XIAcceptTouch);
+ if (ti->pending_finish)
+ TouchEmitTouchEnd(dev, ti, 0, 0);
+ if (ti->num_listeners <= 1)
+ TouchEndTouch(dev, ti);
+}
diff --git a/xorg-server/dix/window.c b/xorg-server/dix/window.c
index a9297f3c8..8950f9766 100644
--- a/xorg-server/dix/window.c
+++ b/xorg-server/dix/window.c
@@ -547,8 +547,7 @@ InitRootWindow(WindowPtr pWin)
(*pScreen->PositionWindow) (pWin, 0, 0);
pWin->cursorIsNone = FALSE;
- pWin->optional->cursor = rootCursor;
- rootCursor->refcnt++;
+ pWin->optional->cursor = RefCursor(rootCursor);
if (party_like_its_1989) {
MakeRootTile(pWin);
@@ -1416,8 +1415,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
else if (pWin->parent && pCursor == wCursor(pWin->parent))
checkOptional = TRUE;
pOldCursor = pWin->optional->cursor;
- pWin->optional->cursor = pCursor;
- pCursor->refcnt++;
+ pWin->optional->cursor = RefCursor(pCursor);
pWin->cursorIsNone = FALSE;
/*
* check on any children now matching the new cursor
@@ -3323,8 +3321,7 @@ MakeWindowOptional(WindowPtr pWin)
parentOptional = FindWindowWithOptional(pWin)->optional;
optional->visual = parentOptional->visual;
if (!pWin->cursorIsNone) {
- optional->cursor = parentOptional->cursor;
- optional->cursor->refcnt++;
+ optional->cursor = RefCursor(parentOptional->cursor);
}
else {
optional->cursor = None;
@@ -3412,8 +3409,7 @@ ChangeWindowDeviceCursor(WindowPtr pWin, DeviceIntPtr pDev, CursorPtr pCursor)
if (pCursor && WindowParentHasDeviceCursor(pWin, pDev, pCursor))
pNode->cursor = None;
else {
- pNode->cursor = pCursor;
- pCursor->refcnt++;
+ pNode->cursor = RefCursor(pCursor);
}
pNode = pPrev = NULL;
@@ -3421,8 +3417,7 @@ ChangeWindowDeviceCursor(WindowPtr pWin, DeviceIntPtr pDev, CursorPtr pCursor)
for (pChild = pWin->firstChild; pChild; pChild = pChild->nextSib) {
if (WindowSeekDeviceCursor(pChild, pDev, &pNode, &pPrev)) {
if (pNode->cursor == None) { /* inherited from parent */
- pNode->cursor = pOldCursor;
- pOldCursor->refcnt++;
+ pNode->cursor = RefCursor(pOldCursor);
}
else if (pNode->cursor == pCursor) {
pNode->cursor = None;
diff --git a/xorg-server/fb/fbpixmap.c b/xorg-server/fb/fbpixmap.c
index fbcdca99c..0824b64bb 100644
--- a/xorg-server/fb/fbpixmap.c
+++ b/xorg-server/fb/fbpixmap.c
@@ -67,6 +67,7 @@ fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp,
pPixmap->devKind = paddedWidth;
pPixmap->refcnt = 1;
pPixmap->devPrivate.ptr = (pointer) ((char *) pPixmap + base + adjust);
+ pPixmap->master_pixmap = NULL;
#ifdef FB_DEBUG
pPixmap->devPrivate.ptr =
diff --git a/xorg-server/glx/glxdri.c b/xorg-server/glx/glxdri.c
index a997e2f8a..1ac683978 100644
--- a/xorg-server/glx/glxdri.c
+++ b/xorg-server/glx/glxdri.c
@@ -645,8 +645,10 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
for (i = 0; i < pScreen->numVisuals; i++, visual++)
if (visual->vid == glxConfig->visualID)
break;
- if (i == pScreen->numVisuals)
+ if (i == pScreen->numVisuals) {
+ free(context);
return NULL;
+ }
context->hwContextID = FakeClientID(0);
@@ -655,8 +657,10 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
context->hwContextID, &hwContext);
__glXleaveServer(GL_FALSE);
- if (!retval)
+ if (!retval) {
+ free(context);
return NULL;
+ }
context->driContext = screen->legacy->createNewContext(screen->driScreen, config->driConfig, 0, /* render type */
driShare,
@@ -885,7 +889,7 @@ glxDRILeaveVT(ScrnInfoPtr scrn)
__GLXDRIscreen *screen = (__GLXDRIscreen *)
glxGetScreen(xf86ScrnToScreen(scrn));
- LogMessage(X_INFO, "AIGLX: Suspending AIGLX clients for VT switch\n");
+ LogMessageVerbSigSafe(X_INFO, -1, "AIGLX: Suspending AIGLX clients for VT switch\n");
glxSuspendClients();
diff --git a/xorg-server/glx/glxdri2.c b/xorg-server/glx/glxdri2.c
index e07cb5632..8a1fa4159 100644
--- a/xorg-server/glx/glxdri2.c
+++ b/xorg-server/glx/glxdri2.c
@@ -835,7 +835,7 @@ glxDRILeaveVT(ScrnInfoPtr scrn)
__GLXDRIscreen *screen = (__GLXDRIscreen *)
glxGetScreen(xf86ScrnToScreen(scrn));
- LogMessage(X_INFO, "AIGLX: Suspending AIGLX clients for VT switch\n");
+ LogMessageVerbSigSafe(X_INFO, -1, "AIGLX: Suspending AIGLX clients for VT switch\n");
glxSuspendClients();
@@ -946,7 +946,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
&screen->fd, &driverName, &deviceName)) {
LogMessage(X_INFO,
"AIGLX: Screen %d is not DRI2 capable\n", pScreen->myNum);
- return NULL;
+ goto handle_error;
}
screen->base.destroy = __glXDRIscreenDestroy;
diff --git a/xorg-server/hw/dmx/config/dmxcompat.c b/xorg-server/hw/dmx/config/dmxcompat.c
index bd9f12738..107991a96 100644
--- a/xorg-server/hw/dmx/config/dmxcompat.c
+++ b/xorg-server/hw/dmx/config/dmxcompat.c
@@ -228,5 +228,9 @@ dmxVDLRead(const char *filename)
break;
}
}
+
+ if (str != stdin)
+ fclose(str);
+
return entry;
}
diff --git a/xorg-server/hw/kdrive/ephyr/man/Xephyr.man b/xorg-server/hw/kdrive/ephyr/man/Xephyr.man
index ca88ab240..f14f6c864 100644
--- a/xorg-server/hw/kdrive/ephyr/man/Xephyr.man
+++ b/xorg-server/hw/kdrive/ephyr/man/Xephyr.man
@@ -46,7 +46,7 @@ and the following additional options:
sets the screen size.
.TP 8
.BI -parent " id"
-uses exiting window
+uses existing window
.I id .
If a
.BI -screen
@@ -59,6 +59,10 @@ set 'cursor acceleration':
The host's cursor is reused. This is only really there to aid
debugging by avoiding server paints for the cursor. Performance
improvement is negligible.
+.TP 8
+.B -resizeable
+Allow the Xephyr window to be resized, even if not embedded into a parent
+window. By default, the Xephyr window has a fixed size.
.SH "SIGNALS"
Send a SIGUSR1 to the server (e.g. pkill -USR1 Xephyr) to
toggle the debugging mode.
diff --git a/xorg-server/hw/kdrive/fbdev/fbdev.c b/xorg-server/hw/kdrive/fbdev/fbdev.c
index d6fcf1a5f..95f64cbef 100644
--- a/xorg-server/hw/kdrive/fbdev/fbdev.c
+++ b/xorg-server/hw/kdrive/fbdev/fbdev.c
@@ -30,7 +30,7 @@
extern int KdTsPhyScreen;
-char *fbdevDevicePath = NULL;
+const char *fbdevDevicePath = NULL;
static Bool
fbdevInitialize(KdCardInfo * card, FbdevPriv * priv)
@@ -206,13 +206,23 @@ fbdevScreenInitialize(KdScreenInfo * screen, FbdevScrPriv * scrpriv)
depth = priv->var.bits_per_pixel;
gray = priv->var.grayscale;
+ /* Calculate fix.line_length if it's zero */
+ if (!priv->fix.line_length)
+ priv->fix.line_length = (priv->var.xres_virtual * depth + 7) / 8;
+
switch (priv->fix.visual) {
+ case FB_VISUAL_MONO01:
+ case FB_VISUAL_MONO10:
+ screen->fb.visuals = (1 << StaticGray);
+ break;
case FB_VISUAL_PSEUDOCOLOR:
- if (gray) {
- screen->fb.visuals = (1 << StaticGray);
+ screen->fb.visuals = (1 << StaticGray);
+ if (priv->var.bits_per_pixel == 1) {
+ /* Override to monochrome, to have preallocated black/white */
+ priv->fix.visual = FB_VISUAL_MONO01;
+ } else if (gray) {
/* could also support GrayScale, but what's the point? */
- }
- else {
+ } else {
screen->fb.visuals = ((1 << StaticGray) |
(1 << GrayScale) |
(1 << StaticColor) |
@@ -309,6 +319,21 @@ fbdevWindowLinear(ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
}
+static void *
+fbdevWindowAfb(ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset, int mode, CARD32 *size, void *closure)
+{
+ KdScreenPriv(pScreen);
+ FbdevPriv *priv = pScreenPriv->card->driver;
+
+ if (!pScreenPriv->enabled)
+ return 0;
+ /* offset to next plane */
+ *size = priv->var.yres_virtual * priv->fix.line_length;
+ return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
+}
+
Bool
fbdevMapFramebuffer(KdScreenInfo * screen)
{
@@ -316,7 +341,8 @@ fbdevMapFramebuffer(KdScreenInfo * screen)
KdPointerMatrix m;
FbdevPriv *priv = screen->card->driver;
- if (scrpriv->randr != RR_Rotate_0)
+ if (scrpriv->randr != RR_Rotate_0 ||
+ priv->fix.type != FB_TYPE_PACKED_PIXELS)
scrpriv->shadow = TRUE;
else
scrpriv->shadow = FALSE;
@@ -392,33 +418,88 @@ fbdevSetShadow(ScreenPtr pScreen)
window = fbdevWindowLinear;
update = 0;
- if (scrpriv->randr)
- if (priv->var.bits_per_pixel == 16) {
- switch (scrpriv->randr) {
- case RR_Rotate_90:
- if (useYX)
- update = shadowUpdateRotate16_90YX;
- else
- update = shadowUpdateRotate16_90;
- break;
- case RR_Rotate_180:
- update = shadowUpdateRotate16_180;
+ switch (priv->fix.type) {
+ case FB_TYPE_PACKED_PIXELS:
+ if (scrpriv->randr)
+ if (priv->var.bits_per_pixel == 16) {
+ switch (scrpriv->randr) {
+ case RR_Rotate_90:
+ if (useYX)
+ update = shadowUpdateRotate16_90YX;
+ else
+ update = shadowUpdateRotate16_90;
+ break;
+ case RR_Rotate_180:
+ update = shadowUpdateRotate16_180;
+ break;
+ case RR_Rotate_270:
+ if (useYX)
+ update = shadowUpdateRotate16_270YX;
+ else
+ update = shadowUpdateRotate16_270;
+ break;
+ default:
+ update = shadowUpdateRotate16;
+ break;
+ }
+ }
+ else
+ update = shadowUpdateRotatePacked;
+ else
+ update = shadowUpdatePacked;
+ break;
+
+ case FB_TYPE_PLANES:
+ window = fbdevWindowAfb;
+ switch (priv->var.bits_per_pixel) {
+ case 4:
+ update = shadowUpdateAfb4;
+ break;
+
+ case 8:
+ update = shadowUpdateAfb8;
+ break;
+
+ default:
+ FatalError("Bitplanes with bpp %u are not yet supported\n",
+ priv->var.bits_per_pixel);
+ }
+ break;
+
+ case FB_TYPE_INTERLEAVED_PLANES:
+ if (priv->fix.type_aux == 2) {
+ switch (priv->var.bits_per_pixel) {
+ case 4:
+ update = shadowUpdateIplan2p4;
break;
- case RR_Rotate_270:
- if (useYX)
- update = shadowUpdateRotate16_270YX;
- else
- update = shadowUpdateRotate16_270;
+
+ case 8:
+ update = shadowUpdateIplan2p8;
break;
+
default:
- update = shadowUpdateRotate16;
- break;
+ FatalError("Atari interleaved bitplanes with bpp %u are not yet supported\n",
+ priv->var.bits_per_pixel);
}
+ } else {
+ FatalError("Interleaved bitplanes with interleave %u are not yet supported\n",
+ priv->fix.type_aux);
}
- else
- update = shadowUpdateRotatePacked;
- else
- update = shadowUpdatePacked;
+ break;
+
+ case FB_TYPE_TEXT:
+ FatalError("Text frame buffers are not yet supported\n");
+ break;
+
+ case FB_TYPE_VGA_PLANES:
+ FatalError("VGA planes are not yet supported\n");
+ break;
+
+ default:
+ FatalError("Unsupported frame buffer type %u\n", priv->fix.type);
+ break;
+ }
+
return KdShadowSet(pScreen, scrpriv->randr, update, window);
}
@@ -573,6 +654,26 @@ fbdevCreateColormap(ColormapPtr pmap)
xColorItem *pdefs;
switch (priv->fix.visual) {
+ case FB_VISUAL_MONO01:
+ pScreen->whitePixel = 0;
+ pScreen->blackPixel = 1;
+ pmap->red[0].co.local.red = 65535;
+ pmap->red[0].co.local.green = 65535;
+ pmap->red[0].co.local.blue = 65535;
+ pmap->red[1].co.local.red = 0;
+ pmap->red[1].co.local.green = 0;
+ pmap->red[1].co.local.blue = 0;
+ return TRUE;
+ case FB_VISUAL_MONO10:
+ pScreen->blackPixel = 0;
+ pScreen->whitePixel = 1;
+ pmap->red[0].co.local.red = 0;
+ pmap->red[0].co.local.green = 0;
+ pmap->red[0].co.local.blue = 0;
+ pmap->red[1].co.local.red = 65535;
+ pmap->red[1].co.local.green = 65535;
+ pmap->red[1].co.local.blue = 65535;
+ return TRUE;
case FB_VISUAL_STATIC_PSEUDOCOLOR:
pVisual = pmap->pVisual;
nent = pVisual->ColormapEntries;
diff --git a/xorg-server/hw/kdrive/fbdev/fbdev.h b/xorg-server/hw/kdrive/fbdev/fbdev.h
index 0706f4e11..f3f7aeceb 100644
--- a/xorg-server/hw/kdrive/fbdev/fbdev.h
+++ b/xorg-server/hw/kdrive/fbdev/fbdev.h
@@ -49,7 +49,7 @@ typedef struct _fbdevScrPriv {
} FbdevScrPriv;
extern KdCardFuncs fbdevFuncs;
-extern char *fbdevDevicePath;
+extern const char *fbdevDevicePath;
Bool
fbdevCardInit(KdCardInfo * card);
diff --git a/xorg-server/hw/kdrive/src/kdrive.c b/xorg-server/hw/kdrive/src/kdrive.c
index 7d9bf9ddd..1899a27a9 100644
--- a/xorg-server/hw/kdrive/src/kdrive.c
+++ b/xorg-server/hw/kdrive/src/kdrive.c
@@ -943,7 +943,8 @@ KdInitScreen(ScreenInfo * pScreenInfo,
{
KdCardInfo *card = screen->card;
- (*card->cfuncs->scrinit) (screen);
+ if (!(*card->cfuncs->scrinit) (screen))
+ FatalError("Screen initialization failed!\n");
if (!card->cfuncs->initAccel)
screen->dumb = TRUE;
diff --git a/xorg-server/hw/xfree86/common/xf86.h b/xorg-server/hw/xfree86/common/xf86.h
index 1514c2603..eada01cf9 100644
--- a/xorg-server/hw/xfree86/common/xf86.h
+++ b/xorg-server/hw/xfree86/common/xf86.h
@@ -198,11 +198,6 @@ extern _X_EXPORT void *xf86GetPointerScreenFuncs(void);
extern _X_EXPORT void xf86InitOrigins(void);
extern _X_EXPORT void xf86ReconfigureLayout(void);
-/* xf86cvt.c */
-extern _X_EXPORT DisplayModePtr xf86CVTMode(int HDisplay, int VDisplay,
- float VRefresh, Bool Reduced,
- Bool Interlaced);
-
/* xf86DPMS.c */
extern _X_EXPORT Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set,
@@ -243,6 +238,7 @@ extern _X_EXPORT void xf86InterceptSigIll(void (*sigillhandler) (void));
extern _X_EXPORT Bool xf86EnableVTSwitch(Bool new);
extern _X_EXPORT void xf86ProcessActionEvent(ActionEvent action, void *arg);
extern _X_EXPORT void xf86PrintBacktrace(void);
+extern _X_EXPORT Bool xf86VTOwner(void);
/* xf86Helper.c */
@@ -413,26 +409,6 @@ extern _X_EXPORT void
xf86PrintModes(ScrnInfoPtr scrp);
extern _X_EXPORT void
xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges);
-extern _X_EXPORT double
-xf86ModeHSync(const DisplayModeRec * mode);
-extern _X_EXPORT double
-xf86ModeVRefresh(const DisplayModeRec * mode);
-extern _X_EXPORT void
-xf86SetModeDefaultName(DisplayModePtr mode);
-extern _X_EXPORT void
-xf86SetModeCrtc(DisplayModePtr p, int adjustFlags);
-extern _X_EXPORT DisplayModePtr
-xf86DuplicateMode(const DisplayModeRec * pMode);
-extern _X_EXPORT void
-xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec * pMode);
-extern _X_EXPORT DisplayModePtr
-xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList);
-extern _X_EXPORT Bool
-xf86ModesEqual(const DisplayModeRec * pMode1, const DisplayModeRec * pMode2);
-extern _X_EXPORT void
-xf86PrintModeline(int scrnIndex, DisplayModePtr mode);
-extern _X_EXPORT DisplayModePtr
-xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new);
/* xf86Option.c */
diff --git a/xorg-server/hw/xfree86/common/xf86Config.c b/xorg-server/hw/xfree86/common/xf86Config.c
index 486752b07..74d5ed3b7 100644
--- a/xorg-server/hw/xfree86/common/xf86Config.c
+++ b/xorg-server/hw/xfree86/common/xf86Config.c
@@ -52,6 +52,7 @@
#endif
#include "xf86.h"
+#include "xf86Modes.h"
#include "xf86Parser.h"
#include "xf86tokens.h"
#include "xf86Config.h"
diff --git a/xorg-server/hw/xfree86/common/xf86Events.c b/xorg-server/hw/xfree86/common/xf86Events.c
index 055223310..7a949fd74 100644
--- a/xorg-server/hw/xfree86/common/xf86Events.c
+++ b/xorg-server/hw/xfree86/common/xf86Events.c
@@ -84,6 +84,7 @@
#include "dpmsproc.h"
#endif
+#include "xf86platformBus.h"
/*
* This is a toggling variable:
* FALSE = No VT switching keys have been pressed last time around
@@ -427,7 +428,7 @@ xf86VTSwitch(void)
* Since all screens are currently all in the same state it is sufficient
* check the first. This might change in future.
*/
- if (xf86Screens[0]->vtSema) {
+ if (xf86VTOwner()) {
DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n",
BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE));
@@ -560,6 +561,11 @@ xf86VTSwitch(void)
for (ih = InputHandlers; ih; ih = ih->next)
xf86EnableInputHandler(ih);
+#ifdef XSERVER_PLATFORM_BUS
+ /* check for any new output devices */
+ xf86platformVTProbe();
+#endif
+
OsReleaseSIGIO();
}
}
@@ -768,3 +774,12 @@ DDXRingBell(int volume, int pitch, int duration)
{
xf86OSRingBell(volume, pitch, duration);
}
+
+Bool
+xf86VTOwner(void)
+{
+ /* at system startup xf86Screens[0] won't be set - but we will own the VT */
+ if (xf86NumScreens == 0)
+ return TRUE;
+ return xf86Screens[0]->vtSema;
+}
diff --git a/xorg-server/hw/xfree86/common/xf86Init.c b/xorg-server/hw/xfree86/common/xf86Init.c
index 1695dbf74..91ec4c8bb 100644
--- a/xorg-server/hw/xfree86/common/xf86Init.c
+++ b/xorg-server/hw/xfree86/common/xf86Init.c
@@ -819,7 +819,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
if (serverGeneration != 1) {
xf86Resetting = TRUE;
/* All screens are in the same state, so just check the first */
- if (!xf86Screens[0]->vtSema) {
+ if (!xf86VTOwner()) {
#ifdef HAS_USL_VTS
ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
#endif
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.c b/xorg-server/hw/xfree86/common/xf86Xinput.c
index bee407bf9..26c03c6c3 100644
--- a/xorg-server/hw/xfree86/common/xf86Xinput.c
+++ b/xorg-server/hw/xfree86/common/xf86Xinput.c
@@ -870,7 +870,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
}
/* Enable it if it's properly initialised and we're currently in the VT */
- if (enable && dev->inited && dev->startup && xf86Screens[0]->vtSema) {
+ if (enable && dev->inited && dev->startup && xf86VTOwner()) {
OsBlockSignals();
EnableDevice(dev, TRUE);
if (!dev->enabled) {
diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.c b/xorg-server/hw/xfree86/common/xf86platformBus.c
index 58663336a..e368deeb8 100644
--- a/xorg-server/hw/xfree86/common/xf86platformBus.c
+++ b/xorg-server/hw/xfree86/common/xf86platformBus.c
@@ -47,6 +47,7 @@
#include "Pci.h"
#include "xf86platformBus.h"
+#include "randrstr.h"
int platformSlotClaimed;
int xf86_num_platform_devices;
@@ -113,6 +114,11 @@ xf86_get_platform_device_attrib(struct xf86_platform_device *device, int attrib_
return NULL;
}
+Bool
+xf86_get_platform_device_unowned(int index)
+{
+ return xf86_platform_devices[index].attribs->unowned;
+}
/*
* xf86IsPrimaryPlatform() -- return TRUE if primary device
@@ -449,6 +455,14 @@ xf86platformAddDevice(int index)
CreateScratchPixmapsForScreen(xf86GPUScreens[i]->pScreen);
+ if (xf86GPUScreens[i]->pScreen->CreateScreenResources &&
+ !(*xf86GPUScreens[i]->pScreen->CreateScreenResources) (xf86GPUScreens[i]->pScreen)) {
+ RemoveGPUScreen(xf86GPUScreens[i]->pScreen);
+ xf86DeleteScreen(xf86GPUScreens[i]);
+ xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
+ xf86NumGPUScreens = old_screens;
+ return -1;
+ }
/* attach unbound to 0 protocol screen */
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
@@ -494,8 +508,22 @@ xf86platformRemoveDevice(int index)
xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
xf86_remove_platform_device(index);
-
+ RRTellChanged(xf86Screens[0]->pScreen);
out:
return;
}
+
+/* called on return from VT switch to find any new devices */
+void xf86platformVTProbe(void)
+{
+ int i;
+
+ for (i = 0; i < xf86_num_platform_devices; i++) {
+ if (xf86_platform_devices[i].attribs->unowned == FALSE)
+ continue;
+
+ xf86_platform_devices[i].attribs->unowned = FALSE;
+ xf86PlatformReprobeDevice(i, xf86_platform_devices[i].attribs);
+ }
+}
#endif
diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.h b/xorg-server/hw/xfree86/common/xf86platformBus.h
index 49afc247b..4e1757854 100644
--- a/xorg-server/hw/xfree86/common/xf86platformBus.h
+++ b/xorg-server/hw/xfree86/common/xf86platformBus.h
@@ -46,6 +46,8 @@ extern int
xf86_remove_platform_device(int dev_index);
extern Bool
xf86_add_platform_device_attrib(int index, int attrib_id, char *attrib_str);
+extern Bool
+xf86_get_platform_device_unowned(int index);
extern int
xf86platformAddDevice(int index);
@@ -59,6 +61,8 @@ xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *bu
extern _X_EXPORT int
xf86PlatformMatchDriver(char *matches[], int nmatches);
+
+extern void xf86platformVTProbe(void);
#endif
#endif
diff --git a/xorg-server/hw/xfree86/common/xf86sbusBus.c b/xorg-server/hw/xfree86/common/xf86sbusBus.c
index b6a6b94b3..07eb71ed8 100644
--- a/xorg-server/hw/xfree86/common/xf86sbusBus.c
+++ b/xorg-server/hw/xfree86/common/xf86sbusBus.c
@@ -641,14 +641,16 @@ xf86SbusCmapLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
int i, index;
sbusCmapPtr cmap;
struct fbcmap fbcmap;
- unsigned char *data = malloc(numColors * 3);
+ unsigned char *data;
cmap = SBUSCMAPPTR(pScrn->pScreen);
if (!cmap)
return;
fbcmap.count = 0;
fbcmap.index = indices[0];
- fbcmap.red = data;
+ fbcmap.red = data = malloc(numColors * 3);
+ if (!data)
+ return;
fbcmap.green = data + numColors;
fbcmap.blue = fbcmap.green + numColors;
for (i = 0; i < numColors; i++) {
diff --git a/xorg-server/hw/xfree86/ddc/xf86DDC.h b/xorg-server/hw/xfree86/ddc/xf86DDC.h
index c63da8bff..bdc7648a9 100644
--- a/xorg-server/hw/xfree86/ddc/xf86DDC.h
+++ b/xorg-server/hw/xfree86/ddc/xf86DDC.h
@@ -45,8 +45,6 @@ extern _X_EXPORT void
extern _X_EXPORT Bool xf86SetDDCproperties(ScrnInfoPtr pScreen, xf86MonPtr DDC);
-extern _X_EXPORT DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
-
extern _X_EXPORT Bool
xf86MonitorIsHDMI(xf86MonPtr mon);
diff --git a/xorg-server/hw/xfree86/fbdevhw/Makefile.am b/xorg-server/hw/xfree86/fbdevhw/Makefile.am
index 1fa9321cb..ee5577a86 100644
--- a/xorg-server/hw/xfree86/fbdevhw/Makefile.am
+++ b/xorg-server/hw/xfree86/fbdevhw/Makefile.am
@@ -10,7 +10,7 @@ else
libfbdevhw_la_SOURCES = fbdevhwstub.c
endif
-INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
+INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c -I$(srcdir)/../modes -I$(srcdir)/../ddc -I$(srcdir)/../parser
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
diff --git a/xorg-server/hw/xfree86/fbdevhw/fbdevhw.c b/xorg-server/hw/xfree86/fbdevhw/fbdevhw.c
index d4b5558a7..cbb40930b 100644
--- a/xorg-server/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/xorg-server/hw/xfree86/fbdevhw/fbdevhw.c
@@ -6,6 +6,7 @@
#include <string.h>
#include "xf86.h"
+#include "xf86Modes.h"
#include "xf86_OSproc.h"
/* pci stuff */
diff --git a/xorg-server/hw/xfree86/modes/Makefile.am b/xorg-server/hw/xfree86/modes/Makefile.am
index 9236426bf..7e33ebb17 100644
--- a/xorg-server/hw/xfree86/modes/Makefile.am
+++ b/xorg-server/hw/xfree86/modes/Makefile.am
@@ -16,7 +16,6 @@ libxf86modes_la_SOURCES = \
xf86Modes.h \
xf86RandR12.c \
xf86RandR12.h \
- xf86Rename.h \
xf86Rotate.c \
$(DGA_SRCS)
@@ -29,7 +28,6 @@ INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
sdk_HEADERS = \
xf86Crtc.h \
xf86Modes.h \
- xf86RandR12.h \
- xf86Rename.h
+ xf86RandR12.h
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
diff --git a/xorg-server/hw/xfree86/modes/xf86Crtc.c b/xorg-server/hw/xfree86/modes/xf86Crtc.c
index e4b393cb1..35845e875 100644
--- a/xorg-server/hw/xfree86/modes/xf86Crtc.c
+++ b/xorg-server/hw/xfree86/modes/xf86Crtc.c
@@ -1997,6 +1997,14 @@ xf86CollectEnabledOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
Bool any_enabled = FALSE;
int o;
+ /*
+ * Don't bother enabling outputs on GPU screens: a client needs to attach
+ * it to a source provider before setting a mode that scans out a shared
+ * pixmap.
+ */
+ if (scrn->is_gpu)
+ return FALSE;
+
for (o = 0; o < config->num_output; o++)
any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE);
@@ -2449,11 +2457,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
config->debug_modes = xf86ReturnOptValBool(config->options,
OPTION_MODEDEBUG, FALSE);
- if (scrn->display->virtualX)
+ if (scrn->display->virtualX && !scrn->is_gpu)
width = scrn->display->virtualX;
else
width = config->maxWidth;
- if (scrn->display->virtualY)
+ if (scrn->display->virtualY && !scrn->is_gpu)
height = scrn->display->virtualY;
else
height = config->maxHeight;
@@ -2466,9 +2474,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
ret = xf86CollectEnabledOutputs(scrn, config, enabled);
if (ret == FALSE && canGrow) {
- xf86DrvMsg(i, X_WARNING,
- "Unable to find connected outputs - setting %dx%d initial framebuffer\n",
- NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT);
+ if (!scrn->is_gpu)
+ xf86DrvMsg(i, X_WARNING,
+ "Unable to find connected outputs - setting %dx%d "
+ "initial framebuffer\n",
+ NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT);
have_outputs = FALSE;
}
else {
@@ -2517,8 +2527,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
/* XXX override xf86 common frame computation code */
- scrn->display->frameX0 = 0;
- scrn->display->frameY0 = 0;
+ if (!scrn->is_gpu) {
+ scrn->display->frameX0 = 0;
+ scrn->display->frameY0 = 0;
+ }
for (c = 0; c < config->num_crtc; c++) {
xf86CrtcPtr crtc = config->crtc[c];
@@ -2566,7 +2578,7 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
}
}
- if (scrn->display->virtualX == 0) {
+ if (scrn->display->virtualX == 0 || scrn->is_gpu) {
/*
* Expand virtual size to cover the current config and potential mode
* switches, if the driver can't enlarge the screen later.
@@ -2581,8 +2593,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
}
}
- scrn->display->virtualX = width;
- scrn->display->virtualY = height;
+ if (!scrn->is_gpu) {
+ scrn->display->virtualX = width;
+ scrn->display->virtualY = height;
+ }
}
if (width > scrn->virtualX)
@@ -2687,8 +2701,8 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CrtcPtr crtc = config->crtc[0];
+ int enabled = 0, failed = 0;
int c;
- int enabled = 0;
/* A driver with this hook will take care of this */
if (!crtc->funcs->set_mode_major) {
@@ -2748,11 +2762,12 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
if (config->output[o]->crtc == crtc)
config->output[o]->crtc = NULL;
crtc->enabled = FALSE;
+ ++failed;
}
}
xf86DisableUnusedFunctions(scrn);
- return enabled != 0;
+ return enabled != 0 || failed == 0;
}
/**
diff --git a/xorg-server/hw/xfree86/modes/xf86Crtc.h b/xorg-server/hw/xfree86/modes/xf86Crtc.h
index 802303f74..c127d78af 100644
--- a/xorg-server/hw/xfree86/modes/xf86Crtc.h
+++ b/xorg-server/hw/xfree86/modes/xf86Crtc.h
@@ -25,9 +25,6 @@
#include <edid.h>
#include "randrstr.h"
-#if XF86_MODES_RENAME
-#include "xf86Rename.h"
-#endif
#include "xf86Modes.h"
#include "xf86Cursor.h"
#include "xf86i2c.h"
diff --git a/xorg-server/hw/xfree86/modes/xf86Cursors.c b/xorg-server/hw/xfree86/modes/xf86Cursors.c
index 634ee3fe0..2b0db3492 100644
--- a/xorg-server/hw/xfree86/modes/xf86Cursors.c
+++ b/xorg-server/hw/xfree86/modes/xf86Cursors.c
@@ -481,7 +481,7 @@ xf86_use_hw_cursor(ScreenPtr screen, CursorPtr cursor)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CursorInfoPtr cursor_info = xf86_config->cursor_info;
- ++cursor->refcnt;
+ cursor = RefCursor(cursor);
if (xf86_config->cursor)
FreeCursor(xf86_config->cursor, None);
xf86_config->cursor = cursor;
@@ -500,7 +500,7 @@ xf86_use_hw_cursor_argb(ScreenPtr screen, CursorPtr cursor)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CursorInfoPtr cursor_info = xf86_config->cursor_info;
- ++cursor->refcnt;
+ cursor = RefCursor(cursor);
if (xf86_config->cursor)
FreeCursor(xf86_config->cursor, None);
xf86_config->cursor = cursor;
diff --git a/xorg-server/hw/xfree86/modes/xf86DisplayIDModes.c b/xorg-server/hw/xfree86/modes/xf86DisplayIDModes.c
index bead1265a..c2e771894 100644
--- a/xorg-server/hw/xfree86/modes/xf86DisplayIDModes.c
+++ b/xorg-server/hw/xfree86/modes/xf86DisplayIDModes.c
@@ -25,6 +25,7 @@
#include "xorg-config.h"
#include "xf86.h"
+#include "xf86Modes.h"
#include "xf86str.h"
#include "edid.h"
#include "xf86DDC.h"
diff --git a/xorg-server/hw/xfree86/modes/xf86Modes.h b/xorg-server/hw/xfree86/modes/xf86Modes.h
index aec7688c4..545891884 100644
--- a/xorg-server/hw/xfree86/modes/xf86Modes.h
+++ b/xorg-server/hw/xfree86/modes/xf86Modes.h
@@ -36,9 +36,6 @@
#include "xorgVersion.h"
#include "edid.h"
#include "xf86Parser.h"
-#if XF86_MODES_RENAME
-#include "xf86Rename.h"
-#endif
extern _X_EXPORT double xf86ModeHSync(const DisplayModeRec * mode);
extern _X_EXPORT double xf86ModeVRefresh(const DisplayModeRec * mode);
@@ -112,6 +109,9 @@ xf86GetMonitorModes(ScrnInfoPtr pScrn, XF86ConfMonitorPtr conf_monitor);
extern _X_EXPORT DisplayModePtr xf86GetDefaultModes(void);
extern _X_EXPORT void
+xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec *mode);
+
+extern _X_EXPORT void
xf86DDCApplyQuirks(int scrnIndex, xf86MonPtr DDC);
#endif /* _XF86MODES_H_ */
diff --git a/xorg-server/hw/xfree86/modes/xf86RandR12.c b/xorg-server/hw/xfree86/modes/xf86RandR12.c
index 01fc9c5e3..2817aaa1f 100644
--- a/xorg-server/hw/xfree86/modes/xf86RandR12.c
+++ b/xorg-server/hw/xfree86/modes/xf86RandR12.c
@@ -31,6 +31,7 @@
#include "xf86.h"
#include "os.h"
#include "globals.h"
+#include "xf86Modes.h"
#include "xf86Priv.h"
#include "xf86DDC.h"
#include "mipointer.h"
@@ -1895,10 +1896,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
if (config->randr_provider->offload_sink) {
DetachOffloadGPU(screen);
config->randr_provider->offload_sink = NULL;
+ RRSetChanged(screen);
}
else if (config->randr_provider->output_source) {
DetachOutputGPU(screen);
config->randr_provider->output_source = NULL;
+ RRSetChanged(screen);
}
else if (screen->current_master)
DetachUnboundGPU(screen);
diff --git a/xorg-server/hw/xfree86/modes/xf86RandR12.h b/xorg-server/hw/xfree86/modes/xf86RandR12.h
index 9ad695cec..e603799be 100644
--- a/xorg-server/hw/xfree86/modes/xf86RandR12.h
+++ b/xorg-server/hw/xfree86/modes/xf86RandR12.h
@@ -24,9 +24,6 @@
#define _XF86_RANDR_H_
#include <randrstr.h>
#include <X11/extensions/render.h>
-#if XF86_MODES_RENAME
-#include "xf86Rename.h"
-#endif
extern _X_EXPORT Bool xf86RandR12CreateScreenResources(ScreenPtr pScreen);
extern _X_EXPORT Bool xf86RandR12Init(ScreenPtr pScreen);
diff --git a/xorg-server/hw/xfree86/modes/xf86Rename.h b/xorg-server/hw/xfree86/modes/xf86Rename.h
deleted file mode 100644
index 46690a8f6..000000000
--- a/xorg-server/hw/xfree86/modes/xf86Rename.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright © 2006 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#ifndef _XF86RENAME_H_
-#define _XF86RENAME_H_
-
-#include "local_xf86Rename.h"
-
-#define xf86_cursors_fini XF86NAME(xf86_cursors_fini)
-#define xf86_cursors_init XF86NAME(xf86_cursors_init)
-#define xf86_hide_cursors XF86NAME(xf86_hide_cursors)
-#define xf86_reload_cursors XF86NAME(xf86_reload_cursors)
-#define xf86_show_cursors XF86NAME(xf86_show_cursors)
-#define xf86ConnectorGetName XF86NAME(xf86ConnectorGetName)
-#define xf86CrtcConfigInit XF86NAME(xf86CrtcConfigInit)
-#define xf86CrtcConfigPrivateIndex XF86NAME(xf86CrtcConfigPrivateIndex)
-#define xf86CrtcCreate XF86NAME(xf86CrtcCreate)
-#define xf86CrtcDestroy XF86NAME(xf86CrtcDestroy)
-#define xf86CrtcInUse XF86NAME(xf86CrtcInUse)
-#define xf86CrtcRotate XF86NAME(xf86CrtcRotate)
-#define xf86CrtcScreenInit XF86NAME(xf86CrtcScreenInit)
-#define xf86CrtcSetModeTransform XF86NAME(xf86CrtcSetModeTransform)
-#define xf86CrtcSetMode XF86NAME(xf86CrtcSetMode)
-#define xf86CrtcSetSizeRange XF86NAME(xf86CrtcSetSizeRange)
-#define xf86CVTMode XF86NAME(xf86CVTMode)
-#define xf86DDCMonitorSet XF86NAME(xf86DDCMonitorSet)
-#define xf86DisableUnusedFunctions XF86NAME(xf86DisableUnusedFunctions)
-#define xf86DPMSSet XF86NAME(xf86DPMSSet)
-#define xf86DuplicateMode XF86NAME(xf86DuplicateMode)
-#define xf86DuplicateModes XF86NAME(xf86DuplicateModes)
-#define xf86GetDefaultModes XF86NAME(xf86GetDefaultModes)
-#define xf86GetMonitorModes XF86NAME(xf86GetMonitorModes)
-#define xf86InitialConfiguration XF86NAME(xf86InitialConfiguration)
-#define xf86ModeHSync XF86NAME(xf86ModeHSync)
-#define xf86ModesAdd XF86NAME(xf86ModesAdd)
-#define xf86ModesEqual XF86NAME(xf86ModesEqual)
-#define xf86ModeVRefresh XF86NAME(xf86ModeVRefresh)
-#define xf86OutputCreate XF86NAME(xf86OutputCreate)
-#define xf86OutputDestroy XF86NAME(xf86OutputDestroy)
-#define xf86OutputGetEDID XF86NAME(xf86OutputGetEDID)
-#define xf86OutputGetEDIDModes XF86NAME(xf86OutputGetEDIDModes)
-#define xf86OutputRename XF86NAME(xf86OutputRename)
-#define xf86OutputSetEDID XF86NAME(xf86OutputSetEDID)
-#define xf86OutputUseScreenMonitor XF86NAME(xf86OutputUseScreenMonitor)
-#define xf86PrintModeline XF86NAME(xf86PrintModeline)
-#define xf86ProbeOutputModes XF86NAME(xf86ProbeOutputModes)
-#define xf86PruneInvalidModes XF86NAME(xf86PruneInvalidModes)
-#define xf86RotateCloseScreen XF86NAME(xf86RotateCloseScreen)
-#define xf86SetModeCrtc XF86NAME(xf86SetModeCrtc)
-#define xf86SetModeDefaultName XF86NAME(xf86SetModeDefaultName)
-#define xf86SetScrnInfoModes XF86NAME(xf86SetScrnInfoModes)
-#define xf86ValidateModesClocks XF86NAME(xf86ValidateModesClocks)
-#define xf86ValidateModesFlags XF86NAME(xf86ValidateModesFlags)
-#define xf86ValidateModesSize XF86NAME(xf86ValidateModesSize)
-#define xf86ValidateModesSync XF86NAME(xf86ValidateModesSync)
-#define xf86ValidateModesUserConfig XF86NAME(xf86ValidateModesUserConfig)
-#define xf86DiDGAInit XF86NAME(xf86DiDGAInit)
-#define xf86DiDGAReInit XF86NAME(xf86DiDGAReInit)
-#define xf86DDCGetModes XF86NAME(xf86DDCGetModes)
-#define xf86RandR12CreateScreenResources XF86NAME(xf86RandR12CreateScreenResources)
-#define xf86RandR12GetOriginalVirtualSize XF86NAME(xf86RandR12GetOriginalVirtualSize)
-#define xf86RandR12GetRotation XF86NAME(xf86RandR12GetRotation)
-#define xf86RandR12Init XF86NAME(xf86RandR12Init)
-#define xf86RandR12PreInit XF86NAME(xf86RandR12PreInit)
-#define xf86RandR12SetConfig XF86NAME(xf86RandR12SetConfig)
-#define xf86RandR12SetRotations XF86NAME(xf86RandR12SetRotations)
-#define xf86SaveScreen XF86NAME(xf86SaveScreen)
-#define xf86CrtcSetScreenSubpixelOrder XF86NAME(xf86CrtcSetScreenSubpixelOrder)
-#define xf86ModeWidth XF86NAME(xf86ModeWidth)
-#define xf86ModeHeight XF86NAME(xf86ModeHeight)
-#define xf86OutputFindClosestMode XF86NAME(xf86OutputFindClosestMode)
-#define xf86SetSingleMode XF86NAME(xf86SetSingleMode)
-#define xf86SetDesiredModes XF86NAME(xf86SetDesiredModes)
-
-#endif /* _XF86RENAME_H_ */
diff --git a/xorg-server/hw/xfree86/os-support/bus/Sbus.c b/xorg-server/hw/xfree86/os-support/bus/Sbus.c
index 826000712..14e6d4bfd 100644
--- a/xorg-server/hw/xfree86/os-support/bus/Sbus.c
+++ b/xorg-server/hw/xfree86/os-support/bus/Sbus.c
@@ -617,8 +617,10 @@ sparcPromPathname2Node(const char *pathName)
return 0;
strcpy(name, pathName);
name[i + 1] = 0;
- if (name[0] != '/')
+ if (name[0] != '/') {
+ free(name);
return 0;
+ }
p = strchr(name + 1, '/');
if (p)
*p = 0;
@@ -629,8 +631,10 @@ sparcPromPathname2Node(const char *pathName)
*regstr++ = 0;
else
regstr = p;
- if (name + 1 == regstr)
+ if (name + 1 == regstr) {
+ free(name);
return 0;
+ }
promGetSibling(0);
i = promWalkPathname2Node(name + 1, regstr, promRootNode, 0);
free(name);
diff --git a/xorg-server/hw/xfree86/os-support/linux/lnx_platform.c b/xorg-server/hw/xfree86/os-support/linux/lnx_platform.c
index 76f5583dd..1865b31b9 100644
--- a/xorg-server/hw/xfree86/os-support/linux/lnx_platform.c
+++ b/xorg-server/hw/xfree86/os-support/linux/lnx_platform.c
@@ -7,6 +7,8 @@
#include <xf86drm.h>
#include <fcntl.h>
#include <unistd.h>
+#include <errno.h>
+#include <string.h>
/* Linux platform device support */
#include "xf86_OSproc.h"
@@ -18,11 +20,12 @@
#include "hotplug.h"
static Bool
-get_drm_info(struct OdevAttributes *attribs, char *path)
+get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
{
drmSetVersion sv;
char *buf;
int fd;
+ int err = 0;
fd = open(path, O_RDWR, O_CLOEXEC);
if (fd == -1)
@@ -32,19 +35,26 @@ get_drm_info(struct OdevAttributes *attribs, char *path)
sv.drm_di_minor = 4;
sv.drm_dd_major = -1; /* Don't care */
sv.drm_dd_minor = -1; /* Don't care */
- if (drmSetInterfaceVersion(fd, &sv)) {
- ErrorF("setversion 1.4 failed\n");
- return FALSE;
+
+ err = drmSetInterfaceVersion(fd, &sv);
+ if (err) {
+ ErrorF("setversion 1.4 failed: %s\n", strerror(-err));
+ goto out;
}
- xf86_add_platform_device(attribs);
+ /* for a delayed probe we've already added the device */
+ if (delayed_index == -1) {
+ xf86_add_platform_device(attribs);
+ delayed_index = xf86_num_platform_devices - 1;
+ }
buf = drmGetBusid(fd);
- xf86_add_platform_device_attrib(xf86_num_platform_devices - 1,
+ xf86_add_platform_device_attrib(delayed_index,
ODEV_ATTRIB_BUSID, buf);
drmFreeBusid(buf);
+out:
close(fd);
- return TRUE;
+ return (err == 0);
}
Bool
@@ -89,6 +99,23 @@ xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *bu
}
void
+xf86PlatformReprobeDevice(int index, struct OdevAttributes *attribs)
+{
+ Bool ret;
+ char *dpath;
+ dpath = xf86_get_platform_attrib(index, ODEV_ATTRIB_PATH);
+
+ ret = get_drm_info(attribs, dpath, index);
+ if (ret == FALSE) {
+ xf86_remove_platform_device(index);
+ return;
+ }
+ ret = xf86platformAddDevice(index);
+ if (ret == -1)
+ xf86_remove_platform_device(index);
+}
+
+void
xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
{
struct OdevAttribute *attrib;
@@ -116,10 +143,17 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
if (i != xf86_num_platform_devices)
goto out_free;
- LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n",
- path);
+ LogMessage(X_INFO, "xfree86: Adding drm device (%s)\n", path);
- ret = get_drm_info(attribs, path);
+ if (!xf86VTOwner()) {
+ /* if we don't currently own the VT then don't probe the device,
+ just mark it as unowned for later use */
+ attribs->unowned = TRUE;
+ xf86_add_platform_device(attribs);
+ return;
+ }
+
+ ret = get_drm_info(attribs, path, -1);
if (ret == FALSE)
goto out_free;
@@ -138,6 +172,9 @@ void NewGPUDeviceRequest(struct OdevAttributes *attribs)
if (old_num == xf86_num_platform_devices)
return;
+ if (xf86_get_platform_device_unowned(xf86_num_platform_devices - 1) == TRUE)
+ return;
+
ret = xf86platformAddDevice(xf86_num_platform_devices-1);
if (ret == -1)
xf86_remove_platform_device(xf86_num_platform_devices-1);
@@ -171,7 +208,10 @@ void DeleteGPUDeviceRequest(struct OdevAttributes *attribs)
ErrorF("xf86: remove device %d %s\n", index, syspath);
- xf86platformRemoveDevice(index);
+ if (xf86_get_platform_device_unowned(index) == TRUE)
+ xf86_remove_platform_device(index);
+ else
+ xf86platformRemoveDevice(index);
out:
config_odev_free_attribute_list(attribs);
}
diff --git a/xorg-server/hw/xfree86/os-support/shared/posix_tty.c b/xorg-server/hw/xfree86/os-support/shared/posix_tty.c
index ab3757a2a..4d08c1e85 100644
--- a/xorg-server/hw/xfree86/os-support/shared/posix_tty.c
+++ b/xorg-server/hw/xfree86/os-support/shared/posix_tty.c
@@ -421,7 +421,8 @@ xf86FlushInput(int fd)
{
fd_set fds;
struct timeval timeout;
- char c[4];
+ /* this needs to be big enough to flush an evdev event. */
+ char c[256];
DebugF("FlushingSerial\n");
if (tcflush(fd, TCIFLUSH) == 0)
diff --git a/xorg-server/hw/xfree86/os-support/solaris/sun_init.c b/xorg-server/hw/xfree86/os-support/solaris/sun_init.c
index 4b75a98ac..68527a577 100644
--- a/xorg-server/hw/xfree86/os-support/solaris/sun_init.c
+++ b/xorg-server/hw/xfree86/os-support/solaris/sun_init.c
@@ -274,7 +274,7 @@ xf86OpenConsole(void)
* this is to make sure we don't continue until the activate
* signal is received.
*/
- if (!xf86Screens[0]->vtSema)
+ if (!xf86VTOwner())
sleep(5);
}
#endif /* HAS_USL_VTS */
diff --git a/xorg-server/hw/xfree86/os-support/xf86_OSproc.h b/xorg-server/hw/xfree86/os-support/xf86_OSproc.h
index ea2b16e46..6be594651 100644
--- a/xorg-server/hw/xfree86/os-support/xf86_OSproc.h
+++ b/xorg-server/hw/xfree86/os-support/xf86_OSproc.h
@@ -223,6 +223,9 @@ extern _X_EXPORT void xf86InitVidMem(void);
#include "hotplug.h"
void
xf86PlatformDeviceProbe(struct OdevAttributes *attribs);
+
+void
+xf86PlatformReprobeDevice(int index, struct OdevAttributes *attribs);
#endif
_XFUNCPROTOEND
diff --git a/xorg-server/hw/xfree86/ramdac/xf86Cursor.c b/xorg-server/hw/xfree86/ramdac/xf86Cursor.c
index d32aac1cf..860704e1c 100644
--- a/xorg-server/hw/xfree86/ramdac/xf86Cursor.c
+++ b/xorg-server/hw/xfree86/ramdac/xf86Cursor.c
@@ -271,7 +271,7 @@ xf86CursorRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
(xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
xf86CursorScreenKey);
- if (pCurs->refcnt <= 1)
+ if (CursorRefCount(pCurs) <= 1)
dixSetScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen,
NULL);
@@ -285,7 +285,7 @@ xf86CursorUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
(xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
xf86CursorScreenKey);
- if (pCurs->refcnt <= 1) {
+ if (CursorRefCount(pCurs) <= 1) {
free(dixLookupScreenPrivate
(&pCurs->devPrivates, CursorScreenKey, pScreen));
dixSetScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen,
@@ -322,37 +322,37 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs,
/* only update for VCP, otherwise we get cursor jumps when removing a
sprite. The second cursor is never HW rendered anyway. */
if (GetMaster(pDev, MASTER_POINTER) == inputInfo.pointer) {
- pCurs->refcnt++;
+ CursorPtr cursor = RefCursor(pCurs);
if (ScreenPriv->CurrentCursor)
FreeCursor(ScreenPriv->CurrentCursor, None);
- ScreenPriv->CurrentCursor = pCurs;
+ ScreenPriv->CurrentCursor = cursor;
ScreenPriv->x = x;
ScreenPriv->y = y;
ScreenPriv->CursorToRestore = NULL;
- ScreenPriv->HotX = pCurs->bits->xhot;
- ScreenPriv->HotY = pCurs->bits->yhot;
+ ScreenPriv->HotX = cursor->bits->xhot;
+ ScreenPriv->HotY = cursor->bits->yhot;
if (!infoPtr->pScrn->vtSema)
- ScreenPriv->SavedCursor = pCurs;
+ ScreenPriv->SavedCursor = cursor;
if (infoPtr->pScrn->vtSema && xorg_list_is_empty(&pScreen->pixmap_dirty_list) &&
(ScreenPriv->ForceHWCursorCount ||
((
#ifdef ARGB_CURSOR
- pCurs->bits->argb &&
+ cursor->bits->argb &&
infoPtr->UseHWCursorARGB &&
- (*infoPtr->UseHWCursorARGB)(pScreen, pCurs)) ||
- (pCurs->bits->argb == 0 &&
+ (*infoPtr->UseHWCursorARGB)(pScreen, cursor)) ||
+ (cursor->bits->argb == 0 &&
#endif
- (pCurs->bits->height <= infoPtr->MaxHeight) &&
- (pCurs->bits->width <= infoPtr->MaxWidth) &&
- (!infoPtr->UseHWCursor || (*infoPtr->UseHWCursor) (pScreen, pCurs)))))) {
+ (cursor->bits->height <= infoPtr->MaxHeight) &&
+ (cursor->bits->width <= infoPtr->MaxWidth) &&
+ (!infoPtr->UseHWCursor || (*infoPtr->UseHWCursor) (pScreen, cursor)))))) {
if (ScreenPriv->SWCursor) /* remove the SW cursor */
(*ScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen,
NullCursor, x, y);
- xf86SetCursor(pScreen, pCurs, x, y);
+ xf86SetCursor(pScreen, cursor, x, y);
ScreenPriv->SWCursor = FALSE;
ScreenPriv->isUp = TRUE;
diff --git a/xorg-server/hw/xfree86/utils/cvt/Makefile.am b/xorg-server/hw/xfree86/utils/cvt/Makefile.am
index 4ebcedf39..754606e8e 100644
--- a/xorg-server/hw/xfree86/utils/cvt/Makefile.am
+++ b/xorg-server/hw/xfree86/utils/cvt/Makefile.am
@@ -24,6 +24,7 @@ bin_PROGRAMS = cvt
INCLUDES = $(XORG_INCS) \
-I$(top_srcdir)/hw/xfree86/ddc \
+ -I$(top_srcdir)/hw/xfree86/modes \
-I$(top_srcdir)/hw/xfree86/parser
# gah
diff --git a/xorg-server/hw/xfree86/utils/cvt/cvt.c b/xorg-server/hw/xfree86/utils/cvt/cvt.c
index 9483964e0..5e2888e94 100644
--- a/xorg-server/hw/xfree86/utils/cvt/cvt.c
+++ b/xorg-server/hw/xfree86/utils/cvt/cvt.c
@@ -24,6 +24,7 @@
/* Standalone VESA CVT standard timing modelines generator. */
#include "xf86.h"
+#include "xf86Modes.h"
/* FatalError implementation used by the server code we built in */
void
diff --git a/xorg-server/hw/xfree86/vbe/Makefile.am b/xorg-server/hw/xfree86/vbe/Makefile.am
index 0b24faf1f..1720eb93b 100644
--- a/xorg-server/hw/xfree86/vbe/Makefile.am
+++ b/xorg-server/hw/xfree86/vbe/Makefile.am
@@ -10,4 +10,5 @@ sdk_HEADERS = vbe.h vbeModes.h
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
+ -I$(srcdir)/../modes -I$(srcdir)/../parser \
-I$(srcdir)/../int10
diff --git a/xorg-server/hw/xfree86/vbe/vbe.c b/xorg-server/hw/xfree86/vbe/vbe.c
index 97a9bcf60..f0344af9c 100644
--- a/xorg-server/hw/xfree86/vbe/vbe.c
+++ b/xorg-server/hw/xfree86/vbe/vbe.c
@@ -16,6 +16,7 @@
#include <string.h>
#include "xf86.h"
+#include "xf86Modes.h"
#include "vbe.h"
#include <X11/extensions/dpmsconst.h>
diff --git a/xorg-server/hw/xwin/winclipboardthread.c b/xorg-server/hw/xwin/winclipboardthread.c
index c8508a9b8..6da9f3b72 100644
--- a/xorg-server/hw/xwin/winclipboardthread.c
+++ b/xorg-server/hw/xwin/winclipboardthread.c
@@ -83,7 +83,7 @@ static int
void *
winClipboardProc(void *pvNotUsed)
{
- Atom atomClipboard, atomClipboardManager;
+ Atom atomClipboard;
int iReturn;
HWND hwnd = NULL;
int iConnectionNumber = 0;
@@ -206,9 +206,8 @@ winClipboardProc(void *pvNotUsed)
iMaxDescriptor = iConnectionNumber + 1;
#endif
- /* Create atoms */
+ /* Create atom */
atomClipboard = XInternAtom(pDisplay, "CLIPBOARD", False);
- atomClipboardManager = XInternAtom(pDisplay, "CLIPBOARD_MANAGER", False);
/* Create a messaging window */
iWindow = XCreateSimpleWindow(pDisplay,
diff --git a/xorg-server/hw/xwin/windialogs.c b/xorg-server/hw/xwin/windialogs.c
index a02146e95..86f332aad 100644
--- a/xorg-server/hw/xwin/windialogs.c
+++ b/xorg-server/hw/xwin/windialogs.c
@@ -431,7 +431,6 @@ winChangeDepthDlgProc(HWND hwndDialog, UINT message,
{
static winPrivScreenPtr s_pScreenPriv = NULL;
static winScreenInfo *s_pScreenInfo = NULL;
- static ScreenPtr s_pScreen = NULL;
#if CYGDEBUG
winDebug("winChangeDepthDlgProc\n");
@@ -447,12 +446,11 @@ winChangeDepthDlgProc(HWND hwndDialog, UINT message,
/* Store pointers to private structures for future use */
s_pScreenPriv = (winPrivScreenPtr) lParam;
s_pScreenInfo = s_pScreenPriv->pScreenInfo;
- s_pScreen = s_pScreenInfo->pScreen;
#if CYGDEBUG
winDebug("winChangeDepthDlgProc - WM_INITDIALOG - s_pScreenPriv: %08x, "
- "s_pScreenInfo: %08x, s_pScreen: %08x\n",
- s_pScreenPriv, s_pScreenInfo, s_pScreen);
+ "s_pScreenInfo: %08x\n",
+ s_pScreenPriv, s_pScreenInfo);
#endif
#if CYGDEBUG
@@ -562,8 +560,6 @@ static wBOOL CALLBACK
winAboutDlgProc(HWND hwndDialog, UINT message, WPARAM wParam, LPARAM lParam)
{
static winPrivScreenPtr s_pScreenPriv = NULL;
- static winScreenInfo *s_pScreenInfo = NULL;
- static ScreenPtr s_pScreen = NULL;
#if CYGDEBUG
winDebug("winAboutDlgProc\n");
@@ -576,10 +572,8 @@ winAboutDlgProc(HWND hwndDialog, UINT message, WPARAM wParam, LPARAM lParam)
winDebug("winAboutDlgProc - WM_INITDIALOG\n");
#endif
- /* Store pointers to private structures for future use */
+ /* Store pointer to private structure for future use */
s_pScreenPriv = (winPrivScreenPtr) lParam;
- s_pScreenInfo = s_pScreenPriv->pScreenInfo;
- s_pScreen = s_pScreenInfo->pScreen;
winInitDialog(hwndDialog);
diff --git a/xorg-server/hw/xwin/winkeybd.c b/xorg-server/hw/xwin/winkeybd.c
index 27c114c99..e412f2355 100644
--- a/xorg-server/hw/xwin/winkeybd.c
+++ b/xorg-server/hw/xwin/winkeybd.c
@@ -328,7 +328,6 @@ winIsFakeCtrl_L(UINT message, WPARAM wParam, LPARAM lParam)
Bool fReturn;
static Bool lastWasControlL = FALSE;
- static UINT lastMessage;
static LONG lastTime;
/*
@@ -352,7 +351,6 @@ winIsFakeCtrl_L(UINT message, WPARAM wParam, LPARAM lParam)
if (!fReturn) {
lastWasControlL = TRUE;
- lastMessage = message;
lastTime = lTime;
}
else {
diff --git a/xorg-server/hw/xwin/winmultiwindowwindow.c b/xorg-server/hw/xwin/winmultiwindowwindow.c
index c0c7db2b7..09481560c 100644
--- a/xorg-server/hw/xwin/winmultiwindowwindow.c
+++ b/xorg-server/hw/xwin/winmultiwindowwindow.c
@@ -808,7 +808,6 @@ winMinimizeWindow(Window id)
HWND hWnd;
ScreenPtr pScreen = NULL;
winPrivScreenPtr pScreenPriv = NULL;
- winScreenInfo *pScreenInfo = NULL;
#if CYGWINDOWING_DEBUG
ErrorF("winMinimizeWindow\n");
@@ -824,11 +823,9 @@ winMinimizeWindow(Window id)
pScreen = pWin->drawable.pScreen;
if (pScreen)
pScreenPriv = winGetScreenPriv(pScreen);
- if (pScreenPriv)
- pScreenInfo = pScreenPriv->pScreenInfo;
#ifdef XWIN_MULTIWINDOWEXTWM
- if (pScreenPriv && pScreenInfo->fInternalWM) {
+ if (pScreenPriv && pScreenPriv->pScreenInfo->fInternalWM) {
pRLWinPriv =
(win32RootlessWindowPtr) RootlessFrameForWindow(pWin, FALSE);
hWnd = pRLWinPriv->hWnd;
diff --git a/xorg-server/hw/xwin/winpfbdd.c b/xorg-server/hw/xwin/winpfbdd.c
index ee6ea7290..f87000726 100644
--- a/xorg-server/hw/xwin/winpfbdd.c
+++ b/xorg-server/hw/xwin/winpfbdd.c
@@ -514,8 +514,6 @@ static Bool
winHotKeyAltTabPrimaryDD(ScreenPtr pScreen)
{
winScreenPriv(pScreen);
- winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
- RECT rcClient, rcSrc;
HRESULT ddrval = DD_OK;
ErrorF("\nwinHotKeyAltTabPrimaryDD\n\n");
@@ -527,11 +525,6 @@ winHotKeyAltTabPrimaryDD(ScreenPtr pScreen)
if (pScreenPriv->pddsPrimary == NULL || pScreenPriv->pddsOffscreen == NULL)
return FALSE;
- /* Get client area in screen coords */
- GetClientRect(pScreenPriv->hwndScreen, &rcClient);
- MapWindowPoints(pScreenPriv->hwndScreen,
- HWND_DESKTOP, (LPPOINT) &rcClient, 2);
-
/* Did we loose the primary surface? */
ddrval = IDirectDrawSurface2_IsLost(pScreenPriv->pddsPrimary);
if (ddrval == DD_OK) {
@@ -541,12 +534,6 @@ winHotKeyAltTabPrimaryDD(ScreenPtr pScreen)
"surface\n");
}
- /* Setup a source rectangle */
- rcSrc.left = 0;
- rcSrc.top = 0;
- rcSrc.right = pScreenInfo->dwWidth;
- rcSrc.bottom = pScreenInfo->dwHeight;
-
/* Blit the primary surface to the offscreen surface */
ddrval = IDirectDrawSurface2_Blt(pScreenPriv->pddsOffscreen, NULL, /* should be rcDest */
pScreenPriv->pddsPrimary,
diff --git a/xorg-server/hw/xwin/winscrinit.c b/xorg-server/hw/xwin/winscrinit.c
index e776bdba6..5623b8881 100644
--- a/xorg-server/hw/xwin/winscrinit.c
+++ b/xorg-server/hw/xwin/winscrinit.c
@@ -259,7 +259,6 @@ winFinishScreenInitFB(int i, ScreenPtr pScreen, int argc, char **argv)
winScreenPriv(pScreen);
winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
VisualPtr pVisual = NULL;
- char *pbits = NULL;
#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
int iReturn;
@@ -293,9 +292,6 @@ winFinishScreenInitFB(int i, ScreenPtr pScreen, int argc, char **argv)
return FALSE;
}
- /* Setup a local variable to point to the framebuffer */
- pbits = pScreenInfo->pfb;
-
/* Apparently we need this for the render extension */
miSetPixmapDepths();
diff --git a/xorg-server/hw/xwin/winwin32rootlesswindow.c b/xorg-server/hw/xwin/winwin32rootlesswindow.c
index f2d68cb46..ce615e692 100644
--- a/xorg-server/hw/xwin/winwin32rootlesswindow.c
+++ b/xorg-server/hw/xwin/winwin32rootlesswindow.c
@@ -186,7 +186,6 @@ winMWExtWMUpdateWindowDecoration(win32RootlessWindowPtr pRLWinPriv,
{
Bool fDecorate = FALSE;
DWORD dwExStyle = 0;
- DWORD dwStyle = 0;
WINDOWPLACEMENT wndPlace;
UINT showCmd = 0;
@@ -217,9 +216,8 @@ winMWExtWMUpdateWindowDecoration(win32RootlessWindowPtr pRLWinPriv,
winDebug("winMWExtWMUpdateWindowDecoration %08x %s\n",
(int) pRLWinPriv, fDecorate ? "Decorate" : "Bare");
- /* Get the standard and extended window style information */
+ /* Get the extended window style information */
dwExStyle = GetWindowLongPtr(pRLWinPriv->hWnd, GWL_EXSTYLE);
- dwStyle = GetWindowLongPtr(pRLWinPriv->hWnd, GWL_STYLE);
if (fDecorate) {
RECT rcNew;
diff --git a/xorg-server/hw/xwin/winwindow.c b/xorg-server/hw/xwin/winwindow.c
index ab6d8dec2..029bd855d 100644
--- a/xorg-server/hw/xwin/winwindow.c
+++ b/xorg-server/hw/xwin/winwindow.c
@@ -128,7 +128,6 @@ winCopyWindowNativeGDI(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
BoxPtr pBox;
int dx, dy;
int i, nbox;
- WindowPtr pwinRoot;
BoxPtr pBoxDst;
ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -138,9 +137,6 @@ winCopyWindowNativeGDI(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
ErrorF("winCopyWindow\n");
#endif
- /* Get a pointer to the root window */
- pwinRoot = pWin->drawable.pScreen->root;
-
/* Create a region for the destination */
prgnDst = RegionCreate(NULL, 1);
diff --git a/xorg-server/hw/xwin/winwindowswm.c b/xorg-server/hw/xwin/winwindowswm.c
index fbd41aaa8..6e9d63c53 100644
--- a/xorg-server/hw/xwin/winwindowswm.c
+++ b/xorg-server/hw/xwin/winwindowswm.c
@@ -66,18 +66,6 @@ typedef struct _WMEvent {
unsigned int mask;
} WMEventRec;
-static inline BoxRec
-make_box(int x, int y, int w, int h)
-{
- BoxRec r;
-
- r.x1 = x;
- r.y1 = y;
- r.x2 = x + w;
- r.y2 = y + h;
- return r;
-}
-
static int
ProcWindowsWMQueryVersion(ClientPtr client)
{
@@ -319,7 +307,6 @@ static int
ProcWindowsWMFrameGetRect(ClientPtr client)
{
xWindowsWMFrameGetRectReply rep;
- BoxRec ir;
RECT rcNew;
REQUEST(xWindowsWMFrameGetRectReq);
@@ -334,8 +321,6 @@ ProcWindowsWMFrameGetRect(ClientPtr client)
rep.length = 0;
rep.sequenceNumber = client->sequence;
- ir = make_box(stuff->ix, stuff->iy, stuff->iw, stuff->ih);
-
if (stuff->frame_rect != 0) {
ErrorF("ProcWindowsWMFrameGetRect - stuff->frame_rect != 0\n");
return BadValue;
diff --git a/xorg-server/hw/xwin/winwndproc.c b/xorg-server/hw/xwin/winwndproc.c
index 7ba028042..c7509ea19 100644
--- a/xorg-server/hw/xwin/winwndproc.c
+++ b/xorg-server/hw/xwin/winwndproc.c
@@ -62,7 +62,6 @@ winWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
static winScreenInfo *s_pScreenInfo = NULL;
static ScreenPtr s_pScreen = NULL;
static HWND s_hwndLastPrivates = NULL;
- static HINSTANCE s_hInstance;
static Bool s_fTracking = FALSE;
static unsigned long s_ulServerGeneration = 0;
static UINT s_uTaskbarRestart = 0;
@@ -117,7 +116,6 @@ winWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
* areas of our display window.
*/
s_pScreenPriv = ((LPCREATESTRUCT) lParam)->lpCreateParams;
- s_hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
s_pScreenInfo = s_pScreenPriv->pScreenInfo;
s_pScreen = s_pScreenInfo->pScreen;
s_hwndLastPrivates = hwnd;
diff --git a/xorg-server/include/callback.h b/xorg-server/include/callback.h
index ed6b678a8..b42708960 100644
--- a/xorg-server/include/callback.h
+++ b/xorg-server/include/callback.h
@@ -86,5 +86,6 @@ CallCallbacks(CallbackListPtr *pcbl, pointer call_data)
extern _X_EXPORT void DeleteCallbackList(CallbackListPtr * /*pcbl */ );
extern _X_EXPORT void InitCallbackManager(void);
+extern _X_EXPORT void DeleteCallbackManager(void);
#endif /* CALLBACK_H */
diff --git a/xorg-server/include/cursor.h b/xorg-server/include/cursor.h
index 082325123..89a650fc5 100644
--- a/xorg-server/include/cursor.h
+++ b/xorg-server/include/cursor.h
@@ -71,6 +71,10 @@ extern _X_EXPORT CursorPtr rootCursor;
extern _X_EXPORT int FreeCursor(pointer /*pCurs */ ,
XID /*cid */ );
+extern _X_EXPORT CursorPtr RefCursor(CursorPtr /* cursor */);
+extern _X_EXPORT CursorPtr UnrefCursor(CursorPtr /* cursor */);
+extern _X_EXPORT int CursorRefCount(const CursorPtr /* cursor */);
+
extern _X_EXPORT int AllocARGBCursor(unsigned char * /*psrcbits */ ,
unsigned char * /*pmaskbits */ ,
CARD32 * /*argb */ ,
diff --git a/xorg-server/include/dixgrabs.h b/xorg-server/include/dixgrabs.h
index eccec77f8..ca3c95be7 100644
--- a/xorg-server/include/dixgrabs.h
+++ b/xorg-server/include/dixgrabs.h
@@ -31,7 +31,7 @@ struct _GrabParameters;
extern void PrintDeviceGrabInfo(DeviceIntPtr dev);
extern void UngrabAllDevices(Bool kill_client);
-extern GrabPtr AllocGrab(void);
+extern GrabPtr AllocGrab(const GrabPtr src);
extern void FreeGrab(GrabPtr grab);
extern Bool CopyGrab(GrabPtr dst, const GrabPtr src);
diff --git a/xorg-server/include/dixstruct.h b/xorg-server/include/dixstruct.h
index 678481920..aef822ca2 100644
--- a/xorg-server/include/dixstruct.h
+++ b/xorg-server/include/dixstruct.h
@@ -96,7 +96,7 @@ typedef struct _Client {
unsigned int clientGone:1;
unsigned int closeDownMode:2;
unsigned int clientState:2;
- char smart_priority;
+ signed char smart_priority;
short noClientException; /* this client died or needs to be killed */
int priority;
ReplySwapPtr pSwapReplyFunc;
diff --git a/xorg-server/include/eventstr.h b/xorg-server/include/eventstr.h
index 38fab4f3c..3950584d5 100644
--- a/xorg-server/include/eventstr.h
+++ b/xorg-server/include/eventstr.h
@@ -123,6 +123,7 @@ struct _DeviceEvent {
int corestate; /**< Core key/button state BEFORE the event */
int key_repeat; /**< Internally-generated key repeat event */
uint32_t flags; /**< Flags to be copied into the generated event */
+ uint32_t resource; /**< Touch event resource, only for TOUCH_REPLAYING */
};
/**
@@ -175,6 +176,7 @@ struct _DeviceChangedEvent {
struct {
uint32_t min; /**< Minimum value */
uint32_t max; /**< Maximum value */
+ double value; /**< Current value */;
/* FIXME: frac parts of min/max */
uint32_t resolution; /**< Resolution counts/m */
uint8_t mode; /**< Relative or Absolute */
diff --git a/xorg-server/include/hotplug.h b/xorg-server/include/hotplug.h
index 2a95b4524..29a22c4da 100644
--- a/xorg-server/include/hotplug.h
+++ b/xorg-server/include/hotplug.h
@@ -40,6 +40,7 @@ struct OdevAttribute {
struct OdevAttributes {
struct xorg_list list;
+ Bool unowned;
};
struct OdevAttributes *
diff --git a/xorg-server/include/input.h b/xorg-server/include/input.h
index 304895ffc..1745e9ade 100644
--- a/xorg-server/include/input.h
+++ b/xorg-server/include/input.h
@@ -590,6 +590,8 @@ extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev);
extern void TouchDeliverDeviceClassesChangedEvent(TouchPointInfoPtr ti,
Time time, XID resource);
+extern void TouchEmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource);
+extern void TouchAcceptAndEnd(DeviceIntPtr dev, int touchid);
/* misc event helpers */
extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients);
diff --git a/xorg-server/include/inputstr.h b/xorg-server/include/inputstr.h
index de96faeda..85be885a0 100644
--- a/xorg-server/include/inputstr.h
+++ b/xorg-server/include/inputstr.h
@@ -485,7 +485,7 @@ typedef struct _GrabInfoRec {
TimeStamp grabTime;
Bool fromPassiveGrab; /* true if from passive grab */
Bool implicitGrab; /* implicit from ButtonPress */
- GrabPtr activeGrab;
+ GrabPtr unused; /* Kept for ABI stability, remove soon */
GrabPtr grab;
CARD8 activatingKey;
void (*ActivateGrab) (DeviceIntPtr /*device */ ,
diff --git a/xorg-server/include/registry.h b/xorg-server/include/registry.h
index f471b899f..e298ab6fc 100644
--- a/xorg-server/include/registry.h
+++ b/xorg-server/include/registry.h
@@ -44,6 +44,7 @@ extern _X_EXPORT const char *LookupResourceName(RESTYPE rtype);
* Setup and teardown
*/
extern _X_EXPORT void dixResetRegistry(void);
+extern _X_EXPORT void dixFreeRegistry(void);
#else /* XREGISTRY */
diff --git a/xorg-server/include/xkbsrv.h b/xorg-server/include/xkbsrv.h
index 45e2e8c47..346ebccf0 100644
--- a/xorg-server/include/xkbsrv.h
+++ b/xorg-server/include/xkbsrv.h
@@ -751,6 +751,9 @@ extern _X_EXPORT void XkbSetRulesDflts(XkbRMLVOSet * /* rmlvo */
extern _X_EXPORT void XkbDeleteRulesDflts(void
);
+extern _X_EXPORT void XkbDeleteRulesUsed(void
+ );
+
extern _X_EXPORT int SProcXkbDispatch(ClientPtr /* client */
);
diff --git a/xorg-server/miext/shadow/Makefile.am b/xorg-server/miext/shadow/Makefile.am
index 30f7bda96..1db8a26b4 100644
--- a/xorg-server/miext/shadow/Makefile.am
+++ b/xorg-server/miext/shadow/Makefile.am
@@ -9,7 +9,11 @@ endif
libshadow_la_SOURCES = \
shadow.c \
shadow.h \
+ shafb4.c \
+ shafb8.c \
shalloc.c \
+ shiplan2p4.c \
+ shiplan2p8.c \
shpacked.c \
shplanar8.c \
shplanar.c \
diff --git a/xorg-server/miext/shadow/c2p_core.h b/xorg-server/miext/shadow/c2p_core.h
new file mode 100644
index 000000000..5b9ea066c
--- /dev/null
+++ b/xorg-server/miext/shadow/c2p_core.h
@@ -0,0 +1,187 @@
+/*
+ * Fast C2P (Chunky-to-Planar) Conversion
+ *
+ * NOTES:
+ * - This code was inspired by Scout's C2P tutorial
+ * - It assumes to run on a big endian system
+ *
+ * Copyright © 2003-2008 Geert Uytterhoeven
+ *
+ * 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.
+ */
+
+
+ /*
+ * Basic transpose step
+ */
+
+static inline void _transp(CARD32 d[], unsigned int i1, unsigned int i2,
+ unsigned int shift, CARD32 mask)
+{
+ CARD32 t = (d[i1] ^ (d[i2] >> shift)) & mask;
+
+ d[i1] ^= t;
+ d[i2] ^= t << shift;
+}
+
+
+static inline void c2p_unsupported(void) {
+ BUG_WARN(1);
+}
+
+static inline CARD32 get_mask(unsigned int n)
+{
+ switch (n) {
+ case 1:
+ return 0x55555555;
+
+ case 2:
+ return 0x33333333;
+
+ case 4:
+ return 0x0f0f0f0f;
+
+ case 8:
+ return 0x00ff00ff;
+
+ case 16:
+ return 0x0000ffff;
+ }
+
+ c2p_unsupported();
+ return 0;
+}
+
+
+ /*
+ * Transpose operations on 8 32-bit words
+ */
+
+static inline void transp8(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 1:
+ /* First n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ /* Second n x 1 block */
+ _transp(d, 2, 3, n, mask);
+ /* Third n x 1 block */
+ _transp(d, 4, 5, n, mask);
+ /* Fourth n x 1 block */
+ _transp(d, 6, 7, n, mask);
+ return;
+
+ case 2:
+ /* First n x 2 block */
+ _transp(d, 0, 2, n, mask);
+ _transp(d, 1, 3, n, mask);
+ /* Second n x 2 block */
+ _transp(d, 4, 6, n, mask);
+ _transp(d, 5, 7, n, mask);
+ return;
+
+ case 4:
+ /* Single n x 4 block */
+ _transp(d, 0, 4, n, mask);
+ _transp(d, 1, 5, n, mask);
+ _transp(d, 2, 6, n, mask);
+ _transp(d, 3, 7, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 4 32-bit words
+ */
+
+static inline void transp4(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 1:
+ /* First n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ /* Second n x 1 block */
+ _transp(d, 2, 3, n, mask);
+ return;
+
+ case 2:
+ /* Single n x 2 block */
+ _transp(d, 0, 2, n, mask);
+ _transp(d, 1, 3, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 4 32-bit words (reverse order)
+ */
+
+static inline void transp4x(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 2:
+ /* Single n x 2 block */
+ _transp(d, 2, 0, n, mask);
+ _transp(d, 3, 1, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 2 32-bit words
+ */
+
+static inline void transp2(CARD32 d[], unsigned int n)
+{
+ CARD32 mask = get_mask(n);
+
+ /* Single n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ return;
+}
+
+
+ /*
+ * Transpose operations on 2 32-bit words (reverse order)
+ */
+
+static inline void transp2x(CARD32 d[], unsigned int n)
+{
+ CARD32 mask = get_mask(n);
+
+ /* Single n x 1 block */
+ _transp(d, 1, 0, n, mask);
+ return;
+}
diff --git a/xorg-server/miext/shadow/shadow.h b/xorg-server/miext/shadow/shadow.h
index 83de22ccc..421ae96a6 100644
--- a/xorg-server/miext/shadow/shadow.h
+++ b/xorg-server/miext/shadow/shadow.h
@@ -96,6 +96,18 @@ shadowInit(ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
extern _X_EXPORT void *shadowAlloc(int width, int height, int bpp);
extern _X_EXPORT void
+ shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
+ shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
+ shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
+ shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
diff --git a/xorg-server/miext/shadow/shafb4.c b/xorg-server/miext/shadow/shafb4.c
new file mode 100644
index 000000000..d88ae1c2c
--- /dev/null
+++ b/xorg-server/miext/shadow/shafb4.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * 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.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 32 4-bit pixels, stored in 4 32-bit words
+ * containing
+ * - 32 4-bit chunky pixels on input
+ * - permutated planar data (1 plane per 32-bit word) on output
+ */
+
+static void c2p_32x4(CARD32 d[4])
+{
+ transp4(d, 16, 2);
+ transp4(d, 8, 1);
+ transp4(d, 4, 2);
+ transp4(d, 2, 1);
+ transp4(d, 1, 2);
+}
+
+
+ /*
+ * Store a full block of permutated planar data after c2p conversion
+ */
+
+static inline void store_afb4(void *dst, unsigned int stride,
+ const CARD32 d[4])
+{
+ CARD8 *p = dst;
+
+ *(CARD32 *)p = d[3]; p += stride;
+ *(CARD32 *)p = d[1]; p += stride;
+ *(CARD32 *)p = d[2]; p += stride;
+ *(CARD32 *)p = d[0]; p += stride;
+}
+
+
+void
+shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD32 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD32 *win;
+ CARD32 off, winStride;
+ union {
+ CARD8 bytes[16];
+ CARD32 words[4];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ if (sizeof(FbBits) != sizeof(CARD32))
+ shaStride = shaStride * sizeof(FbBits) / sizeof(CARD32);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = (x & -32) / 2;
+ shaLine = (CARD32 *)shaBase + y * shaStride + scrLine / sizeof(CARD32);
+
+ off = scrLine / 4; /* byte offset in bitplane scanline */
+ n = ((x & 31) + w + 31) / 32; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD32 *) (*pBuf->window) (pScreen,
+ y,
+ off,
+ SHADOW_WINDOW_WRITE,
+ &winStride,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_32x4(d.words);
+ store_afb4(win++, winStride, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
diff --git a/xorg-server/miext/shadow/shafb8.c b/xorg-server/miext/shadow/shafb8.c
new file mode 100644
index 000000000..8d84bfa01
--- /dev/null
+++ b/xorg-server/miext/shadow/shafb8.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * 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.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 32 8-bit pixels, stored in 8 32-bit words
+ * containing
+ * - 32 8-bit chunky pixels on input
+ * - permutated planar data (1 plane per 32-bit word) on output
+ */
+
+static void c2p_32x8(CARD32 d[8])
+{
+ transp8(d, 16, 4);
+ transp8(d, 8, 2);
+ transp8(d, 4, 1);
+ transp8(d, 2, 4);
+ transp8(d, 1, 2);
+}
+
+
+ /*
+ * Store a full block of permutated planar data after c2p conversion
+ */
+
+static inline void store_afb8(void *dst, unsigned int stride,
+ const CARD32 d[8])
+{
+ CARD8 *p = dst;
+
+ *(CARD32 *)p = d[7]; p += stride;
+ *(CARD32 *)p = d[5]; p += stride;
+ *(CARD32 *)p = d[3]; p += stride;
+ *(CARD32 *)p = d[1]; p += stride;
+ *(CARD32 *)p = d[6]; p += stride;
+ *(CARD32 *)p = d[4]; p += stride;
+ *(CARD32 *)p = d[2]; p += stride;
+ *(CARD32 *)p = d[0]; p += stride;
+}
+
+
+void
+shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD32 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD32 *win;
+ CARD32 off, winStride;
+ union {
+ CARD8 bytes[32];
+ CARD32 words[8];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ if (sizeof(FbBits) != sizeof(CARD32))
+ shaStride = shaStride * sizeof(FbBits) / sizeof(CARD32);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = x & -32;
+ shaLine = (CARD32 *)shaBase + y * shaStride + scrLine / sizeof(CARD32);
+
+ off = scrLine / 8; /* byte offset in bitplane scanline */
+ n = ((x & 31) + w + 31) / 32; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD32 *) (*pBuf->window) (pScreen,
+ y,
+ off,
+ SHADOW_WINDOW_WRITE,
+ &winStride,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_32x8(d.words);
+ store_afb8(win++, winStride, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
diff --git a/xorg-server/miext/shadow/shiplan2p4.c b/xorg-server/miext/shadow/shiplan2p4.c
new file mode 100644
index 000000000..0e46bae7a
--- /dev/null
+++ b/xorg-server/miext/shadow/shiplan2p4.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * 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.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 16 4-bit pixels, stored in 2 32-bit words
+ * containing
+ * - 16 4-bit chunky pixels on input
+ * - permutated planar data (2 planes per 32-bit word) on output
+ */
+
+static void c2p_16x4(CARD32 d[2])
+{
+ transp2(d, 8);
+ transp2(d, 2);
+ transp2x(d, 1);
+ transp2(d, 16);
+ transp2(d, 4);
+ transp2(d, 1);
+}
+
+
+ /*
+ * Store a full block of iplan2p4 data after c2p conversion
+ */
+
+static inline void store_iplan2p4(void *dst, const CARD32 d[2])
+{
+ CARD32 *p = dst;
+
+ *p++ = d[0];
+ *p++ = d[1];
+}
+
+
+void
+shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD16 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD16 *win;
+ _X_UNUSED CARD32 winSize;
+ union {
+ CARD8 bytes[8];
+ CARD32 words[2];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ shaStride *= sizeof(FbBits) / sizeof(CARD16);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = (x & -16) / 2;
+ shaLine = (CARD16 *)shaBase + y * shaStride + scrLine / sizeof(CARD16);
+
+ n = ((x & 15) + w + 15) / 16; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD16 *) (*pBuf->window) (pScreen,
+ y,
+ scrLine,
+ SHADOW_WINDOW_WRITE,
+ &winSize,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_16x4(d.words);
+ store_iplan2p4(win, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ win += sizeof(d.bytes) / sizeof(*win);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
diff --git a/xorg-server/miext/shadow/shiplan2p8.c b/xorg-server/miext/shadow/shiplan2p8.c
new file mode 100644
index 000000000..17d6a132e
--- /dev/null
+++ b/xorg-server/miext/shadow/shiplan2p8.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * 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.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 16 8-bit pixels, stored in 4 32-bit words
+ * containing
+ * - 16 8-bit chunky pixels on input
+ * - permutated planar data (2 planes per 32-bit word) on output
+ */
+
+static void c2p_16x8(CARD32 d[4])
+{
+ transp4(d, 8, 2);
+ transp4(d, 1, 2);
+ transp4x(d, 16, 2);
+ transp4x(d, 2, 2);
+ transp4(d, 4, 1);
+}
+
+
+ /*
+ * Store a full block of permutated iplan2p8 data after c2p conversion
+ */
+
+static inline void store_iplan2p8(void *dst, const CARD32 d[4])
+{
+ CARD32 *p = dst;
+
+ *p++ = d[1];
+ *p++ = d[3];
+ *p++ = d[0];
+ *p++ = d[2];
+}
+
+
+void
+shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD16 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD16 *win;
+ _X_UNUSED CARD32 winSize;
+ union {
+ CARD8 bytes[16];
+ CARD32 words[4];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ shaStride *= sizeof(FbBits) / sizeof(CARD16);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = x & -16;
+ shaLine = (CARD16 *)shaBase + y * shaStride + scrLine / sizeof(CARD16);
+
+ n = ((x & 15) + w + 15) / 16; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD16 *) (*pBuf->window) (pScreen,
+ y,
+ scrLine,
+ SHADOW_WINDOW_WRITE,
+ &winSize,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_16x8(d.words);
+ store_iplan2p8(win, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ win += sizeof(d.bytes) / sizeof(*win);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
diff --git a/xorg-server/miext/shadow/shpacked.c b/xorg-server/miext/shadow/shpacked.c
index d2b2e5e24..5ef18f86d 100644
--- a/xorg-server/miext/shadow/shpacked.c
+++ b/xorg-server/miext/shadow/shpacked.c
@@ -98,7 +98,6 @@ shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
i = width;
width -= i;
scr += i;
-#define PickBit(a,i) (((a) >> (i)) & 1)
memcpy(win, sha, i * sizeof(FbBits));
sha += i;
}
diff --git a/xorg-server/os/io.c b/xorg-server/os/io.c
index 2f091c417..0d980ab9f 100644
--- a/xorg-server/os/io.c
+++ b/xorg-server/os/io.c
@@ -1063,6 +1063,7 @@ FreeOsBuffers(OsCommPtr oc)
oci->bufptr = oci->buffer;
oci->bufcnt = 0;
oci->lenLastReq = 0;
+ oci->ignoreBytes = 0;
}
}
if ((oco = oc->output)) {
diff --git a/xorg-server/os/log.c b/xorg-server/os/log.c
index dc6e2888b..f19faf5ee 100644
--- a/xorg-server/os/log.c
+++ b/xorg-server/os/log.c
@@ -250,7 +250,7 @@ void
LogClose(enum ExitCode error)
{
if (logFile) {
- ErrorF("Server terminated %s (%d). Closing log file.\n",
+ ErrorFSigSafe("Server terminated %s (%d). Closing log file.\n",
(error == EXIT_NO_ERROR) ? "successfully" : "with error", error);
fclose(logFile);
logFile = NULL;
@@ -279,6 +279,55 @@ LogSetParameter(LogParameter param, int value)
}
}
+enum {
+ LMOD_LONG = 0x1,
+ LMOD_LONGLONG = 0x2,
+ LMOD_SHORT = 0x4,
+ LMOD_SIZET = 0x8,
+};
+
+/**
+ * Parse non-digit length modifiers and set the corresponding flag in
+ * flags_return.
+ *
+ * @return the number of bytes parsed
+ */
+static int parse_length_modifier(const char *format, size_t len, int *flags_return)
+{
+ int idx = 0;
+ int length_modifier = 0;
+
+ while (idx < len) {
+ switch (format[idx]) {
+ case 'l':
+ BUG_RETURN_VAL(length_modifier & LMOD_SHORT, 0);
+
+ if (length_modifier & LMOD_LONG)
+ length_modifier |= LMOD_LONGLONG;
+ else
+ length_modifier |= LMOD_LONG;
+ break;
+ case 'h':
+ BUG_RETURN_VAL(length_modifier & (LMOD_LONG|LMOD_LONGLONG), 0);
+ length_modifier |= LMOD_SHORT;
+ /* gcc says 'short int' is promoted to 'int' when
+ * passed through '...', so ignored during
+ * processing */
+ break;
+ case 'z':
+ length_modifier |= LMOD_SIZET;
+ break;
+ default:
+ goto out;
+ }
+ idx++;
+ }
+
+out:
+ *flags_return = length_modifier;
+ return idx;
+}
+
/**
* Signal-safe snprintf, with some limitations over snprintf. Be careful
* which directives you use.
@@ -297,6 +346,7 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
int64_t si;
for (; f_idx < f_len && s_idx < size - 1; f_idx++) {
+ int length_modifier = 0;
if (f[f_idx] != '%') {
string[s_idx++] = f[f_idx];
continue;
@@ -304,10 +354,18 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
f_idx++;
- /* silently swallow length modifiers */
+ /* silently swallow digit length modifiers */
while (f_idx < f_len && ((f[f_idx] >= '0' && f[f_idx] <= '9') || f[f_idx] == '.'))
f_idx++;
+ /* non-digit length modifiers */
+ if (f_idx < f_len) {
+ int parsed_bytes = parse_length_modifier(&f[f_idx], f_len - f_idx, &length_modifier);
+ if (parsed_bytes < 0)
+ return 0;
+ f_idx += parsed_bytes;
+ }
+
if (f_idx >= f_len)
break;
@@ -321,7 +379,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
break;
case 'u':
- ui = va_arg(args, unsigned);
+ if (length_modifier & LMOD_LONGLONG)
+ ui = va_arg(args, unsigned long long);
+ else if (length_modifier & LMOD_LONG)
+ ui = va_arg(args, unsigned long);
+ else if (length_modifier & LMOD_SIZET)
+ ui = va_arg(args, size_t);
+ else
+ ui = va_arg(args, unsigned);
+
FormatUInt64(ui, number);
p_len = strlen_sigsafe(number);
@@ -330,7 +396,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
break;
case 'i':
case 'd':
- si = va_arg(args, int);
+ if (length_modifier & LMOD_LONGLONG)
+ si = va_arg(args, long long);
+ else if (length_modifier & LMOD_LONG)
+ si = va_arg(args, long);
+ else if (length_modifier & LMOD_SIZET)
+ si = va_arg(args, ssize_t);
+ else
+ si = va_arg(args, int);
+
FormatInt64(si, number);
p_len = strlen_sigsafe(number);
@@ -351,7 +425,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
break;
case 'x':
- ui = va_arg(args, unsigned);
+ if (length_modifier & LMOD_LONGLONG)
+ ui = va_arg(args, unsigned long long);
+ else if (length_modifier & LMOD_LONG)
+ ui = va_arg(args, unsigned long);
+ else if (length_modifier & LMOD_SIZET)
+ ui = va_arg(args, size_t);
+ else
+ ui = va_arg(args, unsigned);
+
FormatUInt64Hex(ui, number);
p_len = strlen_sigsafe(number);
@@ -368,7 +450,18 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
string[s_idx++] = number[i];
}
break;
+ case 'c':
+ {
+ char c = va_arg(args, int);
+ if (s_idx < size - 1)
+ string[s_idx++] = c;
+ }
+ break;
+ case '%':
+ string[s_idx++] = '%';
+ break;
default:
+ BUG_WARN_MSG(f[f_idx], "Unsupported printf directive '%c'\n", f[f_idx]);
va_arg(args, char*);
string[s_idx++] = '%';
if (s_idx < size - 1)
@@ -785,9 +878,9 @@ FatalError(const char *f, ...)
static Bool beenhere = FALSE;
if (beenhere)
- ErrorF("\nFatalError re-entered, aborting\n");
+ ErrorFSigSafe("\nFatalError re-entered, aborting\n");
else
- ErrorF("\nFatal server error:\n");
+ ErrorFSigSafe("\nFatal server error:\n");
va_start(args, f);
@@ -804,9 +897,9 @@ FatalError(const char *f, ...)
va_end(apple_args);
}
#endif
- VErrorF(f, args);
+ VErrorFSigSafe(f, args);
va_end(args);
- ErrorF("\n");
+ ErrorFSigSafe("\n");
if (!beenhere)
OsVendorFatalError(f, args2);
va_end(args2);
diff --git a/xorg-server/randr/randr.c b/xorg-server/randr/randr.c
index f0decfc6c..cb6fce7cd 100644
--- a/xorg-server/randr/randr.c
+++ b/xorg-server/randr/randr.c
@@ -464,6 +464,28 @@ TellChanged(WindowPtr pWin, pointer value)
return WT_WALKCHILDREN;
}
+void
+RRSetChanged(ScreenPtr pScreen)
+{
+ /* set changed bits on the master screen only */
+ ScreenPtr master;
+ rrScrPriv(pScreen);
+ rrScrPrivPtr mastersp;
+
+ if (pScreen->isGPU) {
+ master = pScreen->current_master;
+ if (!master)
+ return;
+ mastersp = rrGetScrPriv(master);
+ }
+ else {
+ master = pScreen;
+ mastersp = pScrPriv;
+ }
+
+ mastersp->changed = TRUE;
+}
+
/*
* Something changed; send events and adjust pointer position
*/
@@ -484,7 +506,7 @@ RRTellChanged(ScreenPtr pScreen)
mastersp = pScrPriv;
}
- if (pScrPriv->changed) {
+ if (mastersp->changed) {
UpdateCurrentTimeIf();
if (mastersp->configChanged) {
mastersp->lastConfigTime = currentTime;
diff --git a/xorg-server/randr/randrstr.h b/xorg-server/randr/randrstr.h
index 25174798f..2babfedd2 100644
--- a/xorg-server/randr/randrstr.h
+++ b/xorg-server/randr/randrstr.h
@@ -486,6 +486,10 @@ extern _X_EXPORT void
RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
/* randr.c */
+/* set a screen change on the primary screen */
+extern _X_EXPORT void
+RRSetChanged(ScreenPtr pScreen);
+
/*
* Send all pending events
*/
diff --git a/xorg-server/randr/rrcrtc.c b/xorg-server/randr/rrcrtc.c
index 721b05ac3..2f76b62be 100644
--- a/xorg-server/randr/rrcrtc.c
+++ b/xorg-server/randr/rrcrtc.c
@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged)
if (pScreen) {
rrScrPriv(pScreen);
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
/*
* Send ConfigureNotify on any layout change
*/
diff --git a/xorg-server/randr/rrinfo.c b/xorg-server/randr/rrinfo.c
index 1408d6f64..fc57bd408 100644
--- a/xorg-server/randr/rrinfo.c
+++ b/xorg-server/randr/rrinfo.c
@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen,
pScrPriv->minHeight = minHeight;
pScrPriv->maxWidth = maxWidth;
pScrPriv->maxHeight = maxHeight;
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
pScrPriv->configChanged = TRUE;
}
diff --git a/xorg-server/randr/rroutput.c b/xorg-server/randr/rroutput.c
index 88781ba0f..922d61f3d 100644
--- a/xorg-server/randr/rroutput.c
+++ b/xorg-server/randr/rroutput.c
@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged)
output->changed = TRUE;
if (pScreen) {
rrScrPriv(pScreen);
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
if (configChanged)
pScrPriv->configChanged = TRUE;
}
diff --git a/xorg-server/randr/rrscreen.c b/xorg-server/randr/rrscreen.c
index 39340ccee..36179ae89 100644
--- a/xorg-server/randr/rrscreen.c
+++ b/xorg-server/randr/rrscreen.c
@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen)
pScrPriv->height = pScreen->height;
pScrPriv->mmWidth = pScreen->mmWidth;
pScrPriv->mmHeight = pScreen->mmHeight;
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
/* pScrPriv->sizeChanged = TRUE; */
RRTellChanged(pScreen);
diff --git a/xorg-server/render/animcur.c b/xorg-server/render/animcur.c
index 9cbba83fa..038c5b9be 100644
--- a/xorg-server/render/animcur.c
+++ b/xorg-server/render/animcur.c
@@ -383,8 +383,7 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
ac->elts = (AnimCurElt *) (ac + 1);
for (i = 0; i < ncursor; i++) {
- cursors[i]->refcnt++;
- ac->elts[i].pCursor = cursors[i];
+ ac->elts[i].pCursor = RefCursor(cursors[i]);
ac->elts[i].delay = deltas[i];
}
diff --git a/xorg-server/test/input.c b/xorg-server/test/input.c
index be988a4a3..df20f8235 100644
--- a/xorg-server/test/input.c
+++ b/xorg-server/test/input.c
@@ -1384,7 +1384,7 @@ dix_valuator_alloc(void)
assert(v);
assert(v->numAxes == num_axes);
-#if !defined(__i386__) && !defined(__sh__)
+#if !defined(__i386__) && !defined(__m68k__) && !defined(__sh__)
/* must be double-aligned on 64 bit */
assert(((void *) v->axisVal - (void *) v) % sizeof(double) == 0);
assert(((void *) v->axes - (void *) v) % sizeof(double) == 0);
diff --git a/xorg-server/test/signal-logging.c b/xorg-server/test/signal-logging.c
index e0eb81006..f6bc85ce8 100644
--- a/xorg-server/test/signal-logging.c
+++ b/xorg-server/test/signal-logging.c
@@ -158,6 +158,8 @@ static void logging_format(void)
char buf[1024];
int i;
unsigned int ui;
+ long li;
+ unsigned long lui;
FILE *f;
char read_buf[2048];
char *logmsg;
@@ -194,6 +196,23 @@ static void logging_format(void)
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) %s %d %u %% %p %i\n") == 0);
+ /* literal % */
+ LogMessageVerbSigSafe(X_ERROR, -1, "test %%\n");
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, "(EE) test %\n") == 0);
+
+ /* character */
+ LogMessageVerbSigSafe(X_ERROR, -1, "test %c\n", 'a');
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, "(EE) test a\n") == 0);
+
+ /* something unsupported % */
+ LogMessageVerbSigSafe(X_ERROR, -1, "test %Q\n");
+ read_log_msg(logmsg);
+ assert(strstr(logmsg, "BUG") != NULL);
+ LogMessageVerbSigSafe(X_ERROR, -1, "\n");
+ fseek(f, 0, SEEK_END);
+
/* string substitution */
LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", "substituted string");
read_log_msg(logmsg);
@@ -207,6 +226,14 @@ static void logging_format(void)
LogMessageVerbSigSafe(X_ERROR, -1, "\n");
fseek(f, 0, SEEK_END);
+#warning Ignore compiler warning below "unknown conversion type character". This is intentional.
+ /* %hld is bogus */
+ LogMessageVerbSigSafe(X_ERROR, -1, "%hld\n", 4);
+ read_log_msg(logmsg);
+ assert(strstr(logmsg, "BUG") != NULL);
+ LogMessageVerbSigSafe(X_ERROR, -1, "\n");
+ fseek(f, 0, SEEK_END);
+
/* number substitution */
ui = 0;
do {
@@ -215,12 +242,47 @@ static void logging_format(void)
LogMessageVerbSigSafe(X_ERROR, -1, "%u\n", ui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
+
+ sprintf(expected, "(EE) %x\n", ui);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%x\n", ui);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
if (ui == 0)
ui = 1;
else
ui <<= 1;
} while(ui);
+ lui = 0;
+ do {
+ char expected[30];
+ sprintf(expected, "(EE) %lu\n", lui);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%lu\n", lui);
+ read_log_msg(logmsg);
+
+ sprintf(expected, "(EE) %lld\n", (unsigned long long)ui);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (unsigned long long)ui);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ sprintf(expected, "(EE) %lx\n", lui);
+ printf("%s\n", expected);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%lx\n", lui);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ sprintf(expected, "(EE) %llx\n", (unsigned long long)ui);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%llx\n", (unsigned long long)ui);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ if (lui == 0)
+ lui = 1;
+ else
+ lui <<= 1;
+ } while(lui);
+
/* signed number substitution */
i = 0;
do {
@@ -230,7 +292,6 @@ static void logging_format(void)
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
-
sprintf(expected, "(EE) %d\n", i | INT_MIN);
LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i | INT_MIN);
read_log_msg(logmsg);
@@ -242,19 +303,35 @@ static void logging_format(void)
i <<= 1;
} while(i > INT_MIN);
- /* hex number substitution */
- ui = 0;
+ li = 0;
do {
char expected[30];
- sprintf(expected, "(EE) %x\n", ui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%x\n", ui);
+ sprintf(expected, "(EE) %ld\n", li);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
- if (ui == 0)
- ui = 1;
+
+ sprintf(expected, "(EE) %ld\n", li | LONG_MIN);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li | LONG_MIN);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ sprintf(expected, "(EE) %lld\n", (long long)li);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)li);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ sprintf(expected, "(EE) %lld\n", (long long)(li | LONG_MIN));
+ LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)(li | LONG_MIN));
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ if (li == 0)
+ li = 1;
else
- ui <<= 1;
- } while(ui);
+ li <<= 1;
+ } while(li > LONG_MIN);
+
/* pointer substitution */
/* we print a null-pointer differently to printf */
diff --git a/xorg-server/xfixes/cursor.c b/xorg-server/xfixes/cursor.c
index 90a026b28..753d5f7bc 100644
--- a/xorg-server/xfixes/cursor.c
+++ b/xorg-server/xfixes/cursor.c
@@ -613,12 +613,12 @@ ReplaceCursorLookup(pointer value, XID id, pointer closure)
}
if (pCursor && pCursor != rcl->pNew) {
if ((*rcl->testCursor) (pCursor, rcl->closure)) {
- rcl->pNew->refcnt++;
+ CursorPtr curs = RefCursor(rcl->pNew);
/* either redirect reference or update resource database */
if (pCursorRef)
- *pCursorRef = rcl->pNew;
+ *pCursorRef = curs;
else
- ChangeResourceValue(id, RT_CURSOR, rcl->pNew);
+ ChangeResourceValue(id, RT_CURSOR, curs);
FreeCursor(pCursor, cursor);
}
}
diff --git a/xorg-server/xkb/xkbInit.c b/xorg-server/xkb/xkbInit.c
index 4e8e267da..5308a29df 100644
--- a/xorg-server/xkb/xkbInit.c
+++ b/xorg-server/xkb/xkbInit.c
@@ -251,6 +251,21 @@ XkbSetRulesDflts(XkbRMLVOSet * rmlvo)
}
void
+XkbDeleteRulesUsed(void)
+{
+ free(XkbRulesUsed);
+ XkbRulesUsed = NULL;
+ free(XkbModelUsed);
+ XkbModelUsed = NULL;
+ free(XkbLayoutUsed);
+ XkbLayoutUsed = NULL;
+ free(XkbVariantUsed);
+ XkbVariantUsed = NULL;
+ free(XkbOptionsUsed);
+ XkbOptionsUsed = NULL;
+}
+
+void
XkbDeleteRulesDflts(void)
{
free(XkbRulesDflt);
@@ -488,8 +503,9 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
XkbEventCauseRec cause;
XkbRMLVOSet rmlvo_dflts = { NULL };
- if (dev->key || dev->kbdfeed)
- return FALSE;
+ BUG_RETURN_VAL(dev == NULL, FALSE);
+ BUG_RETURN_VAL(dev->key != NULL, FALSE);
+ BUG_RETURN_VAL(dev->kbdfeed != NULL, FALSE);
if (!rmlvo) {
rmlvo = &rmlvo_dflts;
@@ -574,7 +590,8 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
XkbUpdateActions(dev, xkb->min_key_code, XkbNumKeys(xkb), &changes,
&check, &cause);
- InitFocusClassDeviceStruct(dev);
+ if (!dev->focus)
+ InitFocusClassDeviceStruct(dev);
xkbi->kbdProc = ctrl_func;
dev->kbdfeed->BellProc = bell_func;
diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS
index 1125d2c55..f975063c8 100644
--- a/xorg-server/xkeyboard-config/NEWS
+++ b/xorg-server/xkeyboard-config/NEWS
@@ -1,3 +1,5 @@
+2.9 18 bugs fixed
+ Updated 10 translations
2.8 18 bugs fixed
Most important change: a lot of materials updated from Oracle (Sun keyboards)
Updated translations
diff --git a/xorg-server/xkeyboard-config/configure.ac b/xorg-server/xkeyboard-config/configure.ac
index d48a3bbe8..fb31994df 100644
--- a/xorg-server/xkeyboard-config/configure.ac
+++ b/xorg-server/xkeyboard-config/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT(xkeyboard-config, 2.8)
+AC_INIT(xkeyboard-config, 2.9)
AC_CONFIG_SRCDIR(rules/base.xml.in)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
@@ -72,7 +72,7 @@ GETTEXT_PACKAGE=xkeyboard-config
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
-ALL_LINGUAS="af az bg ca crh cs da de el en_GB eo es fi fr gl hr hu id it ja ka ko ky lt nb nl pl ro ru rw sk sl sq sr sv tr uk vi zh_CN zh_TW"
+ALL_LINGUAS="af az bg ca crh cs da de el en_GB eo es fi fr gl hr hu id it ja ka ko ky lt nb nl pl pt_BR ro ru rw sk sl sq sr sv tr uk vi zh_CN zh_TW"
AC_SUBST(xkb_base)
AC_SUBST(xkb_rules_symlink)
diff --git a/xorg-server/xkeyboard-config/keycodes/Makefile.am b/xorg-server/xkeyboard-config/keycodes/Makefile.am
index 9c5a3864b..78a035575 100644
--- a/xorg-server/xkeyboard-config/keycodes/Makefile.am
+++ b/xorg-server/xkeyboard-config/keycodes/Makefile.am
@@ -12,6 +12,7 @@ fujitsu \
hp \
ibm \
macintosh \
+olpc \
sony \
sun \
xfree86 \
diff --git a/xorg-server/xkeyboard-config/keycodes/olpc b/xorg-server/xkeyboard-config/keycodes/olpc
new file mode 100644
index 000000000..d8f1ff860
--- /dev/null
+++ b/xorg-server/xkeyboard-config/keycodes/olpc
@@ -0,0 +1,24 @@
+
+// OLPC's mechanical keyboard moves several keys to the AA row. make
+// them easier to write symbol files naturally.
+
+// see http://wiki.laptop.org/go/OLPC_English_Non-membrane_Keyboard
+// and http://wiki.laptop.org/go/OLPC_Spanish_Non-membrane_Keyboard
+
+default
+xkb_keycodes "olpc" {
+
+ alias <AE00> = <TLDE>; // many OLPC keyboards don't put tilde there
+ alias <AC12> = <BKSL>; // on model olpc, physical position of BKSL
+
+};
+
+default
+xkb_keycodes "olpcm" {
+
+ alias <AE00> = <TLDE>; // many OLPC keyboards don't put tilde there
+ alias <AA02> = <BKSL>; // on model olpcm, new physical position of BKSL
+ alias <AA06> = <AE12>; // on model olpcm, new physical position of =+
+ alias <AA07> = <AC11>; // on model olpcm, new physical position of '"
+
+};
diff --git a/xorg-server/xkeyboard-config/po/ca.po b/xorg-server/xkeyboard-config/po/ca.po
index 63d6ceee9..a3b1fa19a 100644
--- a/xorg-server/xkeyboard-config/po/ca.po
+++ b/xorg-server/xkeyboard-config/po/ca.po
@@ -5,10 +5,10 @@
# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.7.99\n"
+"Project-Id-Version: xkeyboard-config-2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-18 20:31+0100\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 20:40+0200\n"
"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
"Language: ca\n"
@@ -1828,2015 +1828,2055 @@ msgid "German (eliminate dead keys)"
msgstr "Alemany (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Alemany (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Romanès (Alemanya)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Romanès (Alemanya, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Alemany (dvorak)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Alemany (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Alemany (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Alemany (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Alemany (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Baix sòrab"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Baix sòrab (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Alemany (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Rus (alemany, fonètic)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Grec"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Grec (senzill)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Grec (ampliat)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Grec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Grec (politònic)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Hongarès"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Hongarès (estàndard)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Hongarès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Hongarès (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hongarès (101/qwertz/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hongarès (101/qwertz/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hongarès (101/qwertz/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hongarès (101/qwertz/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hongarès (101/qwerty/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hongarès (101/qwerty/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hongarès (101/qwerty/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hongarès (101/qwerty/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hongarès (102/qwertz/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hongarès (102/qwertz/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hongarès (102/qwertz/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hongarès (102/qwertz/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hongarès (102/qwerty/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hongarès (102/qwerty/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hongarès (102/qwerty/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hongarès (102/qwerty/punt/elimina les tecles mortes)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Islandès"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Islandès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Islandès (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Islandès (dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hebreu"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hebreu (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hebreu (fonètic)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreu (bíblic, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Italià"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Italià (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Italià (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italià (teclat EUA amb lletres italianes)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Georgià (Itàlia)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Italià (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japonès"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japonès (Kana)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japonès (Kana 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japonès (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japonès (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japonès (dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirguís"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirguís (fonètic)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Khmer (Cambotja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kazakh"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rus (Kazakhstan amb Kazakh)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kazakh (amb rus)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Laosià"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Laosià (disposició estàndard proposada per STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Espanyol (llatinoamericà)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Espanyol (llatinoamericà, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Espanyol (llatinoamericà, inclou la titlla morta)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Espanyol (llatinoamericà, tecles mortes de Sun)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Lituà"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Lituà (estàndard)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituà (teclat EUA amb lletres lituanes)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituà (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Lituà (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Lituà (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Letó"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Letó (variant amb apòstrof)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Letó (variant titlla)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Letó (variant F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Letó (modern)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letó (ergonòmic, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Letó (adaptat)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Montenegrí"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrí (ciríl·lic)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Montenegrí (ciríl·lic, Z i ZHE intercanviades)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrí (llatí Unicode)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrí (llatí qwerty)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrí (llatí Unicode qwerty)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrí (ciríl·lic amb cometes angulars)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrí (llatí amb cometes angulars)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Macedoni"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedoni (elimina les tecles mortes)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Maltès"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Maltès (amb disposició EUA)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Noruec"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Noruec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Noruec (dvorak)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Sami Nord (Noruega)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Sami Nord (Noruega, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Noruec (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Noruec (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Noruec (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Polonès"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Polonès (antic)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Polonès (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Polonès (dvorak)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polonès (dvorak, cometes poloneses a la tecla cometes)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polonès (dvorak, cometes poloneses a la tecla 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Caixubi"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rus (Polònia, fonètic dvorak)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Polonès (dvorak de programador)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portuguès"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portuguès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portuguès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portuguès (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portuguès (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portuguès (Macintosh, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portuguès (natiu)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portuguès (natiu per als teclats EUA)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, natiu)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Romanès"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Romanès (ce trencada)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Romanès (estàndard)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Romanès (ce trencada estàndard)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Romanès (tecles Win)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Rus"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Rus (fonètic)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Rus (fonètic tecles Win)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Rus (màquina d'escriure)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Rus (antic)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Rus (màquina d'escriure, antic)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tàtar"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Osset (antic)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Osset (tecles Win)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Chuvash (llatí)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Udmurt"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Iacut"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Calmuc"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Rus (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Rus (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serbi (Rússia)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Baixkir"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serbi"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serbi (ciríl·lic, Z i ZHE intercanviades)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serbi (llatí)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serbi (llatí Unicode)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serbi (llatí qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbi (llatí Unicode qwerty)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbi (ciríl·lic amb cometes angulars)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serbi (llatí amb cometes angulars)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Rutè Pannònic (homofònic)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Eslovè"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Eslovè (usa cometes angulars per les cometes)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Eslovè (teclat EUA amb lletres eslovenes)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Eslovac"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Eslovac (barra inversa ampliada)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Eslovac (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Eslovac (qwerty, barra inversa ampliada)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Espanyol"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Espanyol (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Espanyol (inclou la titlla morta)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Espanyol (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Espanyol (dvorak)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturià (Espanya, amb H punt baix i L amb punt baix)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Català (Espanya, L amb punt volat)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Espanyol (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Suec"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Suec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Suec (dvorak)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Rus (Suècia, fonètic)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rus (Suècia, fonètic, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Sami del nord (Suècia)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Suec (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Suec (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Idioma de signes suec"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Alemany (Suïssa)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Alemany (Suïssa, antic)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Alemany (Suïssa, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Alemany (Suïssa, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Francès (Suïssa)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francès (Suïssa, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francès (Suïssa, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Francès (Suïssa, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Alemany (Suïssa, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Àrab (Síria)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Siri"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Siríac (fonètic)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurd (Síria, llatí Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurd (Síria, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurd (Síria, llatí Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Tadjik"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Tadjik (antic)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Singalès (fonètic)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tàmil (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tàmil (Sri Lanka, tipus d'escriptura TAB)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Tai"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Tai (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Tai (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Turc"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Turc (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Turc (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Turc (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurd (Turquia, llatí Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurd (Turquia, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurd (Turquia, llatí Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Turc (internacional amb tecles mortes)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tàtar de Crimea (Turc Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Tàtar de Crimea (Turc F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tàtar de Crimea (Turc Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Taiwanès"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Taiwanès (indígena)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ucraïnès"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ucraïnès (fonètic)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ucraïnès (màquina d'escriure)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ucraïnès (tecles Win)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ucraïnès (antic)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ucraïnès (estàndard RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rus (Ucraïna, estàndard RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ucraïnès (homofònic)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Anglès (RU)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Anglès (RU, tecles Win ampliades)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Anglès (RU, internacional amb tecles mortes)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Anglès (RU, dvorak)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Anglès (RU, dvorak amb puntuació RU)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Anglès (RU, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Anglès (RU, Macintosh internacional)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Anglès (RU, Colemak)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Usbec"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Usbec (llatí)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Vietnamita"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Coreà"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Coreà (compatible de 101/104 tecles)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japonès (sèries PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irlandès"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irlandès (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Urdú (Pakistan)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdú (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdú (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Àrab (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Diveí"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Anglès (Sud-àfrica)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (punt i coma i cometa desplaçats, obsolet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Nepalès"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Anglès (Nigèria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Ioruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amhàric"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Braille (ma esquerra)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Braille (ma dretà)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turcman"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turcman (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Francès (Mali, alternatiu)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Anglès (Mali, Macintosh EUA)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Anglès (Mali, internacional EUA)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Suahili (Tanzània)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Suahili (Kenya)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Filipí"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipí (QWERTY Baybayin)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipí (Capewell-dvorak llatí)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipí (Capewell-dvorak Baybayin)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipí (Capewell-QWERF 2006 llatí)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipí (Capewell-QWERF 2006 Baybayin)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Filipí (Colemak llatí)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipí (Colemak Baybayin)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Filipí (dvorak llatí)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipí (dvorak Baybayin)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Moldau"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Moldau (Gagauz)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Tecla(es) per a canviar la disposició"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Alt dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Alt esquerra (mentre està premuda)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Win esquerra (mentre està premuda)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Win dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Qualsevol tecla Win (mentre estan premudes)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Bloq Maj (mentre està premuda), Alt+Bloq Maj efectua l'acció de Bloq Maj original"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Alt dreta"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Alt esquerra"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Bloq Majús"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Maj+Bloq Maj"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Bloq Maj (a la primera disposició), Maj+Bloq Maj (a la darrera disposició)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Win esquerra (a la primera disposició), Win/Menú dreta (a la darrera disposició)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl esquerra (a la primera disposició), Ctrl dreta (a la darrera disposició)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Bloq Maj"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Les dues tecles Maj juntes"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Les dues tecles Alt juntes"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Les dues tecles Ctrl juntes"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Maj"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl esquerra+Maj esquerra"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl dreta+Maj dreta"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Maj"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Alt esquerra+Maj esquerra"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Espai"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menú"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Win esquerra"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Win dreta"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Maj esquerra"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Maj dreta"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Ctrl esquerra"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Ctrl dreta"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Bloq Despl"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl esquerra+Win esquerra (a la primera disposició), Ctrl dreta+Menú (a la segona disposició)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Tecla per a seleccionar el 3r nivell"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Qualsevol tecla Win"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Qualsevol tecla Alt"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Alt dreta, Maj+Alt dreta és la Multi_Key"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "La tecla Alt dreta mai selecciona el 3r nivell"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Retorn en el teclat numèric"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Barra inversa"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Més petit/Més gran&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Bloq Maj selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Barra inversa selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de 3r nivell"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Posició de la tecla Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Bloq Majús com a Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Ctrl esquerra com a Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Intercanvia Ctrl i Bloq Maj"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "A l'esquerra d'«A»"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "A baix esquerra"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl dreta com a Alt dreta"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menú com a Ctrl dreta"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Alt dreta com a Ctrl dreta"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Usa el LED del teclat per a mostrar la disposició alternativa"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Bloq Núm"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Selecció de la disposició del teclat numèric"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Antic"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Addicions Unicode (fletxes i operadors matemàtics)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics al nivell per defecte"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Wang 724 antic"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics en el nivell per defecte"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "Estil ATM/telèfon"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Comportament de la tecla de supressió del teclat numèric"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Tecla antiga amb punt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Tecla antiga amb coma"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Tecla de quatre nivells amb punt"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Tecla de quatre nivells amb punt, restricció de latin-9"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Tecla de quatre nivells amb coma"
# Què collons és momayyez? jm
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Tecla de quatre nivells amb momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Tecla de quatre nivells amb separadors abstractes"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Punt i coma al tercer nivell"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Comportament de la tecla Bloq Maj"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Bloq Maj usa internament les majúscules. Maj «pausa» Bloq Maj"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Bloq Maj usa internament les majúscules. Maj no afecta a Bloq Maj"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj «pausa» Bloq Maj"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj no afecta a Bloq Maj"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Bloq Maj commuta les majúscules normals dels caràcters alfabètics"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Converteix Bloq Maj en un Bloq Núm addicional"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Intercanvia Esc i Bloq Maj"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Converteix Bloq Maj en un Esc addicional"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Converteix Bloq Maj en un Retrocés addicional"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Converteix Bloq Maj en un Super addicional"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Converteix Bloq Maj en un Hyper addicional"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Bloq Maj commuta Maj, de manera que afecta a totes les tecles"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Bloq Maj està deshabilitat"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Converteix Bloq Maj en un Bloq Núm addicional però manté el «keysym» «Caps_Lock»"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Comportament de la tecla Alt/Win"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Afegeix el comportament estàndard a la tecla Menú"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt i Meta són a les tecles Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt s'assigna a les tecles Win (i a les tecles Alt habituals)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control s'assigna a les tecles Win (i a les tecles Ctrl habituals)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control s'assigna a les tecles Alt, Alt s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta s'assigna a la tecla Win esquerra"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt s'assigna a la tecla Win dreta i Super a Menú"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Alt està intercanviada amb la tecla Win"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Posició de la tecla Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "3r nivell de Win esquerra"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "3r nivell de Win dreta"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "3r nivell de Menú"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "3r nivell de Ctrl esquerra"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "3r nivell de Ctrl dreta"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "3r nivell de Bloq Maj"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "3r nivell de &lt;Més petit/Més gran&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pausa"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "ImprPant"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Opcions de compatibilitat diverses"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Tecles del teclat numèric per defecte"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Les tecles del teclat numèric sempre introdueixen dígits (com en el Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Maj amb el teclat numèric funciona com al MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Maj no cancel·la Bloq Núm, en el seu lloc selecciona el 3r nivell"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Tecles especials (Ctrl+Alt+&lt;tecla&gt;) gestionades en un servidor"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Teclat Apple Aluminium: emula les tecles del PC (Impr, Bloq Despl, Pausa, Bloq Núm)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Maj cancel·la Bloq Maj"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Habilita els caràcters tipogràfics extres"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj, una tecla Maj ho desactiva"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Commuta les tecles de cursor amb Maj + BloqNum."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Permetre trencar la captura amb accions del teclat (avís: risc de seguretat)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "S'afegeix el signe de moneda a certes tecles"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Euro en la E "
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Euro en el 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Euro en el 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Euro en el 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Rupia en el 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Tecla per a seleccionar el 5è nivell"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Usa la tecla d'espai per a introduir un caràcter d'espai sense salt"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Espai normal en qualsevol nivell"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell segon"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Caràcter d'espai sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Caràcter d'espai sense salt al nivell quart, i un caràcter d'espai fi sense salt al nivell sisè"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Caràcter d'espai sense salt al nivell quart, un caràcter d'espai fi sense salt al nivell sisè (via Ctrl+Maj)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Caràcter separador d'amplada zero al nivell segon"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer, i un caràcter d'espai sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Caràcter separador d'amplada zero al nivell segon, i un caràcter d'espai sense salt al nivell tercer"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un enllaç d'amplada zero al nivell quart"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell tercer, un enllaç d'amplada zero al nivell quart"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Opcions del teclat japonès"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "La tecla de bloqueig Kana està blocant"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Retrocés estil NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Converteix Zenkaku Hankaku en un Esc addicional"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "S'afegeix el circumflex de l'esperanto (supersigno)"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "A la tecla corresponent en un teclat qwerty."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "A la tecla corresponent en un teclat dvorak."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Manté la compatibilitat de tecles amb els codis de tecla antics de Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Compatibilitat amb les tecles Sun"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Seqüència de tecles per a matar el servidor X"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Retrocés"
@@ -4001,7 +4041,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belga (Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portuguès (Brasil, Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4068,10 +4108,6 @@ msgstr "Espanyol (Sun Type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Suec (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr ">Alemany (Suïssa)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Alemany (Suïssa, Sun Type 6/7)"
@@ -4096,6 +4132,9 @@ msgstr "Anglès (RU, Sun Type 6/7)"
msgid "Korean (Sun Type 6/7)"
msgstr "Coreà (Sun Type 6/7)"
+#~ msgid ">German (Switzerland)"
+#~ msgstr ">Alemany (Suïssa)"
+
#~ msgid "ca"
#~ msgstr "ca"
@@ -4147,9 +4186,6 @@ msgstr "Coreà (Sun Type 6/7)"
#~ msgid "Make Caps Lock an additional Ctrl"
#~ msgstr "Converteix Bloq Maj en un Ctrl addicional"
-#~ msgid "Meta on Left Ctrl"
-#~ msgstr "Meta en el Ctrl esquerre"
-
#~ msgid "Right Ctrl is mapped to Menu"
#~ msgstr "Ctrl dreta s'assigna a Menú"
diff --git a/xorg-server/xkeyboard-config/po/da.po b/xorg-server/xkeyboard-config/po/da.po
index 04c3caf47..67053c6c9 100644
--- a/xorg-server/xkeyboard-config/po/da.po
+++ b/xorg-server/xkeyboard-config/po/da.po
@@ -1,5 +1,5 @@
# Danish translation of xkeyboard-config.
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2013 Free Software Foundation, Inc.
# This file is distributed under the same license as the xkeyboard-config package.
# Ole Laursen <olau@hardworking.dk>, 2003.
# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011, 2012, 2013.
@@ -31,10 +31,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.7.99\n"
+"Project-Id-Version: xkeyboard-config-2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-20 23:06+0100\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-19 23:06+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -1857,794 +1857,802 @@ msgid "German (eliminate dead keys)"
msgstr "Tysk (slå døde taster fra)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Tysk (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Rumænsk (Tyskland)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumænsk (Tyskland, slå døde taster fra)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Tysk (dvorak)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Tysk (Sun døde taster)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Tysk (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Tysk (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Tysk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Nedersorbisk"
# nedersorbisk, tror jeg
# (el. nedre Lausitz)
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Nedersorbisk (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Tysk (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Russisk (Tyskland, fonetisk)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Græsk"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Græsk (simpel)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Græsk (udvidet)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Græsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Græsk (polytonisk)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Ungarsk"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Ungarsk (standard)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Ungarsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Ungarsk (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Ungarsk (101/qwertz/komma/døde taster)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Ungarsk (101/qwertz/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Ungarsk (101/qwertz/punktum/døde taster)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Ungarsk (101/qwertz/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Ungarsk (101/qwerty/komma/døde taster)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Ungarsk (101/qwerty/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Ungarsk (101/qwerty/punktum/døde taster)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Ungarsk (101/qwerty/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Ungarsk (102/qwertz/komma/døde taster)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Ungarsk (102/qwertz/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Ungarsk (102/qwertz/punktum/døde taster)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Ungarsk (102/qwertz/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Ungarsk (102/qwerty/komma/døde taster)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Ungarsk (102/qwerty/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Ungarsk (102/qwerty/punktum/døde taster)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Ungarsk (102/qwerty/punktum/slå døde taster fra)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Islandsk"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Islandsk (Sun døde taster)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Islandsk (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Islandsk (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hebraisk"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hebraisk (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hebraisk (fonetisk)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebraisk (bibelsk, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Italiensk"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Italiensk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Italiensk (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiensk (US-tastatur med italienske bogstaver)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Georgisk (Italien)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Italiensk (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japansk"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japansk (Kana)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japansk (Kana 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japansk (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japansk (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japansk (dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirgisisk"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirgisisk (fonetisk)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Khmerisk (Cambodja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kasakhisk"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russisk (Kasakhstan, med kazakhisk)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kasakhisk (med russisk)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (STEA-foreslået standardlayout)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Spansk (latinamerikansk)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spansk (latinamerikansk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spansk (latinamerikansk, inkluder død tilde)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spansk (latinamerikansk, Sun døde taster)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Litauisk"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Litauisk (standard)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litauisk (US-tastatur med litauiske bogstaver)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litauisk (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Litauisk (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Litauisk (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Lettisk"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Lettisk (apostrofvariant)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Lettisk (tildevariant)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Lettisk (F-variant)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Lettisk (moderne)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Lettisk (ergonomisk, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Lettisk (adapteret)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Montenegrinsk"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrinsk (kyrillisk)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Montenegrinsk (kyrillisk, Z og ZHE ombyttet)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrinsk (latin Unicode)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrinsk (latin qwerty)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrinsk (latin Unicode qwerty)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrinsk (kyrillisk med anførelsestegnene »«)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrinsk (latin med anførelsestegnene »«)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Makedonsk"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Makedonsk (slå døde taster fra)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Maltesisk"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Maltesisk (med US-layout)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongolsk"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Norsk"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Norsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Norsk (dvorak)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Nordligt samisk (Norge)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Nordligt samisk (Norge, slå døde taster fra)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Norsk (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norsk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Norsk (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Polsk"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Polsk (forældet)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Polsk (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Polsk (dvorak)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polsk (dvorak, polske anførelsestegn på anførelsestast)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polsk (dvorak, polske anførelsestegn på tast 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Kashubian"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russisk (Polen, fonetisk dvorak)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Polsk (programmørdvorak)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portugisisk"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugisisk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portugisisk (Sun døde taster)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portugisisk (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugisisk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugisisk (Macintosh, Sun døde taster)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portugisisk (nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portugisisk (nativo for USA-tastaturer)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Rumænsk"
# http://da.wikipedia.org/wiki/%C3%87
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Rumænsk (cedille)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Rumænsk (standard)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Rumænsk (standardcedille)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Rumænsk (Wintaster)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Russisk"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Russisk (fonetisk)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Russisk (fonetisk Wintaster)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Russisk (skrivemaskine)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Russisk (forældet)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Russisk (skrivemaskine, forældet)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Occitansk (forældet)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Occitansk (Wintaster)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Chuvash (latin)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Udmurt"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Yakut"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Russisk (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Russisk (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serbisk (Rusland)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Bashkirisk"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serbisk"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serbisk (kyrillisk, Z og ZHE ombyttet)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serbisk (latin)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serbisk (latin unicode)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serbisk (latin qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbisk (latin unicode qwerty)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbisk (kyrillisk med anførelsestegnene »«)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serbisk (latin med anførelsestegnene »«)"
# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
# in north-western Serbia and eastern Croatia
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Pannonisk rusyn (homofonisk)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Slovensk"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Slovensk (anvend »« som anførelsestegn)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovensk (US-tastatur med slovenske bogstaver)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Slovakisk"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Slovakisk (udvidet omvendt skråstreg)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Slovakisk (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovakisk (qwerty, udvidet omvendt skråstreg)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Spansk"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Spansk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Spansk (inkluder død tilde)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Spansk (Sun døde taster)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Spansk (dvorak)"
@@ -2652,1091 +2660,1123 @@ msgstr "Spansk (dvorak)"
# language of the West Iberian group, Astur-Leonese
# Subgroup, spoken in the Spanish province of Asturias
# by the Asturian people.
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisk (Spanien, med bundpunktum H og bundpunktum L)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalansk (Spanien, med midterpunktum L)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Spansk (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Svensk"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Svensk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Svensk (dvorak)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Russisk (Sverige, fonetisk)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russisk (Sverige, fonetisk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Nordligt samisk (Sverige)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Svensk (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Svensk (svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Svensk tegnsprog"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Tysk (Schweiz)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Tysk (Schweiz, forældet)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Tysk (Schweiz, slå døde taster fra)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Tysk (Schweiz, Sun døde taster)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Fransk (Schweiz)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Fransk (Schweiz, slå døde taster fra)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Fransk (Schweiz, Sun døde taster)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Fransk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Tysk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Arabisk (Syrien)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Syrisk"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Syrisk (fonetisk)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdisk (Syrien, latin Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurdisk (Syrien, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdisk (Syrien, latin Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Tadsjikisk"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Tadsjikisk (forældet)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Singalesisk (fonetisk)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilsk (Sri Lanka, unicode)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilsk (Sri Lanka, TAB-skrivemaskine)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Thai"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Thai (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Thai (pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Tyrkisk"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Tyrkisk (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Tyrkisk (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Tyrkisk (Sun døde taster)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdisk (Tyrkiet, latin Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurdisk (Tyrkiet, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdisk (Tyrkiet, latin Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Tyrkisk (international med døde taster)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krimtatarsk (tyrkisk Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Krimtatarsk (tyrkisk F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krimtatarsk (tyrkisk Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Taiwanesisk"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Taiwanesisk (indfødte)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ukrainsk"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ukrainsk (fonetisk)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ukrainsk (skrivemaskine)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainsk (Wintaster)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ukrainsk (forældet)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainsk (standard RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russisk (Ukraine, standard RSTU)"
# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
# in north-western Serbia and eastern Croatia
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ukrainsk (homofonisk)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Engelsk (UK)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Engelsk (UK, udvidede Wintaster)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Engelsk (UK, international med døde taster)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Engelsk (UK, Dvorak)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Engelsk (UK, Dvorak med UK-tegnsætning)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Engelsk (UK, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Engelsk (UK, Macintosh international)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Engelsk (UK, Colemak)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Usbekisk"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Usbekisk (latin)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Vietnamesisk"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Koreansk"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Koreansk (101/104 tastkompatibel)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japansk (pc-98xx-serie)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irsk"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irsk (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Arabisk (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Engelsk (Sydafrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (forkert placeret semikolon og anførelsestegn, forældet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Nepalesisk"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Engelsk (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
# http://da.wikipedia.org/wiki/Amharisk
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amharisk"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Blindeskrift"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Blindeskrift (venstre hånd)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Blindeskrift (højre hånd)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turkmensk"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turkmensk (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Fransk (Mali, alternativ)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Engelsk (Mali, US Macintosh)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Engelsk (Mali, US international)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzania)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenya)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Filippinsk"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filippinsk (QWERTY baybayin)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filippinsk (Capewell-dvorak latin)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filippinsk (Capewell-dvorak baybayin)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filippinsk (Capewell-QWERF 2006 latin)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filippinsk (Capewell-QWERF 2006 baybayin)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Filippinsk (Colemak latin)"
# http://en.wikipedia.org/wiki/Baybayin
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Filippinsk (Colemak baybayin)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Filippinsk (Dvorak latin)"
# http://en.wikipedia.org/wiki/Baybayin
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filippinsk (Dvorak baybayin)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Moldavisk"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
# http://www.denstoredanske.dk/Sprog,_religion_og_filosofi/Sprog/Alle_lande_-_sprogoversigt/Altaiske_sprog/gagausisk
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Moldavisk (gagausisk)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Tast(er) for at skifte layout"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Højre Alt (mens trykket ned)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Venstre Alt (mens trykket ned)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Venstre Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Højre Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Enhver Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (mens presset ned), Alt+Caps Lock udfører den oprindleige capslockhandling"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Højre Ctrl-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Højre Alt"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Venstre Alt"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Skift+Caps Lock"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (skifter til første layout), Skift+Caps Lock (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Venstre Win (skifter til første layout), Højre Win/Menu (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Venstre Ctrl (skifter til første layout), Højre Ctrl (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Begge skift-taster sammen"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Begge Alt-taster sammen"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Begge Ctrl-taster sammen"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Skift"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Venstre Ctrl+Venstre Skift"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Højre Ctrl+Højre Skift"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Skift"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Venstre Alt+Venstre Skift"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Mellemrum"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Venstre Win"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Højre Win"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Venstre Skift"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Højre Skift"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Venstre Ctrl"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Højre Ctrl"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Venstre Ctrl+Venstre Win (til første layout), Højre Ctrl+Menu (til andet layout)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Tast for at vælge tredje niveau"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Enhver Win-tast"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Enhver Alt-tast"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Højre Alt-tast, Skift+højre Alt-tast er fler_tast"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Højre Alt-tast vælger aldrig tredje niveau"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Retur på numerisk tastatur"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Omvendt skråstreg"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mindre end/Større end&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Omvendt skråstreg vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Ctrl-tast placering"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock som Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Venstre Ctrl som Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Ombyt Ctrl og Caps Lock"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Til venstre for 'A'"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "Nederst til venstre"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Højre Ctrl-tast virker som højre Alt"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menu som højre Ctrl"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Højre Alt-tast virker som højre Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Brug tastatur-LED til at vise alternativ layout"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Numerisk tastatur layout udvælgelse"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Forældet"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode tilføjelser (pile og matematiske tegn)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Unicode tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Forældet Wang 724"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 numerisk tastatur med Unicode-tilføjelser (pile og matematiske tegn)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Wang 724 numerisk tastatur med Unicode-tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Sekstentals"
# ATM = hæveautomat, måske skal det oversættes.
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "ATM/telefonstil"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Numerisk tastatur slettetast opførsel"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Forældet tast med punktum"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Forældet tast med komma"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Niveau fire tast med punktum"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Niveau fire tast med punktum, latin-9 begrænsning"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Niveau fire tast med komma"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Niveau fire tast med momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Niveau fire tast med abstrakt adskillelser"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Semikolon på tredje niveau"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Opførsel for Caps Lock-tast"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift sætter Caps Lock »på hold«"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift påvirker ikke Caps Lock"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock agerer som skiftetasten med lås. Skift »pauser« Caps Lock"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Caps Lock agerer som skiftetasten med lås. Skift påvirker ikke Caps Lock"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock slår små/store bogstaver til/fra"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Gør Caps Lock til en ekstra NumLock"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Ombyt ESC og Caps Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Gør Caps Lock til en ekstra Esc"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Gør Caps Lock til en ekstra rettelsestast"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Gør Caps Lock til en ekstra Super"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Gør Caps Lock til en ekstra Hyper"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Caps Lock ændrer Skift så alle taster bliver påvirket"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Caps Lock er slået fra"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Gør Caps Lock til en ekstra Control men behold Caps_Lock keysym"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Alt/Win-tasteopførsel"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Tilføj standardopførslen til menutasten"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt og Meta er på Alt-tasterne"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt ligger på Win-tasterne (og de normale Alt-taster)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Kontrol ligger på Win-tasterne (og de normale Ctrl-taster)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Kontrol ligger på Alt-tasterne, Alt ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta ligger på venstre Win-tast"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt ligger på den højre Win-tast og Super på Menu"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
-msgstr "Alt ombyttes med Win-tast"
+msgstr "Alt-tast ombyttes med Win-tast"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Placering af Composetast"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "Tredje niveau for venstre Win"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "Tredje niveau for højre Win"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Tredje niveau for Menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "Tredje niveau for venstre Ctrl"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "Tredje niveau for højre Ctrl"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Tredje niveau for Caps Lock (lås skift)"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Tredje niveau for &lt;Mindre end/Større end&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "Prtsc"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Diverse kompatibilitetsvalg"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Standard numerisk tastatur taster"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Numerisk tastatur indtaster altid tal (som på Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Skift med numeriske taster virker som i MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Skift afbryder ikke Num Lock, vælger tredje niveau i steden for"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Specialtaster (Ctrl+Alt+&lt;key&gt;) håndteret i en server"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apples aluminiumstastatur: Emuler PC-taster (Udskriv, Scroll Lock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Skift afbryder Caps Lock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Slå ekstra typografiske karakterer til"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Begge skift-taster sammen skifter Caps Lock"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Begge skift-taster sammen aktiverer Caps Lock, en Skift-tast deaktiverer"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Begge skift-taster sammen skifter SkiftLock"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Skift pegetaster med Skift + NumLock."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Tillader afbrydelsesgreb med tastaturhandlinger (advarsel: sikkerhedsrisiko)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Tilføjelse af valutategn til bestemte taster"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Euro på E"
@@ -3745,75 +3785,75 @@ msgstr "Euro på E"
# på to" mere beskrivende, selv om strengen isoleret set stadig kan være
# forvirrende. Når teksten står i en sammenhæng, er det nok ikke så
# vigtigt om det er det ene eller det andet.
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Euro på 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Euro på 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Euro på 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Rupee på 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Tast for at vælge femte niveau"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Normal mellemrum på alle niveauer"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Ubrydelig mellemrumskarakter på andet niveau"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau, intet på fjerde niveau"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau, tynd ubrydelig mellemrumskarakter på fjerde niveau"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau (via Ctrl+Skift)"
@@ -3825,80 +3865,80 @@ msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemru
# is desirable to keep the words closer together. The ZWNJ is represented in Unicode
# is U+200C, and can be represented in HTML as &#x200C;, &#8204; or &zwnj;. Kilde eng.
# wikipedia 12. maj 2010
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumsteng på fjerde niveau"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt på mellemrum på tredje niveau"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumstegn (ZWNJ) på fjerde niveau"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på tredje niveau, ombrydeligt mellemrumstegn på fjerde niveau"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Japanske tastaturvalg"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Kana låsetast låser"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F-stil rettelsestast"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Gør Zenkaku Hankaku til en ekstra Esc"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Tilføjelse af esperanto accent circonflexe (supersigno)"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Til den tilsvarende tast på et Qwertytastatur."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Til den tilsvarende tast i et Dvoraktastatur."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Vedligehold tastkompatibilitet med gamle tastkoder for Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Kompatibilitet med Suntast"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Tastsekvens for at slå X-serveren ned"
# Backspace kunne også være Slet tilbage
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Rettelsestast"
@@ -4068,7 +4108,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belgisk (Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugisisk (brasiliansk, Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4135,10 +4175,6 @@ msgstr "Spansk (Sun type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Svensk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr ">Tysk (Schweiz)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Tysk (Schweiz, Sun type 6/7)"
@@ -4162,3 +4198,6 @@ msgstr "Engelsk (UK, Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:128
msgid "Korean (Sun Type 6/7)"
msgstr "Koreansk (Sun type 6/7)"
+
+#~ msgid ">German (Switzerland)"
+#~ msgstr ">Tysk (Schweiz)"
diff --git a/xorg-server/xkeyboard-config/po/de.po b/xorg-server/xkeyboard-config/po/de.po
index b42910cc1..b9836f252 100644
--- a/xorg-server/xkeyboard-config/po/de.po
+++ b/xorg-server/xkeyboard-config/po/de.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.7.99\n"
+"Project-Id-Version: xkeyboard-config-2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-20 20:25+0100\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 20:01+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -1827,2015 +1827,2055 @@ msgid "German (eliminate dead keys)"
msgstr "Deutsch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Deutsch (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Rumänisch (Deutschland)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumänisch (Deutschland, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Deutsch (Dvorak)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Deutsch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Deutsch (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Deutsch (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Deutsch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Niedersorbisch"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Niedersorbisch (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Deutsch (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Russisch (Deutschland, phonetisch)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Griechisch"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Griechisch (vereinfacht)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Griechisch (erweitert)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Griechisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Griechisch (polytonisch)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Ungarisch"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Ungarisch (Standard)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Ungarisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Ungarisch (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Ungarisch (101/qwertz/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Ungarisch (101/qwertz/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Ungarisch (101/qwertz/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Ungarisch (101/qwertz/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Ungarisch (101/qwerty/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Ungarisch (101/qwerty/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Ungarisch (101/qwerty/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Ungarisch (101/qwerty/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Ungarisch (102/qwertz/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Ungarisch (102/qwertz/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Ungarisch (102/qwertz/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Ungarisch (102/qwertz/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Ungarisch (102/qwerty/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Ungarisch (102/qwerty/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Ungarisch (102/qwerty/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Ungarisch (102/qwerty/Punkt/ohne Akzenttasten)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Isländisch"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Isländisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Isländisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Isländisch (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Isländisch (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hebräisch"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hebräisch (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hebräisch (phonetisch)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebräisch (Biblisch, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Italienisch"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Italienisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Italienisch (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italienisch (US-Tastatur mit italienischen Buchstaben)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Georgisch (Italien)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Italienisch (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japanisch"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japanisch (Kana)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japanisch (Kana 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japanisch (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japanisch (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japanisch (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirgisisch"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirgisisch (phonetisch)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Khmer (Kambodscha)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kasachisch"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russisch (Kasachstan, mit Kasachisch)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kasachisch (mit russischer Belegung)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Laotisch (durch STEA vorgeschlagene Standardbelegung)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Spabisch (Lateinamerikanisch)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spanisch (Lateinamerikanisch, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spanisch (Lateinamerikanisch, Akzent-Tilde einschließen)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spanisch (Lateinamerikanisch, Sun-Akzenttasten)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Litauisch"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Litauisch (Standard)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litauisch (US-Tastatur mit litauischen Buchstaben)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litauisch (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Litauisch (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Litauisch (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Lettisch"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Lettisch, (Apostroph-Variante)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Lettisch (Tilde-Variante)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Lettisch (F-Variante)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Lettisch (modern)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Georgisch (ergonomisch, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Lettisch (angepasst)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Montenegrinisch"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrinisch (kyrillisch)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Montenegrinisch, (Kyrillisch, »З« und »Ж« vertauscht)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrinisch (lateinisch, Unicode)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrinisch (lateinische qwerty-Tastatur)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrinisch (lateinische qwerty-Tastatur, Unicode)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrinisch (Kyrillisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrinisch (lateinisch mit Anführungszeichen)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Mazedonisch"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Mazedonisch (ohne Akzenttasten)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Maltesisch"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Maltesisch (mit US-Belegung)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongolisch"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Norwegisch"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Norwegisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Norwegisch (Dvorak)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Nördliches Saami (Norwegen)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Nördliches Saami (Norwegen, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Norwegisch (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norwegisch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Norwegisch (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Polnisch"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Polnisch (veraltet)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Polnisch (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Polnisch (Dvorak)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Kaschubisch"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russisch (Polen, phonetisch, Dvorak)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Polnisch (Dvorak für Programmierer)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portugiesisch"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugiesisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portugiesisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portugiesisch (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugiesisch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugiesisch (Macintosh, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portugiesisch (Nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portugiesisch (Nativo für US-Tastaturen)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Rumänisch"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Rumänisch (Cedilla)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Rumänisch (Standard)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Rumänisch (Standard Cedilla)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Rumänisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Russisch"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Russisch (phonetisch)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
-msgstr "Russisch (phonetisch mit Win-Tasten)"
+msgstr "Russisch (phonetisch mit Windows-Tasten)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Russisch (Schreibmaschine)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Russisch (veraltet)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Russisch (Schreibmaschine, veraltet)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tatarisch"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Ossetisch (veraltet)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Ossetisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Tschuwaschisch"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Tschuwaschisch (lateinische Schrift)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Udmurtisch"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Jakutisch"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Kalmykisch"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Russisch (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Russisch (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serbisch (Russland)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Baschkirisch"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serbisch"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serbisch, (Kyrillisch, »З« und »Ж« vertauscht)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serbisch (Lateinisch)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serbisch (Lateinisch Unicode)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serbisch (Lateinische qwerty-Tastatur)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbisch (lateinische qwerty-Tastatur, Unicode)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbisch (Kyrillisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serbisch (Lateinisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Pannonisches Russinisch (homophon)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Slowenisch"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Slowenisch (Anführungszeichen für Zitate verwenden)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slowenisch (US-Tastatur mit slowenischen Buchstaben)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Slowakisch"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Slowakisch (erweiterter Backslash)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Slowakisch (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slowakisch (qwerty, erweiterter Backslash)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Spanisch"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Spanisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Spanisch (Akzent-Tilde einschließen)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Spanisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Spanisch (Dvorak)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisch (Spanien, mit unterpunktetem L und H)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Katalanisch (Spanische Variante mit mittelpunktiertem L)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Spanisch (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Schwedisch"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Schwedisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Schwedisch (Dvorak)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Russisch (Schweden, phonetisch)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russisch (Schweden, phonetisch, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Nördliches Saami (Schweden)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Schwedisch (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Schwedisch (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Schwedische Gebärdensprache"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Deutsch (Schweiz)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Deutsch (Schweiz, veraltet)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Deutsch (Schweiz, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Deutsch (Schweiz, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Französisch (Schweiz)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Französisch (Schweiz, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Französisch (Schweiz, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Französisch (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Deutsch (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Arabisch (Syrien)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Syrisch"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Syrisch (phonetisch)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdisch (Syrien, lateinisches Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurdisch (Syrien, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdisch (Syrien, lateinisches Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Tadschikisch"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Tadschikisch (veraltet)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Sinhala (phonetisch)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilisch (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilisch (Sri Lanka, TAB Schreibmaschine)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Thailändisch"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Thailändisch (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Thailändisch (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Türkisch"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Türkisch, (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Türkisch (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Türkisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdisch (Türkei, lateinisches Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurdisch (Türkei, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdisch (Türkei, lateinisches Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Türkisch (International, mit Akzenttasten)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krimtatarisch (Türkisch Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Krimtatarisch (Türkisch F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krimtatarisch (Türkisch Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Taiwanesisch"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Taiwanesisch (indigen)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ukrainisch"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ukrainisch (phonetisch)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ukrainisch (Schreibmaschine)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ukrainisch (veraltet)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainisch (Standard-RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russisch (Ukraine, Standard-RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ukrainisch (homophon)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Englisch (Britisch)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Englisch (Britisch erweitert, Windows-Tasten)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Englisch (Britisch international, mit Akzenttasten)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Englisch (Britisch, Dvorak)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Englisch (Dvorak mit britischer Punktierung)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Englisch (Britisch, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Englisch (Britisch, Macintosh international)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "English (Britisch, Colemak)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Usbekisch"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Usbekisch (lateinische Schrift)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Vietnamesisch"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Koreanisch"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Koreanisch (101/104-Tasten kompatibel)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japanisch (PC-98xx-Serie)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irisch"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irisch (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Arabisch (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Englisch (Südafrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (falsch platziertes Semikolon und Anführungszeichen, veraltet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Nepalesisch"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Englisch (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Joruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amharisch"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Braille (linkshändig)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Braille (rechtshändig)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turkmenisch"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turkmenisch (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Französisch (Mali, Alternative)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Englisch (Mali, USA Macintosh)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Englisch (Mali, USA International)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tansania)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenia)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Philippinisch"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Philippinisch (QWERTY, Baybayin)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Philippinisch (Capewell-Dvorak, Lateinisch)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Philippinisch (Capewell-Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Philippinisch (Capewell-QWERF 2006, lateinisch)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Philippinisch (Capewell-QWERF 2006, Baybayin)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Philippinisch (Colemak, lateinisch)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Philippinisch (Colemak, Baybayin)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Philippinisch (Dvorak, lateinisch)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Philippinisch (Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Moldawisch"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Moldauisch (Gagauz)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Taste(n) zum Wechseln der Belegung"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Rechte Alt-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Linke Alt-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Linke Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Rechte Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Beliebige Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Feststelltaste (gedrückt halten), Alt+Feststelltaste führen die normale Feststelltasten-Aktion aus"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Rechte Strg-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Rechte Alt-Taste"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Linke Alt-Taste"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Feststelltaste"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Umschalt-+Feststelltaste"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Feststelltaste (zur ersten Belegung), Umschalttaste+Feststelltaste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Linke Windows-Taste (zur ersten Belegung), rechte Windows/Menütaste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Linke Strg-Taste (zur ersten Belegung), rechte Strg-Taste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Feststelltaste"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Beide Umschalttasten gleichzeitig"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Beide Alt-Tasten gleichzeitig"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Beide Steuerungstasten gleichzeitig"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Strg+Umschalttaste"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Linke Strg-Taste+Linke Umschalttaste"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Rechte Strg-Taste und rechte Umschalttaste"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Strg"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Umschalttaste"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Linke Alt-Taste+Linke Umschalttaste"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Leertaste"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menü"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Linke Windows-Taste"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Rechte Windows-Taste"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Linke Umschalttaste"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Rechte Umschalttaste"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Linke Strg-Taste"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Rechte Strg-Taste"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Rollen"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
-msgstr "Linke Strg-Taste und linke Win-Taste (zur ersten Belegung), rechte Strg-Taste und Menütaste (zur zweiten Belegung)"
+msgstr "Linke Strg-Taste und linke Windows-Taste (zur ersten Belegung), rechte Strg-Taste und Menütaste (zur zweiten Belegung)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Taste zum Wechsel in die dritte Tastaturebene"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Beliebige Windows-Taste"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Beliebige Alt-Taste"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Rechte Alt-Taste, Umschalttaste+rechte Alt-Taste ist Multi-Taste"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene."
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Eingabetaste im Nummernblock"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner als/größer als&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Feststelltaste wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Backslash wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Position der Strg-Taste"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Feststelltaste als Strg-Taste"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Linke Strg-Taste als Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Strg-Taste und Feststelltaste vertauschen"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Links von »A«"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "Unten links"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Rechte Strg-Taste wie rechte Alt-Taste"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menü als rechte Strg-Taste"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Rechte Alt-Taste als rechte Strg-Taste"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "NumLock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Belegungsauswahl des Nummernblocks"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Veraltet"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren befinden sich in der Standardebene."
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Wang 724 (veraltet)"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren in der Standardebene"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Hexadezimal"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "ATM/Telefonstil"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Verhalten der Löschtaste des Nummernblocks"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Veraltete Taste mit Punkt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Veraltete Taste mit Komma"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Taste der vierten Ebene mit Punkt"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Taste der vierten Ebene mit Punkt, latin-9-Einschränkung"
+msgstr "Taste der vierten Ebene mit Punkt, Latin-9-Einschränkung"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Taste der vierten Ebene mit Komma"
# momayyez? Was ist das?
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Taste der vierten Ebene mit »momayyez«"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Taste der vierten Ebene mit abstrakten Trennern"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Semikolon in der dritten Tastaturebene"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Verhalten der Feststelltaste"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste beeinflusst Feststelltaste nicht"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste »unterbricht« Feststelltaste"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste beeinflusst Feststelltaste nicht"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Esc und Feststelltaste vertauschen"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Feststelltaste als zusätzliche Löschtaste verwenden"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Feststelltaste als zusätzliche Super-Taste verwenden"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Feststelltaste ist deaktiviert"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden, aber Caps_Lock als Schnellzugriff erhalten"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Verhalten der Alt/Windows-Tasten"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Standardverhalten zur Menütaste hinzufügen"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt und Meta befinden sich auf den Alt-Tasten."
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt ist den Windows-Tasten zugeordnet (und den üblichen Alt-Tasten)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Strg ist den Win-Tasten zugeordnet (und den üblichen Strg-Tasten)"
+msgstr "Strg ist den Windows-Tasten zugeordnet (und den üblichen Strg-Tasten)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Strg ist den Alt-Tasten zugeordnet, Alt ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta ist der linken Windows-Taste zugeordnet"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper ist den Win-Tasten zugeordnet"
+msgstr "Hyper ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt ist der rechten Win-Taste zugeordnet und Super der Menü-Taste."
+msgstr "Alt ist der rechten Windows-Taste zugeordnet und Super der Menü-Taste."
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Alt-Taste ist gegen Windows-Taste vertauscht"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Position der Compose-Taste"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "Dritte Ebene der linken Windows-Taste"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "Dritte Ebene der rechten Windows-Taste"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Dritte Ebene der Menü-Taste"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "Dritte Ebene der linken Strg-Taste"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "Dritte Ebene der rechten Strg-Taste"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Dritte Ebene der Feststelltaste"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Dritte Ebene von &lt;Kleiner als/größer als&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "Druck"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Verschiedene Optionen zur Kompatibilität"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Vorgegebene Nummernblocktasten"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Tasten des Nummernblocks geben immer Ziffern ein (wie bei Mac)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Umschalttaste funktioniert mit den Tasten des Nummernblocks wie in MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Umschalttaste deaktiviert NumLock nicht, wechselt stattdessen in die dritte Tastaturebene"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Spezialtasten für Server (Strg+Alt+&lt;Taste&gt;)"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: PC-Tasten emulieren (Druck, Scroll_Lock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Umschalttaste deaktiviert Feststelltaste"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Typographische Sonderzeichen aktivieren"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus, eine Umschalttaste deaktiviert"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Beide Umschalttasten gleichzeitig schalten ShiftLock ein und aus"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Zeigertasten mit Umschalttaste + NumLock umschalten"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Erlauben, Grabs mit Tastaturaktionen abzubrechen (Achtung: Sicherheitsrisiko)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Euro auf E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Euro auf 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Euro auf 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Euro auf 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Rupie-Symbol auf 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Taste zum Wechsel in die fünfte Tastaturebene"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Linke Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgstr "Linke Windows-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Rechte Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgstr "Rechte Windows-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene (mit Strg + Umschalttaste)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene, nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Ebene"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der dritten Ebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Japanische Tastaturoptionen"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Kana-Sperrtaste ist gesperrt"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Löschtaste wie NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Zenkaku Hankaku als zusätzliche Esc-Taste verwenden"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Esperanto-Circumflex (^) hinzufügen (supersigno)"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Zur entsprechenden Taste einer Qwerty-Tastatur."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Zur entsprechenden Taste einer Dvorak-Tastatur."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Tastenkompatibilität mit veralteten Solaris-Tastencodes sicher stellen"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Sun-Tastenkompatibilität"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Strg + Alt + Löschtaste"
@@ -4000,7 +4040,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belgisch (Sun Typ 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugiesisch (Brasilien, Sun Typ 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4067,10 +4107,6 @@ msgstr "Spanisch (Sun Typ 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Schwedisch (Sun Typ 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr ">Deutsch (Schweiz)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Deutsch (Schweiz, Sun Typ 6/7)"
@@ -4095,6 +4131,9 @@ msgstr "Englisch (Großbritannien, Sun Typ 6/7)"
msgid "Korean (Sun Type 6/7)"
msgstr "Koreanisch (Sun Typ 6/7)"
+#~ msgid ">German (Switzerland)"
+#~ msgstr ">Deutsch (Schweiz)"
+
#~ msgid "ca"
#~ msgstr "ca"
diff --git a/xorg-server/xkeyboard-config/po/eo.po b/xorg-server/xkeyboard-config/po/eo.po
index ebe235819..9e98a8eeb 100644
--- a/xorg-server/xkeyboard-config/po/eo.po
+++ b/xorg-server/xkeyboard-config/po/eo.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.7.99\n"
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-24 09:00-0300\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 15:07-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
@@ -1826,2014 +1826,2054 @@ msgid "German (eliminate dead keys)"
msgstr "Germana (forigi senpaŝajn klavojn)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Germana (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Rumana (Germanujo)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumana (Germanujo, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Germana (Dvorako)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Germana (senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Germana (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Germana (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Germana (Macintosh, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Malsupra Soraba"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Malsupra Soraba (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Germana (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Rusa (Germana, fonetika)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Greka"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Greka (simpla)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Greka (etendita)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Greka (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Greka (plurtona)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Hungara"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Hungara (norma)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Hungara (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Hungara (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hungara (101/qwertz/komo/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hungara (101/qwertz/komo/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hungara (101/qwertz/punkto/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hungara (101/qwertz/punkto/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hungara (101/qwerty/komo/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hungara (101/qwerty/komo/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hungara (101/qwerty/punkto/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hungara (101/qwerty/punkto/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hungara (102/qwertz/komo/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hungara (102/qwertz/komo/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hungara (102/qwertz/punkto/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hungara (102/qwertz/punkto/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hungara (102/qwerty/komo/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hungara (102/qwerty/komo/forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hungara (102/qwerty/punkto/senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hungara (102/qwerty/punkto/forigi senpaŝajn klavojn)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Islanda"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Islanda (senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Islanda (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Islanda (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Islanda (Dvorako)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hebrea"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hebrea (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hebrea (fonetika)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebrea (Biblia, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Itala"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Itala (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Itala (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Itala (usona klavaro kun italaj literoj)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Kartvela (Italujo)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Itala (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japana"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japana (Kanao)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japana (Kanao 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japana (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japana (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japana (Dvorako)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirgiza"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirgiza (fonetika)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Kmera (Kamboĝo)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kazaĥa"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rusa (Kazaĥujo, kun Kazaĥa)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kazaĥa (kun Rusa)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (norma aranĝo proponita de STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Hispana (Latin-amerika)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Hispana (Latin-amerika, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Hispana (Latin-amerika, inkluzive senpaŝa tildo)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Hispana (Latin-amerika, senpaŝaj klavoj de Sun)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Litova"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Litova (norma)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litova (Usona klavaro kun litovaj literoj)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litova (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Litova (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Litova (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Latva"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Latva (citila variaĵo)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Latva (tilda variaĵo)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Latva (variaĵo F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Latva (moderna)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Latva (komforteca, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Latva (adaptita)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maoria"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Montenegra"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegra (Cirila)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Montenegra (Cirila, Z kaj ZHE interŝanĝita)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegra (Latina Unikodo)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegra (Latina qwerty)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegra (Latina Unikodo qwerty)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegra (Cirila kun angul-citiloj)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegra (Latina kun angul-citiloj)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Makedona"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Makedona (forigi senpaŝajn klavojn)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Malta"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Malta (kun usona aranĝo)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongola"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Norvega"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Norvega (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Norvega (Dvorako)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Norda Samea (Norvegujo)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Norda Samea (Norvegujo, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Norvega (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norvega (Macintosh, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Norvega (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Pola"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Pola (malmoderna)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Pola (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Pola (Dvorako)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Pola (Dvorako, polaj citiloj ĉe citila klavo)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Pola (Dvorako, polaj citiloj ĉe klavo 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Kaŝuba"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rusa (Polujo, fonetika Dvorako)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Pola (Dvorako por programistoj)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portugala"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugala (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portugala (senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portugala (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugala (Macintosh, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugala (Macintosh, senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portugala (Nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portugala (Nativo por usonaj klavaroj)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugalujo, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Rumana"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Rumana (subhoko)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Rumana (norma)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Rumana (norma subhoko)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Rumana (WinKeys)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Rusa"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Rusa (fonetika)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Rusa (fonetika WinKeys)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Rusa (skribmaŝina)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Rusa (malmoderna)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Rusa (skribmaŝina, malmoderna)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tatara"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Oseta (malmoderna)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Oseta (WinKeys)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Ĉuvaŝa"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Ĉuvaŝa (Latina)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Udmurta"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komia"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Jakuta"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Rusa (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Rusa (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serba (Rusujo)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Baŝkira"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Maria"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serba"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serba (Cirila, Z kaj ZHE interŝanĝita)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serba (Latina)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serba (Latina Unikoda)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serba (Latina qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serba (Latina Unikoda qwerty)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serba (Cirila kun angul-citiloj)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serba (Latina kun angul-citiloj)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Panona Rusina (homofonia)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Slovena"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Slovena (uzi angul-citilojn por citiloj)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovena (Usona klavaro kun slovenaj literoj)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Slovaka"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Slovaka (etendita Retroklino)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Slovaka (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovaka (qwerty, etendita Retroklino)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Hispana"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Hispana (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Hispana (inkluzive senpaŝa tildo)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Hispana (senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Hispana (Dvorako)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturia (Hispanujo, kun subpunktita H kaj subpunktita L)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Kataluna (Hispanujo, kun centro-punktita L)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Hispana (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Sveda"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Sveda (forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Sveda (Dvorako)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Rusa (Svedujo, fonetika)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rusa (Svedujo, fonetika, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Norda Samea (Svedujo)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Sveda (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Sveda (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Sveda gestlingvo"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Germana (Svislando)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Germana (Svislando, malmoderna)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Germana (Svislando, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Germana (Svislando, senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Franca (Svislando)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Franca (Svislando, forigi senpaŝajn klavojn)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Franca (Svislando, senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Franca (Svislando, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Germana (Svislando, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Araba (Sirio)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Siria"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Siria (fonetika)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurda, (Sirio, Latina Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurda (Sirio, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurda (Sirio, Latina Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Taĝika"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Taĝika (malmoderna)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Sinhala (fonetika)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamila (Sri-lanko, Unikodo)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamila (Sri-lanko, Skribmaŝino TAB)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Taja"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Taja (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Taja (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Turka"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Turka (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Turka (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Turka (senpaŝaj klavoj de Sun)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurda (Turkujo, Latina Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurda, (Turkujo, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurda (Turkujo, Latina Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Turka (internacia kun senpaŝaj klavoj)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krime-tatara (Turka Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Krime-tatara (Turka F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krime-tatara (Turka Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Tajvana"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Tajvana (indiĝena)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Tajvano)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ukrajna"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ukrajna (fonetika)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ukrajna (skribmaŝino)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ukrajna (WinKeys)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ukrajna (malmoderna)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrajna (norma RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rusa (Ukrajnujo, norma RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ukrajna (homofonia)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Angla (UK)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Angla (UK, etenditaj WinKeys)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Angla (UK, internacia kun senpaŝaj klavoj)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Angla (UK, Dvorako)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Angla (UK, Dvorako kun interpunkcio de UK)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Angla (UK, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Angla (UK, internacia Macintosh)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Angla (UK, Colemak)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Uzbeka"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Uzbeka (Latina)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Vjetnama"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Korea"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Korea (kongrua al 101/104 klavoj)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japana (Serio PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irlanda"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irlanda (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogamo"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogamo (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Urdua (Pakistano)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdua (Pakistano, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdua (Pakistano, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Araba (Pakistano)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sinda"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Mahla"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Angla (Sud-Afriko)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (translokitaj punktokomo kaj citilo, malaktuale)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Nepala"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Angla (Niĝerio)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Joruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amhara"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Volofa"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Brajla"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Brajla (maldekstra mano)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Brajla (dekstra mano)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turkmena"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turkmena (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Franca (Malio, alternativa)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Angla (Malio , usona Macintosh)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Angla (Malio, usona internacia)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Svahila (Tanzanio)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Svahila (Kenjo)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Cvana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Filipina"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipina (QWERTY, Baybayin)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipina (Capewell-Dvorako, Latina)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipina (Capewell-Dvorako, Baybayin)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipina (Capewell-QWERF 2006, Latina)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipina (Capewell-QWERF 2006, Baybayin)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Filipina (Colemak, latina)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipina (Colemak, Baybayin)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Filipina (Dvorako, latina)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipina (Dvorako Baybayin)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Moldava"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Moldava (Gagauz)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Klavo(j) por ŝanĝi la aranĝon"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Dekstra Alt (dum premata)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Maldekstra Alt (dum premata)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Maldekstra Win (dum premata)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Dekstra Win (dum premata)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Iu ajn Win-klavo (dum premata)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (dum premata), Alt+Caps Lock restarigas la originalan uskligon"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Dekstra Ctrl (dum premata)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Dekstra Alt"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Maldekstra Alt"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (al la unua aranĝo), Shift+Caps Lock (al la lasta aranĝo)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Maldekstra Win (al la unua aranĝo), dekstra Win/Menu (al la lasta aranĝo)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Maldekstra Ctrl (por la unua aranĝo), dekstra Ctrl (por la lasta aranĝo)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Ambaŭ klavoj Shift kune"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Ambaŭ klavoj Alt kune"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Ambaŭ klavoj Ctrl kune"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Maldekstra Ctrl+maldekstra Shift"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Dekstra Ctrl+dekstra Shift"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Maldekstra Alt+maldekstra Shift"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Space"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Maldekstra Win"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Dekstra Win"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Maldekstra Shift"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Dekstra Shift"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Maldekstra Ctrl"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Dekstra Ctrl"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Ruluma Baskulo"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Maldekstra Ctrl + dekstra Win (por la unua aranĝo), dekstra Ctrl + Menu (por la dua aranĝo)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Klavo por elekti 3-an nivelon"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Iu ajn Win-klavo"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Iu ajn klavo Alt"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Dekstra Alt, Shift+dekstra Alt estas Multi_Key"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Dekstra Alt neniam elektas la 3-an nivelon"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Enen-klavo en ciferklavaro"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Retroklino"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Malpli-signo/Pli-signo&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Retroklino elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Malpli-signo/Pli-signo&gt; elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Pozicio de la klavo Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock kiel Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Maldekstra Ctrl kiel Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Permuti Ctrl kaj Caps Lock"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Maldekstre de 'A'"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "Malsupre maldekstre"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Dekstra Ctrl kiel dekstran Alt"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menu kiel dekstran Ctrl"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Dekstra Alt kiel dekstran Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Uzi la LED de klavaro por indiki alternativan aranĝon"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Elektado de aranĝo por la ciferklavaro"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Malmoderna"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj). Operaci-simboloj en la implicita nivelo."
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Malmoderna Wang 724"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 ciferklavaro kun Unikodaj aldonoj (sagoj kaj operaci-simboloj)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Wang 724 ciferklavaro kun Unikodaj aldonoj (sagoj kaj operaci-simboloj). Operaci-simboloj en la apriora nivelo"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Deksesume"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "ATM/telefon-stilo"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Funkciado de la forig-klavo de la ciferklavaro"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Malmoderna klavo kun punkto"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Malmoderna klavo kun komo"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Kvar-nivela klavo kun punkto"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Kvar-nivela klavo kun punkto, limigite al latin-9"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Kvar-nivela klavo kun komo"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Kvar-nivela klavo kun 'momayyez'"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Kvar-nivela klavo kun abstraktaj apartigiloj"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Punkto-komo ĉe la 3-a nivelo"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Funkciado de la klavo Caps Lock"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock uzas internan uskligon. Shift \"paŭzigas\" Caps Lock"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Caps Lock uzas internan uskligon. Shift ne influas Cap sLock"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock funkcias kiel Shift kun ŝlosado. Shift \"paŭzigas\" Caps Lock"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Caps Lock funkcias kiel Shift kun ŝlosado. Shift ne influas Caps Lock"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock alternigas la ordinaran uskligon de alfabetaj signoj"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Igi Caps Lock kroman Num Lock"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Permuti ESC kaj Caps Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Igi Caps Lock kroman ESC"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Igi Caps Lock kroman Retroklavon"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Igi Caps Lock kroman Super"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Igi Caps Lock kroman Hyper"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Caps Lock alternigas Shift, influante ĉiujn klavojn"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Caps Lock estas malebligita"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Igi Caps Lock kroman Control sed teni la simbolklavon Caps_Lock (keysym)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Alt/Win, klava funkciado"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Aldoni laŭnorman funkciadon al la klavo Menu"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt kaj Meta estas ĉe la klavoj Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt estas mapita al Win-klavoj (kaj al la kutimaj klavoj Alt)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control estas mapita al Win-klavoj (kaj al la kutimaj klavoj Ctrl)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control estas mapita al klavoj Alt, Alt estas mapita al Win-klavoj"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta estas mapita al la Win-klavoj"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta estas mapita al la maldekstra Win"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper estas mapita al la Win-klavoj"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt estas mapita al la dekstra Win-klavo kaj Super al Menu"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Alt estas permutita kun Win"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Pozicio de la klavo Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "3-a nivelo de maldekstra Win"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "3-a nivelo de dekstra Win"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "3-a nivelo de Menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "3-a nivelo de maldekstra Ctrl"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "3-a nivelo de dekstra Ctrl"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "3-a nivelo de Caps Lock"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "3-a nivelo de &lt;Malpli/Pli-signo&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Paŭzo"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Ceteraj kongruaj opcioj"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Implicitaj ciferoj en cifer-klavaro"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "La klavoj de la ciferklavaro ĉiam enigas ciferojn (kiel en Macintosh)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Shift kun la ciferklavaro funkcias same kiel en MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift ne nuligas Num Lock, elektas 3-an nivelon anstataŭe"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Specialaj klavoj (Ctrl+Alt+&lt;klavo&gt;) traktotaj en servilo"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: ŝajnigi klavojn de PC (Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Shift nuligas Caps Lock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Ebligi kromajn tipografiajn signojn"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Ambaŭ klavoj Shift kune alternigas Caps Lock"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Ambaŭ klavoj Shift kune aktivigas Caps Lock, unu klavo Shift malaktivigas"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Ambaŭ klavoj Shift kune alternigas ShiftLock"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Alternigi Mus-Klavojn per Shift + NumLock."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Permesi rompi ŝlosojn per klavaraj agoj (averto: sekureca risko)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Aldonado de valut-signoj al iuj klavoj"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "EŭroSigno ĉe E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "EŭroSigno ĉe 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "EŭroSigno ĉe 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "EŭroSigno ĉe 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Rupio ĉe 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Klavo por elekti 5-an nivelon"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Malpli-signo/Pli-signo&gt; elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Dekstra Alt elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Maldekstra Win elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Dekstra Win elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Uzado de spac-klavo por enmeti ne-rompeblan spaco-signon"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Kutima spaco-signo ĉe iu ajn nivelo"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Ne-rompebla spaco-signo ĉe la 2-a nivelo"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo, nenio ĉe la 4-a nivelo"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo, maldika ne-rompebla spaco-signo ĉe la 4-a nivelo"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo, maldika ne-rompebla spaco-signo ĉe la 6-a nivelo"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo, maldika ne-rompebla spaco-signo ĉe la 6-a nivelo (per Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Nul-larĝa ne-kuniga signo ĉe dua nivelo"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, nul-larĝa kuniga signo ĉe la tria nivelo"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, nul-larĝa kuniga signo ĉe la tria nivelo, ne-rompebla spaco-signo ĉe la kvara nivelo"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, nenio ĉe la kvara nivelo"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, nul-larĝa kuniga signo ĉe la kvara nivelo"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, maldika ne-rompebla spaco-signo ĉe la kvara nivelo"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Nul-larĝa ne-kuniga signo ĉe la tria nivelo, nul-larĝa kuniga signo ĉe la kvara nivelo"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Elektebloj de japana klavaro"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Kanaa klavo Lock ŝlosigas"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Retropaŝo laŭ estilo NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Igi Zenkaku Hankaku kroman ESC"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Aldonado de Esperantaj supersignoj"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Al la ekvivalenta klavo en klavaro Qwerty."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Al la ekvivalenta klavo en dvoraka klavaro."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Teni klav-kongrueco kun malnovaj klavkodoj de Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Kongrueco kun klavoj de Sun"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Klav-sekvo por formortigi la X-servilon"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Backspace"
@@ -3998,7 +4038,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belga (Sun Tipo 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugala (Brazilo, Sun Tipo 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4065,10 +4105,6 @@ msgstr "Hispana (Sun Tipo 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Sveda (Sun Tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr ">Germana (Svislando)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Germana (Svislando, Sun Tipo 6/7)"
@@ -4093,6 +4129,9 @@ msgstr "Angla (UK, Sun Tipo 6/7)"
msgid "Korean (Sun Type 6/7)"
msgstr "Kore (Sun Tipo 6/7)"
+#~ msgid ">German (Switzerland)"
+#~ msgstr ">Germana (Svislando)"
+
#~ msgid "ca"
#~ msgstr "ca"
@@ -4144,9 +4183,6 @@ msgstr "Kore (Sun Tipo 6/7)"
#~ msgid "Make Caps Lock an additional Ctrl"
#~ msgstr "Igi Caps Lock kroman Ctrl"
-#~ msgid "Meta on Left Ctrl"
-#~ msgstr "Meta ĉe maldekstra Ctrl"
-
#~ msgid "Right Ctrl is mapped to Menu"
#~ msgstr "Dekstra Ctrl estas mapita al Menu"
diff --git a/xorg-server/xkeyboard-config/po/fr.po b/xorg-server/xkeyboard-config/po/fr.po
index d551584f7..dc9c0121a 100644
--- a/xorg-server/xkeyboard-config/po/fr.po
+++ b/xorg-server/xkeyboard-config/po/fr.po
@@ -9,10 +9,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.7.99\n"
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-22 00:43+0100\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-22 07:49+0200\n"
"Last-Translator: Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir.org>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -1870,2084 +1870,2125 @@ msgstr "Allemand (accents aigu et grave en touches mortes)"
msgid "German (eliminate dead keys)"
msgstr "Allemand (sans touche morte)"
+# https://de.wikipedia.org/wiki/ISO/IEC_9995
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Allemand (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Roumain (Allemagne)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Roumain (Allemagne, sans touche morte)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Allemand (Dvorak)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Allemand (touches mortes Sun)"
# https://secure.wikimedia.org/wikipedia/en/wiki/Keyboard_layout#Neo
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Allemand (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Allemand (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Allemand (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Bas-sorabe"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Bas-sorabe
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Bas-sorabe (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Allemand (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Russe (Allemagne, phonétique)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Grec"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Grec (simple)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Grec (étendu)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Grec (sans touche morte)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Diacritiques_de_l%27alphabet_grec
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Grec (polytonique)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Hongrois
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Hongrois"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Hongrois (standard)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Hongrois (sans touche morte)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Hongrois (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hongrois (101, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hongrois (101, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hongrois (101, qwertz, point, touches mortes)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hongrois (101, qwertz, point, sans touche morte)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hongrois (101, qwerty, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hongrois (101, qwerty, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hongrois (101, qwerty, point, touches mortes)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hongrois (101, qwerty, point, sans touche morte)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hongrois (102, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hongrois (102, qwertz, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hongrois (102, qwertz, point, touches mortes)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hongrois (102, qwertz, point, sans touche morte)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hongrois (102, qwerty, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hongrois (102, qwerty, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hongrois (102, qwerty, point, touches mortes)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hongrois (102, qwerty, point, sans touche morte)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Islandais
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Islandais"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Islandais (touches mortes Sun)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandais (sans touche morte)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Islandais (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Islandais (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hébreu"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hébreu (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hébreu (phonétique)"
# http://wiki.jewishliturgy.org/Hebrew_Font_and_Keyboard_Layout_Setup
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hébreu (biblique, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Italien"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Italien (sans touche morte)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Italien (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italien (clavier US avec lettres italiennes)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Géorgien (Italie)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Italien (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japonais"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japonais (Kana)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japonais (Kana 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japonais (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japonais (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japonais (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kirghize_%28langue%29
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirghize"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirghize (phonétique)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Khmer
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Khmer (Cambodge)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kazakh"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakhstan
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russe (Kazakhstan, avec kazakh)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kazakh (avec russe)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Lao_%28langue%29
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Lao"
# STEA = Agence pour la science, la technologie et l'environnement.
# http://www.clear-vu.com.hk/resources/lao_keyboard.asp
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (disposition proposée par la STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Espagnol (Amérique latine)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Espagnol (Amérique latine, sans touche morte)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Espagnol (Amérique latine, y compris la touche morte tilde)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Espagnol (Amérique latine, touches mortes Sun)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Lituanien
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Lituanien"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Lituanien (standard)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituanien (clavier US avec lettres lituaniennes)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituanien (IBM LST 1205-92)"
# http://lekp.info/LithuanianErgonomic
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Lituanien (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Lituanien (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Letton"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Letton (variante apostrophe)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Letton (variante tilde)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Letton (variante F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Letton (moderne)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letton (ergonomique, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Letton (adapté)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mont%C3%A9n%C3%A9grin
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Monténégrin"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Monténégrin (cyrillique)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Monténégrin (cyrillique, Z et ZHE intervertis)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Monténégrin (Unicode latin)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Monténégrin (qwerty latin)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Monténégrin (qwerty Unicode latin)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Monténégrin (cyrillique avec guillemets)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Monténégrin (latin avec guillemets)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mac%C3%A9donien
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Macédonien"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Macédonien (sans touche morte)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Maltais
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Maltais"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Maltais (avec disposition US)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mongol
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Norv%C3%A9gien
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Norvégien"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Norvégien (sans touche morte)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Norvégien (Dvorak)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Sami du Nord (Norvège)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Sami du Nord (Norvège, sans touche morte)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Norvégien (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norvégien (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Norvégien (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Polonais
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Polonais"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Polonais (obsolète)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Polonais (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Polonais (Dvorak)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Disposition_Dvorak
#
# Sur le clavier Dvorak, les guillemets sont sur une seule et même touche.
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polonais (Dvorak, guillemets polonais sur la touche guillemets)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polonais (Dvorak, guillemets polonais sur le « 1 »)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Cachoube
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Cachoube"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russe (Pologne, Dvorak phonétique)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Polonais (Dvorak pour le programmeur)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portugais"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugais (sans touche morte)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portugais (touches mortes Sun)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portugais (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugais (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugais (Macintosh, touches mortes Sun)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portugais (PT-Nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portugais (PT-Nativo pour claviers US)"
# http://tecladobrasileiro.com.br/index.php?option=com_content&task=view&id=20&Itemid=62
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Espéranto (Portugal, PT-Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Roumain
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Roumain"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Roumain (cédille)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Roumain (standard)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Roumain (standard, cédille)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Roumain (touche Windows)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Russe"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Russe (phonétique)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Russe (phonétique, touches Windows)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Russe (machine à écrire)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Russe (obsolète)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Russe (machine à écrire, obsolète)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Ossète (obsolète)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Ossète (touches Windows)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Chuvash"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tchouvache
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Tchouvache (latin)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Oudmourte"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Komi_%28langue%29
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komi"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Iakoute
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Iakute"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Russe (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Russe (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serbe (Russe)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Bachkir
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Bachkir"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mari_%28langue%29
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serbe"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serbe (cyrillique, Z et ZHE intervertis)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serbe (Latin)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serbe (latin, Unicode)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serbe (latin, qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbe (latin, Unicode, qwerty)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbe (cyrillique avec guillemets)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serbe (Latin avec guillemets)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Ruthène pannonien (homophonique)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Slov%C3%A8ne
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Slovène"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Slovène (utilise des guillemets typographiques au lieu des guillemets simples)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovène (clavier US avec lettres slovènes)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Slovaque
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Slovaque"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Slovaque (barre oblique inverse étendue)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Slovaque (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovaque (qwerty, barre oblique inverse étendue)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Espagnol"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Espagnol (sans touche morte)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Espagnol (y compris la touche morte tilde)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Espagnol (touches mortes Sun)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Espagnol (Dvorak)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturien (Espagne, avec H point bas et L point bas)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalan (Espagne, avec L point médian)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Espagnol (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Su%C3%A9dois
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Suédois"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Suédois (sans touche morte)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Suédois (Dvorak)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Russe (Suède, phonétique)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russe (Suède, phonétique, sans touche morte)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Sami du Nord (Suède)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Suédois (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Suédois (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Langue des signes suédoise"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Allemand (Suisse)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Allemand (Suisse, obsolète)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Allemand (Suisse, sans touche morte)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Allemand (Suisse, touches mortes Sun)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Français (Suisse)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Français (Suisse, sans touche morte)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Français (Suisse, touches mortes Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Français (Suisse, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Allemand (Suisse, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Arabe (Syrie)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Syriaque
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Syriaque"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Syriaque (phonétique)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurde (Syrie, Q latin)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurde (Syrie, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurde (Syrie, Alt-Q latin)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tadjik
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Tadjik"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Tadjik (obsolète)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Cingalais (phonétique)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamoul (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamoul (Sri Lanka, machine à écrire, TAB)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tha%C3%AF_%28langue%29
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Thaï"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Thaï (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Thaï (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Turc
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Turc"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Turc (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Turc (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Turc (touches mortes Sun)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurde (Turquie, Q latin)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurde (Turquie, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurde (Turquie, Alt-Q latin)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Turc (international avec touches mortes)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tatar de Crimée (Q turc)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Tatar de Crimée (F turc)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tatar de Crimée (Alt-Q turc)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Taïwanais"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Taïwanais (indigène)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taïwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ukrainien
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ukrainien"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ukrainien (phonétique)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ukrainien (machine à écrire)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainien (touches Windows)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ukrainien (obsolète)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainien (RSTU standard)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russe (Ukraine, RSTU standard)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ukrainien (homophonique)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Anglais (Royaume-Uni)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Anglais (Royaume-Uni, touche Windows étendue)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Anglais (Royaume-Uni, international, avec touches mortes)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Anglais (Royaume-Uni, Dvorak)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Anglais (Royaume-Uni, Dvorak, ponctuation britannique)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Anglais (Royaume-Uni, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Anglais (Royaume-Uni, Macintosh international)"
# http://colemak.com/
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Anglais (Royaume-Uni, Colemak)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ouzbek
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Ouzbek"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Ouzbek (latin)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Vietnamien"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Coréen"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Coréen (compatible 101/104 touches)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japonais (PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irlandais"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "Cló Gaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irlandais (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ourdou
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Ourdou (Pakistan)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Ourdou (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Ourdou (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Arabe (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Sindhi
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sindhî"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Divehi"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Anglais (Afrique du Sud)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Espéranto"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Espéranto (point-virgule et guillemets simples déplacés, obsolète)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
# https://secure.wikimedia.org/wikipedia/fr/wiki/N%C3%A9palais
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Népalais"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Anglais (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Igbo
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Yoruba
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amharique"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Wolof_%28langue%29
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Braille (main gauche)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Braille (main droite)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Turkm%C3%A8ne
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turkmène"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turkmène (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Français (Mali, variante)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Anglais (Mali, Macintosh USA)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Anglais (Mali, USA international)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzanie)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Swahili
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenya)"
# Langue bantoue.
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kikuyu_%28langue%29
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tswana
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Filipino"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (baybayin, qwerty)"
# http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipino (Capewell-Dvorak, latin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipino (Capewell-Dvorak, baybayin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipino (Capewell-QWERF 2006, latin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipino (Capewell-QWERF 2006, baybayin)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Filipino (Colemak, latin)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipino (Colemak, baybayin)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Filipino (Dvorak, latin)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Baybayin
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipino (Dvorak, baybayin)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Moldave"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
# https://fr.wikipedia.org/wiki/Gagaouze
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Moldave (Gagaouze)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Touches modifiant la disposition du clavier"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Alt droite (si enfoncé)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Alt gauche (si enfoncé)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Windows gauche (si enfoncé)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Windows droite (si enfoncé)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "N'importe quelle touche Windows (enfoncée)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Verr. maj. (si enfoncé), Alt+Verr. maj. joue le rôle original de Verr. maj."
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl droite (si enfoncé)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Alt droite"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Alt gauche"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Verr. maj."
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Maj.+ Verr. maj."
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Verr. maj. (première disposition), Maj.+Verr. maj. (dernière disposition)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Touche Windows gauche (première disposition), touche Windows droite (dernière disposition)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl gauche (première disposition), Ctrl droit (dernière disposition)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Verr. maj."
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Les deux Maj. ensemble"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Les deux Alt ensemble"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Les deux Ctrl ensemble"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Maj."
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl gauche+Maj. gauche"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl droite + Maj. droite"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Maj."
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Alt gauche+Maj. gauche"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Espace"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Touche Windows gauche"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Windows droite"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Maj. gauche"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Maj. droite"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Ctrl gauche"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
-msgstr "Crtl droite"
+msgstr "Ctrl droite"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Arrêt défilement"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl gauche + Windows gauche (première disposition), Ctrl droit + Menu (seconde disposition)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Touche sélectionnant le niveau 3"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "N'importe quelle touche Windows"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "N'importe quelle touche Alt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Touche_compose
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Alt droite, Maj.+Alt droite est une touche compose (Multi_Key)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Alt droite ne sélectionne jamais le niveau 3"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Entrée sur le pavé numérique"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Barre oblique inverse"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Plus petit/Plus grand&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Verr. maj. sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "La barre oblique inverse sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Position de la touche Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Verr. maj. comme Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Ctrl gauche comme Méta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Intervertir Ctrl et Verr. maj."
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "À gauche du « A »"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "En bas à gauche"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl droite comme Alt droite"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
-msgstr "Menu comme Crtl droite"
+msgstr "Menu comme Ctrl droite"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Alt droite comme Ctrl droite"
# https://bugzilla.gnome.org/show_bug.cgi?id=518156
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Utiliser les voyants du clavier pour indiquer une disposition alternative"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Verr. Num."
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Disposition du pavé numérique"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Obsolète"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Ajouts Unicode (opérateurs mathématiques et flèches)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Ajouts Unicode (opérateurs mathématiques et flèches). Les opérateurs mathématiques se trouvent au niveau par défaut"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Wang 724 (clavier obsolète)"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches). Les opérateurs mathématiques se trouvent au niveau par défaut"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Hexadécimal"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "Clavier de type téléphonique"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Comportement de la touche de Suppr. du pavé numérique"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Touche obsolète avec point"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Touche obsolète avec virgule"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Touche à quatre niveaux avec point"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Touche à quatre niveaux avec point, latin-9 uniquement"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Touche à quatre niveaux avec virgule"
# Le momayyez est le séparateur décimal perse.
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Touche à quatre niveaux avec le séparateur décimal momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Touche à quatre niveaux avec le séparateur décimal abstrait"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Point-virgule au niveau 3"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Comportement de la touche Verr. maj."
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Verr. maj. utilise la mise en majuscule interne. Maj. annule temporairement Verr. maj."
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Verr. maj. utilise la mise en majuscule interne. Maj. n'a pas d'effet sur Verr. maj."
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Verr. maj. agit comme un verrouillage de maj. Maj. l'annule temporairement"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Verr. maj. agit comme maj. quand il est verrouillé. Maj. n'a pas d'effet sur verr. Maj."
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Verr. maj. active ou désactive la mise en majuscule usuelle des caractères alphabétiques"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Faire de Verr. maj. un Verr. Num. supplémentaire"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Intervertir Échap. et Verr. maj."
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Faire de Verr. maj. un Échap. supplémentaire."
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Faire de Verr. maj. un Effacement. arriière supplémentaire."
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Faire de Verr. maj. un Super supplémentaire."
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Faire de Verr. maj. un Hyper supplémentaire"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Verr. maj. active ou désactive maj., ce qui affecte toutes les touches"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Verr. maj. est désactivé"
# http://www.x.org/wiki/KeySyms
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Faire de Verr. maj. un Contrôle supplémentaire, mais garder le même nom symbolique (Caps_Lock)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Comportement des touches Alt et Windows"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Ajouter du comportement standard à la touche Menu"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt et Meta sont sur les touches Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt est placé sur les touches Windows (et les touches Alt habituelles)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl est placé sur les touches Windows (et les touches Ctrl habituelles)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl est placé sur les touches Alt, Alt sur les touches Windows"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Méta est placé sur les touches Windows"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Méta est placé sur Windows gauche"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper est placé sur les touches Windows"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt est placé sur Windows droite, Super sur Menu"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Alt échangé avec Windows"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Position de la touche Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "Niveau 3 de la touche Windows de gauche"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "Niveau 3 de la touche Windows de droite"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Niveau 3 de menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "Niveau 3 de la touche Ctrl de gauche"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "Niveau 3 de la touche Ctrl de droite"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Niveau 3 de Verr. Maj."
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Niveau 3 de &lt;Plus petit/Plus grand&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "Impr. Écr."
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Diverses options de compatibilité"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Touches du pavé numérique par défaut"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Les touches du pavé numérique sont toujours numériques (comme sur Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Maj. avec le pavé numérique se comporte comme dans Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Maj. n'annule pas Verr. maj., mais sélectionne le niveau 3"
# https://help.ubuntu.com/7.04/user-guide/C/prefs-hardware.html
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Les combinaisons spéciales (Ctrl+Alt+&lt;touche&gt;) sont traitées par le serveur X"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Clavier aluminium Apple : émulation des touches PC (Impr. écr. ; défil. ; pause ; Verr. Num.)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Maj. annule Verr. maj."
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Active des caractères typographiques supplémentaires"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Les deux touches Maj. activent ou désactivent Verr. maj."
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Les deux touches majuscule activent le verrouillage majuscule, une le désactive"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Les deux touches Maj. activent ou désactivent le blocage majuscule"
# http://who-t.blogspot.com/2010/11/xkb-mouse-emulation-removed-from.html
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Active ou désactive le contrôle de la souris (PointerKeys) avec Maj. + Verr. num."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Autoriser des actions clavier à casser les captures (attention : faille de sécurité)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Ajout des signes monétaires sur certaines touches"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Euro sur le E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Euro sur le 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Euro sur le 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Euro sur le 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Roupie sur le 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Touche sélectionnant le niveau 5"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Windows gauche sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Windows droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur du niveau 5"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Utiliser la barre d'espacement pour insérer une espace insécable"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "L'espace habituelle quelque-soit le niveau"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Espace insécable au niveau 2"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Espace insécable au niveau 3"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Espace insécable au niveau 3, rien au niveau 4"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Espace insécable au niveau 3, espace fine insécable au niveau 4"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Espace insécable au niveau 4"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6 (via Ctrl+Maj.)"
# http://hapax.qc.ca/glossaire.htm
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Antiliant à chasse nulle au niveau 2"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3, espace insécable au niveau 4"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, rien au niveau 4"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, liant à chasse nulle au niveau 4"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, espace fine insécable au niveau 4"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Antiliant à chasse nulle au niveau 3, liant à chasse nulle au niveau 4"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Options des claviers japonais"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "La touche « verrouillage Kana » verrouille"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Eff. Arr. du type NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Faire du Zenkaku Hankaku un Échap. supplémentaire."
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Ajout de l'accent circonflexe espéranto (supersigno)"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Vers la touche correspondante sur un clavier qwerty."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Vers la touche correspondante sur un clavier Dvorak."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Rester compatible avec les anciens code clavier Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Compatibilité avec les touches Sun"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Séquence de touches pour tuer le serveur X"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Eff. arrière"
@@ -4118,7 +4159,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belge (Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugais (Brésil, Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4185,10 +4226,6 @@ msgstr "Espagnol (Sun type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Suédois (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr "Allemand (Suisse)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Allemand (Suisse, Sun type 6/7)"
@@ -4212,3 +4249,6 @@ msgstr "Anglais (Royaume-Uni, Sun type 6/7)"
#: ../rules/base.extras.xml.in.h:128
msgid "Korean (Sun Type 6/7)"
msgstr "Coréen (Sun type 6/7)"
+
+#~ msgid ">German (Switzerland)"
+#~ msgstr "Allemand (Suisse)"
diff --git a/xorg-server/xkeyboard-config/po/ja.po b/xorg-server/xkeyboard-config/po/ja.po
index aa27a6676..1389fabdc 100644
--- a/xorg-server/xkeyboard-config/po/ja.po
+++ b/xorg-server/xkeyboard-config/po/ja.po
@@ -1,3853 +1,4186 @@
# Japanese messages for xkeyboard-config
-# Copyright (C) 2011 Translation Project Japanese Team
+# Copyright (C) 2011, 2013 Translation Project Japanese Team
# This file is distributed under the same license as the xkeyboard-config package.
# Yasuaki Taniguchi <yasuakit@gmail.com>, 2011.
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2013.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.3.99\n"
+"Project-Id-Version: xkeyboard-config 2.7.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-09-15 21:25+0100\n"
-"PO-Revision-Date: 2011-09-19 00:12+0900\n"
-"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 23:47+0000\n"
+"PO-Revision-Date: 2013-02-06 23:44+0900\n"
+"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"\n"
+"X-Generator: Poedit 1.5.4\n"
#: ../rules/base.xml.in.h:1
-msgid "&lt;Less/Greater&gt;"
-msgstr "&lt;Less/Greater&gt;"
+msgid "Generic 101-key PC"
+msgstr "標準 101 キー PC"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
-msgstr "&lt;Less/Greater&gt; (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+msgid "Generic 102-key (Intl) PC"
+msgstr "標準 102 キー (国際) PC"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr ""
+msgid "Generic 104-key PC"
+msgstr "標準 104 キー PC"
#: ../rules/base.xml.in.h:4
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Less/Greater&gt; で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+msgid "Generic 105-key (Intl) PC"
+msgstr "標準 105 キー (国際) PC"
#: ../rules/base.xml.in.h:5
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Less/Greater&gt; で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する。固定を解除する場合は第5層を選択するキーのいずれかを押す"
+msgid "Dell 101-key PC"
+msgstr "Dell 101キー PC"
#: ../rules/base.xml.in.h:6
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Dell Latitude series laptop"
+msgstr "Dell Latitude シリーズラップトップ"
#: ../rules/base.xml.in.h:7
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:8
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech ワイヤレスデスクトップ RFKB-23"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:9
-msgid "ATM/phone-style"
-msgstr "ATM/電話形式"
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
#: ../rules/base.xml.in.h:10
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:11
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:12
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Winbook Model XP5"
+msgstr "Winbook モデル XP5"
#: ../rules/base.xml.in.h:13
-msgid "Acer Laptop"
-msgstr "Acer ラップトップ"
+msgid "PC-98xx Series"
+msgstr "PC-98xx シリーズ"
#: ../rules/base.xml.in.h:14
-msgid "Add the standard behavior to Menu key"
-msgstr "Menu キーに標準動作を追加する"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:15
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "エスペラント語 circumflexe (supersigno) の追加"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:16
-msgid "Adding currency signs to certain keys"
-msgstr "通貨記号を特定のキーに追加割り当て"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech ワイヤレスデスクトップ RFKB-23"
#: ../rules/base.xml.in.h:17
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
-# アフガニスタンの通貨はアフガニだが、言語については要調査
#: ../rules/base.xml.in.h:18
-msgid "Afghani"
-msgstr ""
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 ワイヤレスインターネットキーボード"
-# アカン語? ISO コードと合わせる必要があり
#: ../rules/base.xml.in.h:19
-msgid "Akan"
-msgstr ""
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:20
-msgid "Albanian"
-msgstr "アルバニア語"
+msgid "Brother Internet Keyboard"
+msgstr "Brother インターネットキーボード"
#: ../rules/base.xml.in.h:21
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt と Meta を Alt キーに割り当てる"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF マルチメディア"
#: ../rules/base.xml.in.h:22
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt を右 Win キーに、Super を Menu に割り当てる"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:23
-msgid "Alt+Caps Lock"
-msgstr "Alt+Caps Lock"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:24
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:25
-msgid "Alt+Shift"
-msgstr "Alt+Shift"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:26
-msgid "Alt+Space"
-msgstr "Alt+Space"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:27
-msgid "Alt/Win key behavior"
-msgstr "Alt/Win キーの動作"
+msgid "BTC 5090"
+msgstr "BTC 5090"
-# ISO 639 より
#: ../rules/base.xml.in.h:28
-msgid "Amharic"
-msgstr "アムハラ語"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:29
-msgid "Any Alt key"
-msgstr "いずれかの Alt キー"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini ワイヤレスインターネット・ゲーミング"
#: ../rules/base.xml.in.h:30
-msgid "Any Win key"
-msgstr "いずれかの Win キー"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:31
-msgid "Any Win key (while pressed)"
-msgstr "いずれかの Win キー (押している間)"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:32
-msgid "Apple"
-msgstr "Apple"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (alternate option)"
#: ../rules/base.xml.in.h:33
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apple アルミニウムキーボード (ANSI)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:34
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apple アルミニウムキーボード (ISO)"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:35
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apple アルミニウムキーボード (JIS)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:36
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apple アルミニウムキーボード: PC キーエミュレート (Print, Scroll Lock, Pause, Num Lock)"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony インターネットキーボード"
#: ../rules/base.xml.in.h:37
-msgid "Apple Laptop"
-msgstr "Apple ラップトップ"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:38
-msgid "Arabic"
-msgstr "アラビア語"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:39
-msgid "Arabic (Buckwalter)"
-msgstr "アラビア語 (Buckwalter)"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:40
-msgid "Arabic (Morocco)"
-msgstr "アラビア語 (モロッコ)"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access キーボード"
#: ../rules/base.xml.in.h:41
-msgid "Arabic (Pakistan)"
-msgstr "アラビア語 (パキスタン)"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq インターネットキーボード (7 キー)"
#: ../rules/base.xml.in.h:42
-msgid "Arabic (Syria)"
-msgstr "アラビア語 (シリア)"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq インターネットキーボード (13 キー)"
#: ../rules/base.xml.in.h:43
-msgid "Arabic (azerty)"
-msgstr "アラビア語 (azerty)"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq インターネットキーボード (18 キー)"
#: ../rules/base.xml.in.h:44
-msgid "Arabic (azerty/digits)"
-msgstr "アラビア語 (azerty/数字キー)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:45
-msgid "Arabic (digits)"
-msgstr "アラビア語 (数字キー)"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "ラップトップ/ノートブック Compaq (Armada等) ラップトップキーボード"
#: ../rules/base.xml.in.h:46
-msgid "Arabic (qwerty)"
-msgstr "アラビア語 (qwerty)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "ラップトップ/ノートブック Compaq (Presario等) インターネットキーボード"
#: ../rules/base.xml.in.h:47
-msgid "Arabic (qwerty/digits)"
-msgstr "アラビア語 (qwerty/数字キー)"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq キーボード"
-#: ../rules/base.xml.in.h:48 ../rules/base.extras.xml.in.h:2
-msgid "Armenian"
-msgstr "アルメニア語"
+#: ../rules/base.xml.in.h:48
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:49
-msgid "Armenian (alternative eastern)"
-msgstr "アルメニア語 (代替、東方)"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:50
-msgid "Armenian (alternative phonetic)"
-msgstr "アルメニア語 (代替、表音)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:51
-msgid "Armenian (eastern)"
-msgstr "アルメニア語 (東方)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB マルチメディアキーボード"
#: ../rules/base.xml.in.h:52
-msgid "Armenian (phonetic)"
-msgstr "アルメニア語 (表音)"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell ラップトップ/ノートブック Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:53
-msgid "Armenian (western)"
-msgstr "アルメニア語 (西方)"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell ラップトップ/ノートブック Precision M series"
-# スペインのアストゥリアス地方だが、言語は? ISOコードを要調査
#: ../rules/base.xml.in.h:54
-msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
-msgstr ""
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa ワイヤレスデスクトップキーボード"
#: ../rules/base.xml.in.h:55
-msgid "Asus Laptop"
-msgstr "Asus ラップトップ"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801 / 9802 シリーズ"
#: ../rules/base.xml.in.h:56
-msgid "At bottom left"
-msgstr "左下"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:57
-msgid "At left of 'A'"
-msgstr "'A' の左側"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:58
-msgid "Avatime"
-msgstr ""
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO ラップトップ"
#: ../rules/base.xml.in.h:59
-msgid "Azerbaijani"
-msgstr "アゼルバイジャン語"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM キーボード KWD-910"
#: ../rules/base.xml.in.h:60
-msgid "Azerbaijani (Cyrillic)"
-msgstr "アゼルバイジャン語 (キリル文字)"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:61
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 ワイヤレスインターネットキーボード"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:62
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:63
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF マルチメディア"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:64
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:65
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:66
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:67
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech 標準キーボード"
#: ../rules/base.xml.in.h:68
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15、G15daemon による追加キー"
#: ../rules/base.xml.in.h:69
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard インターネットキーボード"
#: ../rules/base.xml.in.h:70
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini ワイヤレスインターネット・ゲーミング"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x マルチメディアキーボード"
#: ../rules/base.xml.in.h:71
-msgid "Backslash"
-msgstr "Backslash"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:72
-msgid "Backslash (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
-msgstr "Backslash (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:73
-msgid "Bambara"
-msgstr "バンバラ語"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:74
-msgid "Bashkirian"
-msgstr ""
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:75
-msgid "Belarusian"
-msgstr "ベラルーシ語"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:76
-msgid "Belarusian (Latin)"
-msgstr "ベラルーシ語 (ラテン)"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:77
-msgid "Belarusian (legacy)"
-msgstr "ベラルーシ語 (legacy)"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:78
-msgid "Belgian"
-msgstr "ベルギー語"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:79
-msgid "Belgian (ISO alternate)"
-msgstr "ベルギー語 (ISO 代替)"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:80
-msgid "Belgian (Sun dead keys)"
-msgstr "ベルギー語 (Sun デッドキー付き)"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:81
-msgid "Belgian (Wang model 724 azerty)"
-msgstr "ベルギー語 (Wang モデル 724 azerty)"
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 ノートブック"
#: ../rules/base.xml.in.h:82
-msgid "Belgian (alternative)"
-msgstr "ベルギー語 (代替)"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:83
-msgid "Belgian (alternative, Sun dead keys)"
-msgstr "ベルギー語 (代替、Sun デッドキー付き)"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:84
-msgid "Belgian (alternative, latin-9 only)"
-msgstr "ベルギー語 (代替、latin-9 のみ)"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:85
-msgid "Belgian (eliminate dead keys)"
-msgstr "ベルギー語 (デッドキー無し)"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:86
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:87
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:88
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access キーボード"
#: ../rules/base.xml.in.h:89
-msgid "Bengali"
-msgstr "ベンガル語"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech コードレスデスクトップ LX-300"
#: ../rules/base.xml.in.h:90
-msgid "Bengali (Baishakhi Inscript)"
-msgstr "ベンガル語 (Baishakhi Inscript)"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech インターネット 350 キーボード"
#: ../rules/base.xml.in.h:91
-msgid "Bengali (Baishakhi)"
-msgstr "ベンガル語 (Baishakhi)"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite キーボード"
#: ../rules/base.xml.in.h:92
-msgid "Bengali (Bornona)"
-msgstr "ベンガル語 (Bornona)"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech コードレスデスクトップ"
#: ../rules/base.xml.in.h:93
-msgid "Bengali (Probhat)"
-msgstr "ベンガル語 (Probhat)"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech コードレスデスクトップ iTouch"
#: ../rules/base.xml.in.h:94
-msgid "Bengali (Uni Gitanjali)"
-msgstr "ベンガル語 (Uni Gitanjali)"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech コードレスデスクトップナビゲーター"
-# ベルベル語? ISO 639 ではベルベル諸語となっている
-# 出典確認
#: ../rules/base.xml.in.h:95
-msgid "Berber (Morocco, Tifinagh alternative phonetic)"
-msgstr ""
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech コードレスデスクトップ Optical"
#: ../rules/base.xml.in.h:96
-msgid "Berber (Morocco, Tifinagh alternative)"
-msgstr ""
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech コードレスデスクトップ (代替オプション)"
#: ../rules/base.xml.in.h:97
-msgid "Berber (Morocco, Tifinagh extended phonetic)"
-msgstr ""
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech コードレスデスクトッププロ (代替オプション 2)"
#: ../rules/base.xml.in.h:98
-msgid "Berber (Morocco, Tifinagh extended)"
-msgstr ""
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech コードレス・フリーダム/デスクトップ・ナビゲーター"
#: ../rules/base.xml.in.h:99
-msgid "Berber (Morocco, Tifinagh phonetic)"
-msgstr ""
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch コードレスキーボード (モデル Y-RB6)"
#: ../rules/base.xml.in.h:100
-msgid "Berber (Morocco, Tifinagh)"
-msgstr ""
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech インターネットキーボード"
#: ../rules/base.xml.in.h:101
-msgid "Bosnian"
-msgstr "ボスニア語"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:102
-msgid "Bosnian (US keyboard with Bosnian digraphs)"
-msgstr "ボスニア語 (ボスニア語二重字付き US キーボード)"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech インターネットナビゲーターキーボード"
#: ../rules/base.xml.in.h:103
-msgid "Bosnian (US keyboard with Bosnian letters)"
-msgstr "ボスニア語 (ボスニア語文字付き US キーボード)"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech コードレスデスクトップ EX110"
#: ../rules/base.xml.in.h:104
-msgid "Bosnian (use Bosnian digraphs)"
-msgstr "ボスニア語 (ボスニア語二重字付き)"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch インターネットナビゲーターキーボード SE"
#: ../rules/base.xml.in.h:105
-msgid "Bosnian (use guillemets for quotes)"
-msgstr "ボスニア語 (use guillemets for quotes)"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch インターネットナビゲーターキーボード SE (USB)"
#: ../rules/base.xml.in.h:106
-msgid "Both Alt keys together"
-msgstr "両方の Alt キーを同時に押す"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X キーボード"
#: ../rules/base.xml.in.h:107
-msgid "Both Ctrl keys together"
-msgstr "両方の Ctrl キーを同時に押す"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X コードレスメディアデスクトップキーボード"
#: ../rules/base.xml.in.h:108
-msgid "Both Shift keys together"
-msgstr "両方の Shift キーを同時に押す"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo キーボード"
#: ../rules/base.xml.in.h:109
-msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
-msgstr "両方の Shift キー同時押しで Caps Lock を有効にし、片方の Shift キーで無効にする"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge キーボード"
#: ../rules/base.xml.in.h:110
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "両方の Shift キー同時押しで Caps Lock をトグルする"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:111
-msgid "Both Shift-Keys together toggle ShiftLock"
-msgstr "両方の Shift キー同時押しで Shift ロックをトグルする"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access キーボード"
#: ../rules/base.xml.in.h:112
-msgid "Braille"
-msgstr "ブライユ点字"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:113
-msgid "Braille (left hand)"
-msgstr "ブライユ点字 (左手)"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural ワイヤレスエルゴノミックキーボード 4000"
#: ../rules/base.xml.in.h:114
-msgid "Braille (right hand)"
-msgstr "ブライユ点字 (右手)"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural ワイヤレスエルゴノミックキーボード 7000"
#: ../rules/base.xml.in.h:115
-msgid "Brother Internet Keyboard"
-msgstr "Brother インターネットキーボード"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft インターネットキーボード"
#: ../rules/base.xml.in.h:116
-msgid "Bulgarian"
-msgstr "ブルガリア語"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural キーボードプロ/ Microsoft インターネットキーボードプロ"
#: ../rules/base.xml.in.h:117
-msgid "Bulgarian (new phonetic)"
-msgstr "ブルガリア語 (新表音)"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural キーボードプロ USB / Microsoft インターネットキーボードプロ"
#: ../rules/base.xml.in.h:118
-msgid "Bulgarian (traditional phonetic)"
-msgstr "ブルガリア語 (伝統的な表音)"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural キーボードプロ OEM"
#: ../rules/base.xml.in.h:119
-msgid "Burmese"
-msgstr "ビルマ語"
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 インターネットキーボード"
#: ../rules/base.xml.in.h:120
-msgid "Cameroon Multilingual (azerty)"
-msgstr "カメルーン複数言語 (azerty)"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft インターネットキーボードプロ (スウェーデン語)"
#: ../rules/base.xml.in.h:121
-msgid "Cameroon Multilingual (qwerty)"
-msgstr "カメルーン複数言語 (qwerty)"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft オフィスキーボード"
#: ../rules/base.xml.in.h:122
-msgid "Canadian Multilingual"
-msgstr "カナダ複数言語"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft ワイヤレスマルチメディアキーボード 1.0A"
#: ../rules/base.xml.in.h:123
-msgid "Canadian Multilingual (first part)"
-msgstr "カナダ複数言語 (first part)"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural キーボード Elite"
#: ../rules/base.xml.in.h:124
-msgid "Canadian Multilingual (second part)"
-msgstr "カナダ複数言語 (second part)"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve キーボード 2000"
#: ../rules/base.xml.in.h:125
-msgid "Caps Lock"
-msgstr "Caps Lock"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/インターネットキーボード"
#: ../rules/base.xml.in.h:126
-msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
-msgstr "Caps Lock (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:127
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Caps Lock (最初の配列に変更する)、 Shift+Caps Lock (最後の配列に変更する)"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:128
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Caps Lock (押している間)、 Alt+Caps Lock で通常の Caps Lock 動作にする"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:129
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock をロック付き Shift として扱う。 Shift を押した時は Caps Lock を「一時中断」する"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:130
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock をロック付き Shift として扱う。Shift は Caps Lock に影響を及ぼさない"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "サンワサプライ SKB-KG3"
#: ../rules/base.xml.in.h:131
-msgid "Caps Lock as Ctrl"
-msgstr "Caps Lock を Ctrl として扱う"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:132
-msgid "Caps Lock is disabled"
-msgstr "Caps Lock を無効にする"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:133
-msgid "Caps Lock key behavior"
-msgstr "Caps Lock キーの動作"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:134
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Caps Lock は Shift をトグルし、すべてのキーが影響を受ける"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:135
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr ""
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power マルチメディアキーボード"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr ""
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr ""
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
-# 地図帳では Catalonia がカタルーニャとなっているが、カタロニアの方が
-# 一般的だと思われる
-# ISOコードもカタロニア語表記
#: ../rules/base.xml.in.h:138
-msgid "Catalan"
-msgstr "カタロニア語"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (タブレット PC)"
#: ../rules/base.xml.in.h:139
-msgid "Catalan (Spain, with middle-dot L)"
-msgstr "カタロニア語 (スペイン、with middle-dot L)"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
-# ISO 639 にもあり
#: ../rules/base.xml.in.h:140
-msgid "Cherokee"
-msgstr "チェロキー語"
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust ワイヤレスキーボードクラシック"
#: ../rules/base.xml.in.h:141
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access キーボード"
#: ../rules/base.xml.in.h:142
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:143
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (alternate option)"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:144
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:145
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
#: ../rules/base.xml.in.h:146
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU モード)"
#: ../rules/base.xml.in.h:147
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP モード)"
#: ../rules/base.xml.in.h:148
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony インターネットキーボード"
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! インターネットキーボード"
#: ../rules/base.xml.in.h:149
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:150
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:151
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:152
-msgid "Chinese"
-msgstr "中国語"
+msgid "Macintosh Old"
+msgstr "Macintosh Old"
-# ISO 639 より
#: ../rules/base.xml.in.h:153
-msgid "Chuvash"
-msgstr "チュヴァシュ語"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard for Mac"
#: ../rules/base.xml.in.h:154
-msgid "Chuvash (Latin)"
-msgstr "チュヴァシュ語 (ラテン)"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:155
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:156
-msgid "CloGaelach"
-msgstr ""
+msgid "Acer Laptop"
+msgstr "Acer ラップトップ"
#: ../rules/base.xml.in.h:157
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access キーボード"
+msgid "Asus Laptop"
+msgstr "Asus ラップトップ"
#: ../rules/base.xml.in.h:158
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq インターネットキーボード (13 キー)"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:159
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq インターネットキーボード (18 キー)"
+msgid "Apple Laptop"
+msgstr "Apple ラップトップ"
#: ../rules/base.xml.in.h:160
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq インターネットキーボード (7 キー)"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple アルミニウムキーボード (ANSI)"
#: ../rules/base.xml.in.h:161
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq キーボード"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple アルミニウムキーボード (ISO)"
#: ../rules/base.xml.in.h:162
-msgid "Compose key position"
-msgstr "Compose キーの位置"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple アルミニウムキーボード (JIS)"
#: ../rules/base.xml.in.h:163
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backspace"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST マルチメディアワイヤレスキーボード"
#: ../rules/base.xml.in.h:164
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control を Alt キーに割り当て、 Alt を Win キーに割り当てる"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "ラップトップ/ノートブック eMachines m68xx"
#: ../rules/base.xml.in.h:165
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control を Win キーに割り当てる (通常の Ctrl キーとする)"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:166
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative デスクトップワイヤレス 7000"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:167
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "クリミア・タタール語 (トルコ語 Alt-Q)"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:168
-msgid "Crimean Tatar (Turkish F)"
-msgstr "クリミア・タタール語 (トルコ語 F)"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
#: ../rules/base.xml.in.h:169
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "クリミア・タタール語 (トルコ語 Q)"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:170
-msgid "Croatian"
-msgstr "クロアチア語"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:171
-msgid "Croatian (US keyboard with Croatian digraphs)"
-msgstr "クロアチア語 (クロアチア語二重字付き US キーボード)"
+msgid "Sun Type 7 USB"
+msgstr "Sun Type 7 USB"
#: ../rules/base.xml.in.h:172
-msgid "Croatian (US keyboard with Croatian letters)"
-msgstr "クロアチア語 (クロアチア語文字付き US キーボード)"
+msgid "Sun Type 7 USB (European layout)"
+msgstr "Sun Type 7 USB (ヨーロピアンレイアウト)"
#: ../rules/base.xml.in.h:173
-msgid "Croatian (use Croatian digraphs)"
-msgstr "クロアチア語 (クロアチア語二重字付き)"
+msgid "Sun Type 7 USB (Unix layout)"
+msgstr "Sun Type 7 USB (Unix レイアウト)"
#: ../rules/base.xml.in.h:174
-msgid "Croatian (use guillemets for quotes)"
-msgstr "クロアチア語 (use guillemets for quotes)"
+msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key"
+msgstr "Sun Type 7 USB (日本語レイアウト) / 日本語 106キー"
#: ../rules/base.xml.in.h:175
-msgid "Ctrl key position"
-msgstr "Ctrl キーの位置"
+msgid "Sun Type 6/7 USB"
+msgstr "Sun Type 6/7 USB"
#: ../rules/base.xml.in.h:176
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Shift"
+msgid "Sun Type 6/7 USB (European layout)"
+msgstr "Sun Type 6/7 USB (ヨーロピアンレイアウト)"
#: ../rules/base.xml.in.h:177
-msgid "Czech"
-msgstr "チェコ語"
+msgid "Sun Type 6 USB (Unix layout)"
+msgstr "Sun Type 6 USB (Unix レイアウト)"
#: ../rules/base.xml.in.h:178
-msgid "Czech (UCW layout, accented letters only)"
-msgstr "チェコ語 (UCW 配列、アクセント付き文字のみ)"
+msgid "Sun Type 6 USB (Japanese layout)"
+msgstr "Sun Type 6 USB (日本語レイアウト)"
#: ../rules/base.xml.in.h:179
-msgid "Czech (US Dvorak with CZ UCW support)"
-msgstr "チェコ語 (チェコ UCW サポート付き US Dvorak)"
+msgid "Sun Type 6 (Japanese layout)"
+msgstr "Sun Type 6 (日本語レイアウト)"
#: ../rules/base.xml.in.h:180
-msgid "Czech (qwerty)"
-msgstr "チェコ語 (qwerty)"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:181
-msgid "Czech (qwerty, extended Backslash)"
-msgstr "チェコ語 (qwerty、Backslash 拡張)"
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
#: ../rules/base.xml.in.h:182
-msgid "Czech (with &lt;\\|&gt; key)"
-msgstr "チェコ語 (&lt;\\|&gt; キー付き)"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:183
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative デスクトップワイヤレス 7000"
#: ../rules/base.xml.in.h:184
-msgid "Danish"
-msgstr "デンマーク語"
-
-#: ../rules/base.xml.in.h:185
-msgid "Danish (Dvorak)"
-msgstr "デンマーク語 (Dvorak)"
-
-#: ../rules/base.xml.in.h:186
-msgid "Danish (Macintosh)"
-msgstr "デンマーク語 (Macintosh)"
+msgid "Htc Dream phone"
+msgstr "Htc Dream phone"
-#: ../rules/base.xml.in.h:187
-msgid "Danish (Macintosh, eliminate dead keys)"
-msgstr "デンマーク語 (Macintosh、デッドキー無し)"
+#. Keyboard indicator for English layouts
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:33
+msgid "en"
+msgstr "en"
-#: ../rules/base.xml.in.h:188
-msgid "Danish (eliminate dead keys)"
-msgstr "デンマーク語 (デッドキー無し)"
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34
+msgid "English (US)"
+msgstr "英語 (US)"
+#. Keyboard indicator for Cherokee layouts
#: ../rules/base.xml.in.h:189
-msgid "Default numeric keypad keys"
-msgstr "デフォルトのテンキー"
+msgid "chr"
+msgstr "chr"
+# ISO 639 にもあり
#: ../rules/base.xml.in.h:190
-msgid "Dell"
-msgstr "Dell"
+msgid "Cherokee"
+msgstr "チェロキー語"
#: ../rules/base.xml.in.h:191
-msgid "Dell 101-key PC"
-msgstr "Dell 101キー PC"
+msgid "English (US, with euro on 5)"
+msgstr "英語 (US、5キーにユーロ記号付き)"
#: ../rules/base.xml.in.h:192
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell ラップトップ/ノートブック Inspiron 6xxx/8xxx"
+msgid "English (US, international with dead keys)"
+msgstr "英語 (US、国際、デッドキー付き)"
#: ../rules/base.xml.in.h:193
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell ラップトップ/ノートブック Precision M series"
+msgid "English (US, alternative international)"
+msgstr "英語 (US、代替、国際)"
#: ../rules/base.xml.in.h:194
-msgid "Dell Latitude series laptop"
-msgstr "Dell Latitude シリーズラップトップ"
+msgid "English (Colemak)"
+msgstr "英語 (Colemak)"
#: ../rules/base.xml.in.h:195
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Dvorak)"
+msgstr "英語 (Dvorak)"
#: ../rules/base.xml.in.h:196
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (Dvorak, international with dead keys)"
+msgstr "英語 (Dvorak、国際、デッドキー付き)"
#: ../rules/base.xml.in.h:197
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "英語 (Dvorak 代替、国際、デッドキー無し)"
#: ../rules/base.xml.in.h:198
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB マルチメディアキーボード"
+msgid "English (left handed Dvorak)"
+msgstr "英語 (左手 Dvorak)"
#: ../rules/base.xml.in.h:199
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa ワイヤレスデスクトップキーボード"
+msgid "English (right handed Dvorak)"
+msgstr "英語 (右手 Dvorak)"
#: ../rules/base.xml.in.h:200
-msgid "Dhivehi"
-msgstr "Dhivehi"
+msgid "English (classic Dvorak)"
+msgstr "英語 (古典的 Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802 シリーズ"
-
-#: ../rules/base.xml.in.h:202
-msgid "Dutch"
-msgstr "オランダ語"
+msgid "English (programmer Dvorak)"
+msgstr "英語 (プログラマー Dvorak)"
-#: ../rules/base.xml.in.h:203
-msgid "Dutch (Macintosh)"
-msgstr "オランダ語 (Macintosh)"
+#. Keyboard indicator for Russian layouts
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54
+msgid "ru"
+msgstr "ru"
#: ../rules/base.xml.in.h:204
-msgid "Dutch (Sun dead keys)"
-msgstr "オランダ語 (Sun デッドキー付き)"
+msgid "Russian (US, phonetic)"
+msgstr "ロシア語 (US、表音)"
#: ../rules/base.xml.in.h:205
-msgid "Dutch (standard)"
-msgstr "オランダ語 (標準)"
+msgid "English (Macintosh)"
+msgstr "英語 (Macintosh)"
-# ISO 639 より
-# ブータン
#: ../rules/base.xml.in.h:206
-msgid "Dzongkha"
-msgstr "ゾンカ語"
+msgid "English (international AltGr dead keys)"
+msgstr "英語 (国際 AltGr デッドキー)"
#: ../rules/base.xml.in.h:207
-msgid "Enable extra typographic characters"
-msgstr "追加の印刷文字を有効にする"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "英語 (layout toggle on multiply/divide key)"
#: ../rules/base.xml.in.h:208
-msgid "English (Cameroon Dvorak)"
-msgstr "英語 (カメルーン Dvorak)"
+msgid "Serbo-Croatian (US)"
+msgstr "セルボクロアチア語 (US)"
#: ../rules/base.xml.in.h:209
-msgid "English (Cameroon)"
-msgstr "英語 (カメルーン)"
+msgid "English (Workman)"
+msgstr "英語 (Workman)"
#: ../rules/base.xml.in.h:210
-msgid "English (Canada)"
-msgstr "英語 (カナダ)"
+msgid "English (Workman, international with dead keys)"
+msgstr "英語 (Workman、国際、デッドキー付き)"
-#: ../rules/base.xml.in.h:211
-msgid "English (Colemak)"
-msgstr "英語 (Colemak)"
-
-#: ../rules/base.xml.in.h:212
-msgid "English (Dvorak alternative international no dead keys)"
-msgstr "英語 (Dvorak 代替、国際、デッドキー無し)"
+#. Keyboard indicator for Persian layouts
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:15
+msgid "fa"
+msgstr "fa"
+# アフガニスタンの通貨はアフガニだが、言語については要調査
#: ../rules/base.xml.in.h:213
-msgid "English (Dvorak international with dead keys)"
-msgstr "英語 (Dvorak 国際、デッドキー付き)"
-
-#: ../rules/base.xml.in.h:214
-msgid "English (Dvorak)"
-msgstr "英語 (Dvorak)"
+msgid "Afghani"
+msgstr "アフガニスタン語"
+#. Keyboard indicator for Pashto layouts
#: ../rules/base.xml.in.h:215
-msgid "English (Ghana)"
-msgstr "英語 (ガーナ)"
+msgid "ps"
+msgstr "ps"
#: ../rules/base.xml.in.h:216
-msgid "English (Ghana, GILLBT)"
-msgstr "英語 (ガーナ、GILLBT)"
-
-#: ../rules/base.xml.in.h:217
-msgid "English (Ghana, multilingual)"
-msgstr "英語 (ガーナ、複数言語)"
+msgid "Pashto"
+msgstr "パシュト語"
+#. Keyboard indicator for Uzbek layouts
#: ../rules/base.xml.in.h:218
-msgid "English (India, with RupeeSign)"
-msgstr "英語 (インド、ルピー記号付き)"
+msgid "uz"
+msgstr "uz"
#: ../rules/base.xml.in.h:219
-msgid "English (Macintosh)"
-msgstr "英語 (Macintosh)"
+msgid "Uzbek (Afghanistan)"
+msgstr "ウズベク語 (アフガニスタン)"
#: ../rules/base.xml.in.h:220
-msgid "English (Mali, US Macintosh)"
-msgstr "英語 (マリ、US Macintosh)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "パシュト語 (アフガニスタン、OLPC)"
#: ../rules/base.xml.in.h:221
-msgid "English (Mali, US international)"
-msgstr "英語 (マリ、US 国際)"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "ペルシア語 (アフガニスタン、ダリー語 OLPC)"
#: ../rules/base.xml.in.h:222
-msgid "English (Nigeria)"
-msgstr "英語 (ナイジェリア)"
-
-#: ../rules/base.xml.in.h:223
-msgid "English (South Africa)"
-msgstr "英語 (南アフリカ)"
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "ウズベク語 (アフガニスタン、OLPC)"
-#: ../rules/base.xml.in.h:224
-msgid "English (UK)"
-msgstr "英語 (UK)"
+#. Keyboard indicator for Arabic layouts
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64
+msgid "ar"
+msgstr "ar"
-#: ../rules/base.xml.in.h:225
-msgid "English (UK, Colemak)"
-msgstr "英語 (UK, Colemak)"
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65
+msgid "Arabic"
+msgstr "アラビア語"
#: ../rules/base.xml.in.h:226
-msgid "English (UK, Dvorak with UK punctuation)"
-msgstr "英語 (UK, Dvorak with UK punctuation)"
+msgid "Arabic (azerty)"
+msgstr "アラビア語 (azerty)"
#: ../rules/base.xml.in.h:227
-msgid "English (UK, Dvorak)"
-msgstr "英語 (UK, Dvorak)"
+msgid "Arabic (azerty/digits)"
+msgstr "アラビア語 (azerty/数字キー)"
#: ../rules/base.xml.in.h:228
-msgid "English (UK, Macintosh international)"
-msgstr "英語 (UK, Macintosh 国際)"
+msgid "Arabic (digits)"
+msgstr "アラビア語 (数字キー)"
#: ../rules/base.xml.in.h:229
-msgid "English (UK, Macintosh)"
-msgstr "英語 (UK, Macintosh)"
+msgid "Arabic (qwerty)"
+msgstr "アラビア語 (qwerty)"
#: ../rules/base.xml.in.h:230
-msgid "English (UK, extended WinKeys)"
-msgstr "英語 (UK、WinKey 拡張)"
+msgid "Arabic (qwerty/digits)"
+msgstr "アラビア語 (qwerty/数字キー)"
#: ../rules/base.xml.in.h:231
-msgid "English (UK, international with dead keys)"
-msgstr "英語 (UK、国際、デッドキー付き)"
-
-#: ../rules/base.xml.in.h:232 ../rules/base.extras.xml.in.h:8
-msgid "English (US)"
-msgstr "英語 (US)"
+msgid "Arabic (Buckwalter)"
+msgstr "アラビア語 (Buckwalter)"
+#. Keyboard indicator for Albanian layouts
#: ../rules/base.xml.in.h:233
-msgid "English (US, alternative international)"
-msgstr "英語 (US、代替、国際)"
+msgid "sq"
+msgstr "sq"
#: ../rules/base.xml.in.h:234
-msgid "English (US, international with dead keys)"
-msgstr "英語 (US、国際、デッドキー付き)"
-
-#: ../rules/base.xml.in.h:235
-msgid "English (US, with euro on 5)"
-msgstr "英語 (US、5キーにユーロ記号付き)"
+msgid "Albanian"
+msgstr "アルバニア語"
-#: ../rules/base.xml.in.h:236
-msgid "English (classic Dvorak)"
-msgstr "英語 (古典的 Dvorak)"
+#. Keyboard indicator for Armenian layouts
+#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58
+msgid "hy"
+msgstr "hy"
-#: ../rules/base.xml.in.h:237
-msgid "English (international AltGr dead keys)"
-msgstr "英語 (国際 AltGr デッドキー)"
+#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59
+msgid "Armenian"
+msgstr "アルメニア語"
#: ../rules/base.xml.in.h:238
-msgid "English (layout toggle on multiply/divide key)"
-msgstr "英語 (layout toggle on multiply/divide key)"
+msgid "Armenian (phonetic)"
+msgstr "アルメニア語 (表音)"
#: ../rules/base.xml.in.h:239
-msgid "English (left handed Dvorak)"
-msgstr "英語 (左手 Dvorak)"
+msgid "Armenian (alternative phonetic)"
+msgstr "アルメニア語 (代替、表音)"
#: ../rules/base.xml.in.h:240
-msgid "English (programmer Dvorak)"
-msgstr "英語 (プログラマー Dvorak)"
+msgid "Armenian (eastern)"
+msgstr "アルメニア語 (東方)"
#: ../rules/base.xml.in.h:241
-msgid "English (right handed Dvorak)"
-msgstr "英語 (右手 Dvorak)"
+msgid "Armenian (western)"
+msgstr "アルメニア語 (西方)"
#: ../rules/base.xml.in.h:242
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
-
-#: ../rules/base.xml.in.h:243
-msgid "Enter on keypad"
-msgstr "テンキーの Enter"
+msgid "Armenian (alternative eastern)"
+msgstr "アルメニア語 (代替、東方)"
-#: ../rules/base.xml.in.h:244
-msgid "Esperanto"
-msgstr "エスペラント語"
+#. Keyboard indicator for German layouts
+#: ../rules/base.xml.in.h:244 ../rules/base.extras.xml.in.h:10
+msgid "de"
+msgstr "de"
#: ../rules/base.xml.in.h:245
-msgid "Esperanto (Portugal, Nativo)"
-msgstr "エスペラント語 (ポルトガル、Nativo)"
+msgid "German (Austria)"
+msgstr "ドイツ語 (オーストリア)"
#: ../rules/base.xml.in.h:246
-msgid "Esperanto (displaced semicolon and quote, obsolete)"
-msgstr "エスペラント語 (セミコロンとクォート無し、廃止)"
+msgid "German (legacy)"
+msgstr "ドイツ語 (legacy)"
#: ../rules/base.xml.in.h:247
-msgid "Estonian"
-msgstr "エストニア語"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "ドイツ語 (オーストリア、デッドキー無し)"
#: ../rules/base.xml.in.h:248
-msgid "Estonian (Dvorak)"
-msgstr "エストニア語 (Dvorak)"
+msgid "German (Austria, Sun dead keys)"
+msgstr "ドイツ語 (オーストリア、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:249
-msgid "Estonian (US keyboard with Estonian letters)"
-msgstr "エストニア語 (エストニア文字付き US キーボード)"
-
-#: ../rules/base.xml.in.h:250
-msgid "Estonian (eliminate dead keys)"
-msgstr "エストニア語 (デッドキー無し)"
+msgid "German (Austria, Macintosh)"
+msgstr "ドイツ語 (オーストリア、Macintosh)"
+#. Keyboard indicator for Azerbaijani layouts
#: ../rules/base.xml.in.h:251
-msgid "Euro on 2"
-msgstr "2 キーにユーロ記号を追加割り当てする"
+msgid "az"
+msgstr "az"
#: ../rules/base.xml.in.h:252
-msgid "Euro on 4"
-msgstr "4 キーにユーロ記号を追加割り当てする"
+msgid "Azerbaijani"
+msgstr "アゼルバイジャン語"
#: ../rules/base.xml.in.h:253
-msgid "Euro on 5"
-msgstr "5 キーにユーロ記号を追加割り当てする"
-
-#: ../rules/base.xml.in.h:254
-msgid "Euro on E"
-msgstr "E キーにユーロ記号を追加割り当てする"
+msgid "Azerbaijani (Cyrillic)"
+msgstr "アゼルバイジャン語 (キリル文字)"
+#. Keyboard indicator for Belarusian layouts
#: ../rules/base.xml.in.h:255
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+#, fuzzy
+msgid "by"
+msgstr "'%s' , '%s'"
-# ISO 639 より
-# ガーナの言語
#: ../rules/base.xml.in.h:256
-msgid "Ewe"
-msgstr "エウェ語"
+msgid "Belarusian"
+msgstr "ベラルーシ語"
#: ../rules/base.xml.in.h:257
-msgid "FL90"
-msgstr "FL90"
+msgid "Belarusian (legacy)"
+msgstr "ベラルーシ語 (legacy)"
-# フェロー諸島の言語
#: ../rules/base.xml.in.h:258
-msgid "Faroese"
-msgstr "フェロー語"
-
-#: ../rules/base.xml.in.h:259
-msgid "Faroese (eliminate dead keys)"
-msgstr "フェロー語 (デッドキー無し)"
+msgid "Belarusian (Latin)"
+msgstr "ベラルーシ語 (ラテン)"
-# ISO 639
-#: ../rules/base.xml.in.h:260
-msgid "Filipino"
-msgstr "フィリピノ語"
+#. Keyboard indicator for Belgian layouts
+#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:67
+msgid "be"
+msgstr "be"
-#: ../rules/base.xml.in.h:261
-msgid "Filipino (Capewell-Dvorak Baybayin)"
-msgstr "フィリピノ語 (Capewell-Dvorak Baybayin)"
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:68
+msgid "Belgian"
+msgstr "ベルギー語"
#: ../rules/base.xml.in.h:262
-msgid "Filipino (Capewell-Dvorak Latin)"
-msgstr "フィリピノ語 (Capewell-Dvorak Latin)"
+msgid "Belgian (alternative)"
+msgstr "ベルギー語 (代替)"
#: ../rules/base.xml.in.h:263
-msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
-msgstr "フィリピノ語 (Capewell-QWERF 2006 Baybayin)"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "ベルギー語 (代替、latin-9 のみ)"
#: ../rules/base.xml.in.h:264
-msgid "Filipino (Capewell-QWERF 2006 Latin)"
-msgstr "フィリピノ語 (Capewell-QWERF 2006 Latin)"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "ベルギー語 (代替、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:265
-msgid "Filipino (Colemak Baybayin)"
-msgstr "フィリピノ語 (Colemak Baybayin)"
+msgid "Belgian (ISO alternate)"
+msgstr "ベルギー語 (ISO 代替)"
#: ../rules/base.xml.in.h:266
-msgid "Filipino (Colemak Latin)"
-msgstr "フィリピノ語 (Colemak Latin)"
+msgid "Belgian (eliminate dead keys)"
+msgstr "ベルギー語 (デッドキー無し)"
#: ../rules/base.xml.in.h:267
-msgid "Filipino (Dvorak Baybayin)"
-msgstr "フィリピノ語 (Dvorak Baybayin)"
+msgid "Belgian (Sun dead keys)"
+msgstr "ベルギー語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:268
-msgid "Filipino (Dvorak Latin)"
-msgstr "フィリピノ語 (Dvorak Latin)"
-
-#: ../rules/base.xml.in.h:269
-msgid "Filipino (QWERTY Baybayin)"
-msgstr "フィリピノ語 (QWERTY Baybayin)"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "ベルギー語 (Wang モデル 724 azerty)"
-# フィン語とも言う
+#. Keyboard indicator for Bengali layouts
#: ../rules/base.xml.in.h:270
-msgid "Finnish"
-msgstr "フィンランド語"
+msgid "bn"
+msgstr "bn"
#: ../rules/base.xml.in.h:271
-msgid "Finnish (Macintosh)"
-msgstr "フィンランド語 (Macintosh)"
+msgid "Bengali"
+msgstr "ベンガル語"
#: ../rules/base.xml.in.h:272
-msgid "Finnish (classic)"
-msgstr "フィンランド語 (古典的)"
+msgid "Bengali (Probhat)"
+msgstr "ベンガル語 (Probhat)"
-#: ../rules/base.xml.in.h:273
-msgid "Finnish (classic, eliminate dead keys)"
-msgstr "フィンランド語 (古典的、デッドキー無し)"
+#. Keyboard indicator for Indian layouts
+#: ../rules/base.xml.in.h:274
+msgid "in"
+msgstr "in"
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:276
-msgid "Four-level key with abstract separators"
+#: ../rules/base.xml.in.h:275
+msgid "Indian"
msgstr ""
+#: ../rules/base.xml.in.h:276
+#, fuzzy
+msgid "Bengali (India)"
+msgstr "ベンガル語 (Bornona)"
+
#: ../rules/base.xml.in.h:277
-msgid "Four-level key with comma"
-msgstr ""
+#, fuzzy
+msgid "Bengali (India, Probhat)"
+msgstr "ベンガル語 (Probhat)"
#: ../rules/base.xml.in.h:278
-msgid "Four-level key with dot"
-msgstr ""
+#, fuzzy
+msgid "Bengali (India, Baishakhi)"
+msgstr "ベンガル語 (Baishakhi)"
#: ../rules/base.xml.in.h:279
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr ""
+#, fuzzy
+msgid "Bengali (India, Bornona)"
+msgstr "ベンガル語 (Bornona)"
#: ../rules/base.xml.in.h:280
-msgid "Four-level key with momayyez"
-msgstr ""
+#, fuzzy
+msgid "Bengali (India, Uni Gitanjali)"
+msgstr "ベンガル語 (Uni Gitanjali)"
#: ../rules/base.xml.in.h:281
-msgid "French"
-msgstr "フランス語"
-
-#: ../rules/base.xml.in.h:282
-msgid "French (Bepo, ergonomic, Dvorak way)"
-msgstr "フランス語 (Bepo, ergonomic, Dvorak way)"
+#, fuzzy
+msgid "Bengali (India, Baishakhi Inscript)"
+msgstr "ベンガル語 (Baishakhi Inscript)"
+#. Keyboard indicator for Gujarati layouts
#: ../rules/base.xml.in.h:283
-msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
-msgstr "フランス語 (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgid "gu"
+msgstr "gu"
#: ../rules/base.xml.in.h:284
-msgid "French (Breton)"
-msgstr "フランス語 (ブレトン)"
-
-#: ../rules/base.xml.in.h:285
-msgid "French (Cameroon)"
-msgstr "フランス語 (カメルーン)"
+msgid "Gujarati"
+msgstr "グジャラート語"
-#: ../rules/base.xml.in.h:286 ../rules/base.extras.xml.in.h:11
-msgid "French (Canada)"
-msgstr "フランス語 (カナダ)"
+#. Keyboard indicator for Punjabi layouts
+#: ../rules/base.xml.in.h:286
+msgid "pa"
+msgstr "pa"
#: ../rules/base.xml.in.h:287
-msgid "French (Canada, Dvorak)"
-msgstr "フランス語 (カナダ、Dvorak)"
+msgid "Punjabi (Gurmukhi)"
+msgstr "パンジャブ語 (Gurmukhi)"
+# ISO 639
#: ../rules/base.xml.in.h:288
-msgid "French (Canada, legacy)"
-msgstr "フランス語 (カナダ、legacy)"
-
-#: ../rules/base.xml.in.h:289
-msgid "French (Democratic Republic of the Congo)"
-msgstr "フランス語 (コンゴ民主共和国)"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "パンジャブ語 (Gurmukhi Jhelum)"
+#. Keyboard indicator for Kannada layouts
#: ../rules/base.xml.in.h:290
-msgid "French (Dvorak)"
-msgstr "フランス語 (Dvorak)"
+msgid "kn"
+msgstr "kn"
+# インドのカンナダ語
#: ../rules/base.xml.in.h:291
-msgid "French (Guinea)"
-msgstr "フランス語 (ギニア)"
-
-#: ../rules/base.xml.in.h:292
-msgid "French (Macintosh)"
-msgstr "フランス語 (Macintosh)"
+msgid "Kannada"
+msgstr "カンナダ語"
+#. Keyboard indicator for Malayalam layouts
#: ../rules/base.xml.in.h:293
-msgid "French (Mali, alternative)"
-msgstr "フランス語 (マリ、代替)"
+msgid "ml"
+msgstr "ml"
+# ISO 639 より
#: ../rules/base.xml.in.h:294
-msgid "French (Morocco)"
-msgstr "フランス語 (モロッコ)"
+msgid "Malayalam"
+msgstr "マラヤーラム語"
#: ../rules/base.xml.in.h:295
-msgid "French (Sun dead keys)"
-msgstr "フランス語 (Sun デッドキー付き)"
+msgid "Malayalam (Lalitha)"
+msgstr "マラヤーラム語 (Lalitha)"
#: ../rules/base.xml.in.h:296
-msgid "French (Switzerland)"
-msgstr "フランス語 (スイス)"
-
-#: ../rules/base.xml.in.h:297
-msgid "French (Switzerland, Macintosh)"
-msgstr "フランス語 (スイス、Macintosh)"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "マラヤーラム語 (ルピー記号付き拡張 Inscript)"
+#. Keyboard indicator for Oriya layouts
#: ../rules/base.xml.in.h:298
-msgid "French (Switzerland, Sun dead keys)"
-msgstr "フランス語 (スイス、Sun デッドキー付き)"
+msgid "or"
+msgstr "or"
#: ../rules/base.xml.in.h:299
-msgid "French (Switzerland, eliminate dead keys)"
-msgstr "フランス語 (スイス、デッドキー無し)"
-
-#: ../rules/base.xml.in.h:300
-msgid "French (alternative)"
-msgstr "フランス語 (代替)"
+msgid "Oriya"
+msgstr "オリヤー語"
+#. Keyboard indicator for Tamil layouts
#: ../rules/base.xml.in.h:301
-msgid "French (alternative, Sun dead keys)"
-msgstr "フランス語 (代替、Sun デッドキー付き)"
+msgid "ta"
+msgstr "ta"
#: ../rules/base.xml.in.h:302
-msgid "French (alternative, eliminate dead keys)"
-msgstr "フランス語 (代替、デッドキー無し)"
+msgid "Tamil (Unicode)"
+msgstr "タミル語 (ユニコード)"
#: ../rules/base.xml.in.h:303
-msgid "French (alternative, latin-9 only)"
-msgstr "フランス語 (代替、latin-9 のみ)"
+msgid "Tamil (keyboard with numerals)"
+msgstr "タミル語 (数字付きキーボード)"
#: ../rules/base.xml.in.h:304
-msgid "French (eliminate dead keys)"
-msgstr "フランス語 (デッドキー無し)"
+msgid "Tamil (TAB typewriter)"
+msgstr "タミル語 (TAB タイプライター)"
#: ../rules/base.xml.in.h:305
-msgid "French (legacy, alternative)"
-msgstr "フランス語 (legacy、代替)"
+msgid "Tamil (TSCII typewriter)"
+msgstr "タミル語 (TSCII タイプライター)"
#: ../rules/base.xml.in.h:306
-msgid "French (legacy, alternative, Sun dead keys)"
-msgstr "フランス語 (legacy、代替、Sun デッドキー付き)"
-
-#: ../rules/base.xml.in.h:307
-msgid "French (legacy, alternative, eliminate dead keys)"
-msgstr "フランス語 (legacy、代替、デッドキー無し)"
+msgid "Tamil"
+msgstr "タミル語"
+#. Keyboard indicator for Telugu layouts
#: ../rules/base.xml.in.h:308
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Fujitsu-Siemens Computers AMILO ラップトップ"
+msgid "te"
+msgstr "te"
-# ISO 639 では Fulah
#: ../rules/base.xml.in.h:309
-msgid "Fula"
-msgstr "フラ語"
-
-# ISO 639
-#: ../rules/base.xml.in.h:310
-msgid "Ga"
-msgstr "ガ語"
+msgid "Telugu"
+msgstr "テルグ語"
+#. Keyboard indicator for Urdu layouts
#: ../rules/base.xml.in.h:311
-msgid "Generic 101-key PC"
-msgstr "標準 101 キー PC"
+msgid "ur"
+msgstr "ur"
#: ../rules/base.xml.in.h:312
-msgid "Generic 102-key (Intl) PC"
-msgstr "標準 102 キー (国際) PC"
+msgid "Urdu (phonetic)"
+msgstr "ウルドゥー語 (表音)"
#: ../rules/base.xml.in.h:313
-msgid "Generic 104-key PC"
-msgstr "標準 104 キー PC"
+msgid "Urdu (alternative phonetic)"
+msgstr "ウルドゥー語 (代替表音)"
#: ../rules/base.xml.in.h:314
-msgid "Generic 105-key (Intl) PC"
-msgstr "標準 105 キー (国際) PC"
-
-#: ../rules/base.xml.in.h:315
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "Urdu (WinKeys)"
+msgstr "ウルドゥー語 (WinKeys)"
+#. Keyboard indicator for Hindi layouts
#: ../rules/base.xml.in.h:316
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM キーボード KWD-910"
+msgid "hi"
+msgstr "hi"
#: ../rules/base.xml.in.h:317
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "Hindi (Bolnagri)"
+msgstr "ヒンディー語 (Bolnagri)"
#: ../rules/base.xml.in.h:318
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "Hindi (Wx)"
+msgstr "ヒンディー語 (Wx)"
#: ../rules/base.xml.in.h:319
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:320
-msgid "Georgian"
-msgstr "グルジア語"
+msgid "English (India, with RupeeSign)"
+msgstr "英語 (インド、ルピー記号付き)"
+#. Keyboard indicator for Bosnian layouts
#: ../rules/base.xml.in.h:321
-msgid "Georgian (France, AZERTY Tskapo)"
-msgstr "グルジア語 (フランス、AZERTY Tskapo)"
+msgid "bs"
+msgstr "bs"
#: ../rules/base.xml.in.h:322
-msgid "Georgian (Italy)"
-msgstr "グルジア語 (イタリア)"
+msgid "Bosnian"
+msgstr "ボスニア語"
#: ../rules/base.xml.in.h:323
-msgid "Georgian (MESS)"
-msgstr "グルジア語 (MESS)"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "ボスニア語 (use guillemets for quotes)"
#: ../rules/base.xml.in.h:324
-msgid "Georgian (ergonomic)"
-msgstr "グルジア語 (人間工学)"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "ボスニア語 (ボスニア語二重字付き)"
-#: ../rules/base.xml.in.h:325 ../rules/base.extras.xml.in.h:12
-msgid "German"
-msgstr "ドイツ語"
+#: ../rules/base.xml.in.h:325
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "ボスニア語 (ボスニア語二重字付き US キーボード)"
#: ../rules/base.xml.in.h:326
-msgid "German (Austria)"
-msgstr "ドイツ語 (オーストリア)"
-
-#: ../rules/base.xml.in.h:327
-msgid "German (Austria, Macintosh)"
-msgstr "ドイツ語 (オーストリア、Macintosh)"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "ボスニア語 (ボスニア語文字付き US キーボード)"
-#: ../rules/base.xml.in.h:328
-msgid "German (Austria, Sun dead keys)"
-msgstr "ドイツ語 (オーストリア、Sun デッドキー付き)"
+#. Keyboard indicator for Portuguese layouts
+#: ../rules/base.xml.in.h:328 ../rules/base.extras.xml.in.h:70
+msgid "pt"
+msgstr "pt"
-#: ../rules/base.xml.in.h:329
-msgid "German (Austria, eliminate dead keys)"
-msgstr "ドイツ語 (オーストリア、デッドキー無し)"
+#: ../rules/base.xml.in.h:329 ../rules/base.extras.xml.in.h:71
+msgid "Portuguese (Brazil)"
+msgstr "ポルトガル語 (ブラジル)"
#: ../rules/base.xml.in.h:330
-msgid "German (Dvorak)"
-msgstr "ドイツ語 (Dvorak)"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "ポルトガル語 (ブラジル、デッドキー無し)"
#: ../rules/base.xml.in.h:331
-msgid "German (Macintosh)"
-msgstr "ドイツ語 (Macintosh)"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "ポルトガル語 (ブラジル、Dvorak)"
#: ../rules/base.xml.in.h:332
-msgid "German (Macintosh, eliminate dead keys)"
-msgstr "ドイツ語 (Macintosh、デッドキー無し)"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "ポルトガル語 (ブラジル、nativo)"
#: ../rules/base.xml.in.h:333
-msgid "German (Neo 2)"
-msgstr "ドイツ語 (Neo 2)"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "ポルトガル語 (ブラジル、nativo for USA keyboards)"
#: ../rules/base.xml.in.h:334
-msgid "German (Sun dead keys)"
-msgstr "ドイツ語 (Sun デッドキー付き)"
-
-#: ../rules/base.xml.in.h:335
-msgid "German (Switzerland)"
-msgstr "ドイツ語 (スイス)"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "ポルトガル語 (ブラジル、nativo for Esperanto)"
+#. Keyboard indicator for Bulgarian layouts
#: ../rules/base.xml.in.h:336
-msgid "German (Switzerland, Macintosh)"
-msgstr "ドイツ語 (スイス、Macintosh)"
+msgid "bg"
+msgstr "bg"
#: ../rules/base.xml.in.h:337
-msgid "German (Switzerland, Sun dead keys)"
-msgstr "ドイツ語 (スイス語、Sun デッドキー付き)"
+msgid "Bulgarian"
+msgstr "ブルガリア語"
#: ../rules/base.xml.in.h:338
-msgid "German (Switzerland, eliminate dead keys)"
-msgstr "ドイツ語 (スイス、デッドキー無し)"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "ブルガリア語 (伝統的な表音)"
#: ../rules/base.xml.in.h:339
-msgid "German (Switzerland, legacy)"
-msgstr "ドイツ語 (スイス、legacy)"
+msgid "Bulgarian (new phonetic)"
+msgstr "ブルガリア語 (新表音)"
#: ../rules/base.xml.in.h:340
-msgid "German (dead acute)"
-msgstr "ドイツ語 (デッド acute キー付き)"
-
-#: ../rules/base.xml.in.h:341
-msgid "German (dead grave acute)"
-msgstr "ドイツ語 (デッド grave acute キー付き)"
+msgid "Arabic (Morocco)"
+msgstr "アラビア語 (モロッコ)"
-#: ../rules/base.xml.in.h:342
-msgid "German (eliminate dead keys)"
-msgstr "ドイツ語 (デッドキー無し)"
+#. Keyboard indicator for French layouts
+#: ../rules/base.xml.in.h:342 ../rules/base.extras.xml.in.h:3
+msgid "fr"
+msgstr "fr"
#: ../rules/base.xml.in.h:343
-msgid "Greek"
-msgstr "ギリシャ語"
-
-#: ../rules/base.xml.in.h:344
-msgid "Greek (eliminate dead keys)"
-msgstr "ギリシャ語 (デッドキー無し)"
+msgid "French (Morocco)"
+msgstr "フランス語 (モロッコ)"
+#. Keyboard indicator for Berber layouts
#: ../rules/base.xml.in.h:345
-msgid "Greek (extended)"
-msgstr "ギリシャ語 (拡張)"
+msgid "ber"
+msgstr "ber"
#: ../rules/base.xml.in.h:346
-msgid "Greek (polytonic)"
-msgstr "ギリシャ語 (表音)"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr ""
#: ../rules/base.xml.in.h:347
-msgid "Greek (simple)"
-msgstr "ギリシャ語 (標準)"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr ""
+# ベルベル語? ISO 639 ではベルベル諸語となっている
+# 出典確認
#: ../rules/base.xml.in.h:348
-msgid "Gujarati"
-msgstr "グジャラート語"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr ""
#: ../rules/base.xml.in.h:349
-msgid "Gyration"
-msgstr "Gyration"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr ""
#: ../rules/base.xml.in.h:350
-msgid "HTC Dream"
-msgstr "HTC Dream"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr ""
#: ../rules/base.xml.in.h:351
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
-
-#: ../rules/base.xml.in.h:352
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard for Mac"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr ""
+#. Keyboard indicator for Cameroon layouts
#: ../rules/base.xml.in.h:353
-msgid "Hausa"
-msgstr "ハウサ語"
+msgid "cm"
+msgstr "cm"
#: ../rules/base.xml.in.h:354
-msgid "Hebrew"
-msgstr "ヘブライ語"
+msgid "English (Cameroon)"
+msgstr "英語 (カメルーン)"
#: ../rules/base.xml.in.h:355
-msgid "Hebrew (Biblical, Tiro)"
-msgstr "ヘブライ語 (Biblical, Tiro)"
+msgid "French (Cameroon)"
+msgstr "フランス語 (カメルーン)"
#: ../rules/base.xml.in.h:356
-msgid "Hebrew (lyx)"
-msgstr "ヘブライ語 (lyx)"
+msgid "Cameroon Multilingual (qwerty)"
+msgstr "カメルーン複数言語 (qwerty)"
#: ../rules/base.xml.in.h:357
-msgid "Hebrew (phonetic)"
-msgstr "ヘブライ語 (表音)"
+msgid "Cameroon Multilingual (azerty)"
+msgstr "カメルーン複数言語 (azerty)"
#: ../rules/base.xml.in.h:358
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard インターネットキーボード"
-
-#: ../rules/base.xml.in.h:359
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 ノートブック"
+msgid "Cameroon Multilingual (Dvorak)"
+msgstr "カメルーン複数言語 (Dvorak)"
+#. Keyboard indicator for Burmese layouts
#: ../rules/base.xml.in.h:360
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "my"
+msgstr "my"
#: ../rules/base.xml.in.h:361
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "Burmese"
+msgstr "ビルマ語"
-#: ../rules/base.xml.in.h:362
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+#: ../rules/base.xml.in.h:362 ../rules/base.extras.xml.in.h:4
+msgid "French (Canada)"
+msgstr "フランス語 (カナダ)"
#: ../rules/base.xml.in.h:363
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "French (Canada, Dvorak)"
+msgstr "フランス語 (カナダ、Dvorak)"
#: ../rules/base.xml.in.h:364
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "French (Canada, legacy)"
+msgstr "フランス語 (カナダ、legacy)"
#: ../rules/base.xml.in.h:365
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "Canadian Multilingual"
+msgstr "カナダ複数言語"
#: ../rules/base.xml.in.h:366
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "Canadian Multilingual (first part)"
+msgstr "カナダ複数言語 (first part)"
#: ../rules/base.xml.in.h:367
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
-
-#: ../rules/base.xml.in.h:368
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x マルチメディアキーボード"
+msgid "Canadian Multilingual (second part)"
+msgstr "カナダ複数言語 (second part)"
+#. Keyboard indicator for Inuktikut layouts
#: ../rules/base.xml.in.h:369
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "ike"
+msgstr "ike"
+# ISO 639、CLDRなどを要再調査
#: ../rules/base.xml.in.h:370
-msgid "Hexadecimal"
-msgstr "十六進数"
+msgid "Inuktitut"
+msgstr "イヌクティトゥト語"
#: ../rules/base.xml.in.h:371
-msgid "Hindi (Bolnagri)"
-msgstr "ヒンディー語 (Bolnagri)"
+msgid "English (Canada)"
+msgstr "英語 (カナダ)"
#: ../rules/base.xml.in.h:372
-msgid "Hindi (Wx)"
-msgstr "ヒンディー語 (Wx)"
-
-#: ../rules/base.xml.in.h:373
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "フランス語 (コンゴ民主共和国)"
+#. Keyboard indicator for Taiwanese layouts
#: ../rules/base.xml.in.h:374
-msgid "Htc Dream phone"
-msgstr "Htc Dream phone"
+msgid "zh"
+msgstr "zh"
#: ../rules/base.xml.in.h:375
-msgid "Hungarian"
-msgstr "ハンガリー語"
+msgid "Chinese"
+msgstr "中国語"
+# ISO 639
#: ../rules/base.xml.in.h:376
-msgid "Hungarian (101/qwerty/comma/dead keys)"
-msgstr "ハンガリー語 (101/qwerty/comma/デッドキー付き)"
+msgid "Tibetan"
+msgstr "チベット語"
#: ../rules/base.xml.in.h:377
-msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
-msgstr "ハンガリー語 (101/qwerty/comma/デッドキー無し)"
+msgid "Tibetan (with ASCII numerals)"
+msgstr "チベット語 (ASCII 数字付き)"
+# ISO 639
#: ../rules/base.xml.in.h:378
-msgid "Hungarian (101/qwerty/dot/dead keys)"
-msgstr "ハンガリー語 (101/qwerty/dot/デッドキー付き)"
-
-#: ../rules/base.xml.in.h:379
-msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
-msgstr "ハンガリー語 (101/qwerty/dot/デッドキー無し)"
+msgid "Uyghur"
+msgstr "ウイグル語"
+#. Keyboard indicator for Croatian layouts
#: ../rules/base.xml.in.h:380
-msgid "Hungarian (101/qwertz/comma/dead keys)"
-msgstr "ハンガリー語 (101/qwertz/comma/デッドキー付き)"
+msgid "hr"
+msgstr "hr"
#: ../rules/base.xml.in.h:381
-msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
-msgstr "ハンガリー語 (101/qwertz/comma/デッドキー無し)"
+msgid "Croatian"
+msgstr "クロアチア語"
#: ../rules/base.xml.in.h:382
-msgid "Hungarian (101/qwertz/dot/dead keys)"
-msgstr "ハンガリー語 (101/qwertz/dot/dead keys)"
+msgid "Croatian (use guillemets for quotes)"
+msgstr "クロアチア語 (use guillemets for quotes)"
#: ../rules/base.xml.in.h:383
-msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
-msgstr "ハンガリー語 (101/qwertz/dot/デッドキー無し)"
+msgid "Croatian (use Croatian digraphs)"
+msgstr "クロアチア語 (クロアチア語二重字付き)"
#: ../rules/base.xml.in.h:384
-msgid "Hungarian (102/qwerty/comma/dead keys)"
-msgstr "ハンガリー語 (102/qwerty/comma/デッドキー付き)"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "クロアチア語 (クロアチア語二重字付き US キーボード)"
#: ../rules/base.xml.in.h:385
-msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
-msgstr "ハンガリー語 (102/qwerty/comma/デッドキー無し)"
-
-#: ../rules/base.xml.in.h:386
-msgid "Hungarian (102/qwerty/dot/dead keys)"
-msgstr "ハンガリー語 (102/qwerty/dot/デッドキー付き)"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "クロアチア語 (クロアチア語文字付き US キーボード)"
-#: ../rules/base.xml.in.h:387
-msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
-msgstr "ハンガリー語 (102/qwerty/dot/デッドキー無し)"
+#. Keyboard indicator for Chech layouts
+#: ../rules/base.xml.in.h:387 ../rules/base.extras.xml.in.h:73
+msgid "cs"
+msgstr "cs"
-#: ../rules/base.xml.in.h:388
-msgid "Hungarian (102/qwertz/comma/dead keys)"
-msgstr "ハンガリー語 (102/qwertz/comma/デッドキー付き)"
+#: ../rules/base.xml.in.h:388 ../rules/base.extras.xml.in.h:74
+msgid "Czech"
+msgstr "チェコ語"
#: ../rules/base.xml.in.h:389
-msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
-msgstr "ハンガリー語 (102/qwertz/comma/デッドキー無し)"
+msgid "Czech (with &lt;\\|&gt; key)"
+msgstr "チェコ語 (&lt;\\|&gt; キー付き)"
#: ../rules/base.xml.in.h:390
-msgid "Hungarian (102/qwertz/dot/dead keys)"
-msgstr "ハンガリー語 (102/qwertz/dot/デッドキー付き)"
+msgid "Czech (qwerty)"
+msgstr "チェコ語 (qwerty)"
#: ../rules/base.xml.in.h:391
-msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
-msgstr "ハンガリー語 (102/qwertz/dot/デッドキー無し)"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "チェコ語 (qwerty、Backslash 拡張)"
#: ../rules/base.xml.in.h:392
-msgid "Hungarian (eliminate dead keys)"
-msgstr "ハンガリー語 (デッドキー無し)"
+msgid "Czech (UCW layout, accented letters only)"
+msgstr "チェコ語 (UCW 配列、アクセント付き文字のみ)"
#: ../rules/base.xml.in.h:393
-msgid "Hungarian (qwerty)"
-msgstr "ハンガリー語 (qwerty)"
-
-#: ../rules/base.xml.in.h:394
-msgid "Hungarian (standard)"
-msgstr "ハンガリー語 (標準)"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "チェコ語 (チェコ UCW サポート付き US Dvorak)"
-#: ../rules/base.xml.in.h:395
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper を Win キーに割り当てる"
+#. Keyboard indicator for Danish layouts
+#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:76
+msgid "da"
+msgstr "da"
-#: ../rules/base.xml.in.h:396
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:77
+msgid "Danish"
+msgstr "デンマーク語"
#: ../rules/base.xml.in.h:397
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Danish (eliminate dead keys)"
+msgstr "デンマーク語 (デッドキー無し)"
#: ../rules/base.xml.in.h:398
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Danish (Macintosh)"
+msgstr "デンマーク語 (Macintosh)"
#: ../rules/base.xml.in.h:399
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Danish (Macintosh, eliminate dead keys)"
+msgstr "デンマーク語 (Macintosh、デッドキー無し)"
#: ../rules/base.xml.in.h:400
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
-
-#: ../rules/base.xml.in.h:401
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Danish (Dvorak)"
+msgstr "デンマーク語 (Dvorak)"
-#: ../rules/base.xml.in.h:402
-msgid "Icelandic"
-msgstr "アイスランド語"
+#. Keyboard indicator for Dutch layouts
+#: ../rules/base.xml.in.h:402 ../rules/base.extras.xml.in.h:79
+msgid "nl"
+msgstr "nl"
-#: ../rules/base.xml.in.h:403
-msgid "Icelandic (Dvorak)"
-msgstr "アイスランド語 (Dvorak)"
+#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:80
+msgid "Dutch"
+msgstr "オランダ語"
#: ../rules/base.xml.in.h:404
-msgid "Icelandic (Macintosh)"
-msgstr "アイスランド語 (Macintosh)"
+msgid "Dutch (Sun dead keys)"
+msgstr "オランダ語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:405
-msgid "Icelandic (Sun dead keys)"
-msgstr "アイスランド語 (Sun デッドキー付き)"
+msgid "Dutch (Macintosh)"
+msgstr "オランダ語 (Macintosh)"
#: ../rules/base.xml.in.h:406
-msgid "Icelandic (eliminate dead keys)"
-msgstr "アイスランド語 (デッドキー無し)"
-
-#: ../rules/base.xml.in.h:407
-msgid "Igbo"
-msgstr "イボ語"
+msgid "Dutch (standard)"
+msgstr "オランダ語 (標準)"
+#. Keyboard indicator for Dzongkha layouts
#: ../rules/base.xml.in.h:408
-msgid "Indian"
-msgstr ""
+msgid "dz"
+msgstr "dz"
-# ISO 639、CLDRなどを要再調査
+# ISO 639 より
+# ブータン
#: ../rules/base.xml.in.h:409
-msgid "Inuktitut"
-msgstr "イヌクティトゥト語"
-
-# ISO 639 には Iraqi 自体項目が無い
-#: ../rules/base.xml.in.h:410
-msgid "Iraqi"
-msgstr "イラク語"
+msgid "Dzongkha"
+msgstr "ゾンカ語"
-#: ../rules/base.xml.in.h:411
-msgid "Irish"
-msgstr "アイルランド語"
+#. Keyboard indicator for Estonian layouts
+#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:82
+msgid "et"
+msgstr "et"
-#: ../rules/base.xml.in.h:412
-msgid "Irish (UnicodeExpert)"
-msgstr "アイルランド語 (UnicodeExpert)"
+#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:83
+msgid "Estonian"
+msgstr "エストニア語"
#: ../rules/base.xml.in.h:413
-msgid "Italian"
-msgstr "イタリア語"
+msgid "Estonian (eliminate dead keys)"
+msgstr "エストニア語 (デッドキー無し)"
#: ../rules/base.xml.in.h:414
-msgid "Italian (Macintosh)"
-msgstr "イタリア語 (Macintosh)"
+msgid "Estonian (Dvorak)"
+msgstr "エストニア語 (Dvorak)"
#: ../rules/base.xml.in.h:415
-msgid "Italian (US keyboard with Italian letters)"
-msgstr "イタリア語 (イタリア文字付き US キーボード)"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "エストニア語 (エストニア文字付き US キーボード)"
-#: ../rules/base.xml.in.h:416
-msgid "Italian (eliminate dead keys)"
-msgstr "イタリア語 (デッドキー無し)"
+# ISO 639
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:16
+msgid "Persian"
+msgstr "ペルシア語"
#: ../rules/base.xml.in.h:417
-msgid "Japanese"
-msgstr "日本語"
-
-#: ../rules/base.xml.in.h:418
-msgid "Japanese (Kana 86)"
-msgstr "日本語 (かな 86)"
+msgid "Persian (with Persian Keypad)"
+msgstr "ペルシア語 (ペルシア語キーパッド付き)"
+#. Keyboard indicator for Kurdish layouts
#: ../rules/base.xml.in.h:419
-msgid "Japanese (Kana)"
-msgstr "日本語 (かな)"
+msgid "ku"
+msgstr "ku"
#: ../rules/base.xml.in.h:420
-msgid "Japanese (Macintosh)"
-msgstr "日本語 (Macintosh)"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "クルド語 (イラン、ラテン Q)"
#: ../rules/base.xml.in.h:421
-msgid "Japanese (OADG 109A)"
-msgstr "日本語 (OADG 109A)"
+msgid "Kurdish (Iran, F)"
+msgstr "クルド語 (イラン、F)"
#: ../rules/base.xml.in.h:422
-msgid "Japanese (PC-98xx Series)"
-msgstr "日本語 (PC-98xx シリーズ)"
+msgid "Kurdish (Iran, Latin Alt-Q)"
+msgstr "クルド語 (イラン、ラテン Alt-Q)"
#: ../rules/base.xml.in.h:423
-msgid "Japanese keyboard options"
-msgstr "日本語キーボードオプション"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "クルド語 (イラン、アラビア語ラテン)"
-# ISO 639 より
+# ISO 639 には Iraqi 自体項目が無い
#: ../rules/base.xml.in.h:424
-msgid "Kalmyk"
-msgstr "カルミック語"
+msgid "Iraqi"
+msgstr "イラク語"
#: ../rules/base.xml.in.h:425
-msgid "Kana Lock key is locking"
-msgstr "かなロックキーのロック動作を有効にする"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "クルド語 (イラク、ラテン Q)"
-# インドのカンナダ語
#: ../rules/base.xml.in.h:426
-msgid "Kannada"
-msgstr "カンナダ語"
+msgid "Kurdish (Iraq, F)"
+msgstr "クルド語 (イラク、F)"
-# ポーランド北部の言語
-# カシューブ方言ともいう (世界大百科事典)
#: ../rules/base.xml.in.h:427
-msgid "Kashubian"
-msgstr "カシューブ語"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "クルド語 (イラク、ラテン Alt-Q)"
#: ../rules/base.xml.in.h:428
-msgid "Kazakh"
-msgstr "カザフ語"
-
-#: ../rules/base.xml.in.h:429
-msgid "Kazakh (with Russian)"
-msgstr "カザフ語 (ロシア語付き)"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "クルド語 (イラク、アラビア語ラテン)"
+#. Keyboard indicator for Faroese layouts
#: ../rules/base.xml.in.h:430
-msgid "Key sequence to kill the X server"
-msgstr "X サーバーを終了するためのキーシーケンス"
+msgid "fo"
+msgstr "fo"
+# フェロー諸島の言語
#: ../rules/base.xml.in.h:431
-msgid "Key to choose 3rd level"
-msgstr "第3層を選択するキー"
+msgid "Faroese"
+msgstr "フェロー語"
#: ../rules/base.xml.in.h:432
-msgid "Key to choose 5th level"
-msgstr "第5層を選択するキー"
-
-#: ../rules/base.xml.in.h:433
-msgid "Key(s) to change layout"
-msgstr "配列を変更する時に使用するキー"
+msgid "Faroese (eliminate dead keys)"
+msgstr "フェロー語 (デッドキー無し)"
-#: ../rules/base.xml.in.h:434
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+#. Keyboard indicator for Finnish layouts
+#: ../rules/base.xml.in.h:434 ../rules/base.extras.xml.in.h:85
+msgid "fi"
+msgstr "fi"
-#: ../rules/base.xml.in.h:435
-msgid "Khmer (Cambodia)"
-msgstr "クメール語 (カンボジア)"
+# フィン語とも言う
+#: ../rules/base.xml.in.h:435 ../rules/base.extras.xml.in.h:86
+msgid "Finnish"
+msgstr "フィンランド語"
-# ケニアの言語
-# キクーユ語、キクーユ族
#: ../rules/base.xml.in.h:436
-msgid "Kikuyu"
-msgstr "キクユ語"
+msgid "Finnish (classic)"
+msgstr "フィンランド語 (古典的)"
#: ../rules/base.xml.in.h:437
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "フィンランド語 (古典的、デッドキー無し)"
-# ISO 639より
+# ISO 639 より
#: ../rules/base.xml.in.h:438
-msgid "Komi"
-msgstr "コミ語"
+msgid "Northern Saami (Finland)"
+msgstr "北サーミ語 (フィンランド)"
#: ../rules/base.xml.in.h:439
-msgid "Korean"
-msgstr "朝鮮語、韓国語"
+msgid "Finnish (Macintosh)"
+msgstr "フィンランド語 (Macintosh)"
-#: ../rules/base.xml.in.h:440
-msgid "Korean (101/104 key compatible)"
-msgstr "朝鮮語、韓国語 (101/104 キー互換)"
+#: ../rules/base.xml.in.h:440 ../rules/base.extras.xml.in.h:88
+msgid "French"
+msgstr "フランス語"
#: ../rules/base.xml.in.h:441
-msgid "Kurdish (Iran, Arabic-Latin)"
-msgstr "クルド語 (イラン、アラビア語ラテン)"
+msgid "French (eliminate dead keys)"
+msgstr "フランス語 (デッドキー無し)"
#: ../rules/base.xml.in.h:442
-msgid "Kurdish (Iran, F)"
-msgstr "クルド語 (イラン、F)"
+msgid "French (Sun dead keys)"
+msgstr "フランス語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:443
-msgid "Kurdish (Iran, Latin Alt-Q)"
-msgstr "クルド語 (イラン、ラテン Alt-Q)"
+msgid "French (alternative)"
+msgstr "フランス語 (代替)"
#: ../rules/base.xml.in.h:444
-msgid "Kurdish (Iran, Latin Q)"
-msgstr "クルド語 (イラン、ラテン Q)"
+msgid "French (alternative, latin-9 only)"
+msgstr "フランス語 (代替、latin-9 のみ)"
#: ../rules/base.xml.in.h:445
-msgid "Kurdish (Iraq, Arabic-Latin)"
-msgstr "クルド語 (イラク、アラビア語ラテン)"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "フランス語 (代替、デッドキー無し)"
#: ../rules/base.xml.in.h:446
-msgid "Kurdish (Iraq, F)"
-msgstr "クルド語 (イラク、F)"
+msgid "French (alternative, Sun dead keys)"
+msgstr "フランス語 (代替、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:447
-msgid "Kurdish (Iraq, Latin Alt-Q)"
-msgstr "クルド語 (イラク、ラテン Alt-Q)"
+msgid "French (legacy, alternative)"
+msgstr "フランス語 (legacy、代替)"
#: ../rules/base.xml.in.h:448
-msgid "Kurdish (Iraq, Latin Q)"
-msgstr "クルド語 (イラク、ラテン Q)"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "フランス語 (legacy、代替、デッドキー無し)"
#: ../rules/base.xml.in.h:449
-msgid "Kurdish (Syria, F)"
-msgstr "クルド語 (シリア、F)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "フランス語 (legacy、代替、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:450
-msgid "Kurdish (Syria, Latin Alt-Q)"
-msgstr "クルド語 (シリア、ラテン Alt-Q)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "フランス語 (Bepo, ergonomic, Dvorak way)"
#: ../rules/base.xml.in.h:451
-msgid "Kurdish (Syria, Latin Q)"
-msgstr "クルド語 (シリア、ラテン Q)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "フランス語 (Bepo, ergonomic, Dvorak way, latin-9 only)"
#: ../rules/base.xml.in.h:452
-msgid "Kurdish (Turkey, F)"
-msgstr "クルド語 (トルコ、F)"
+msgid "French (Dvorak)"
+msgstr "フランス語 (Dvorak)"
#: ../rules/base.xml.in.h:453
-msgid "Kurdish (Turkey, Latin Alt-Q)"
-msgstr "クルド語 (トルコ、ラテン Alt-Q)"
+msgid "French (Macintosh)"
+msgstr "フランス語 (Macintosh)"
#: ../rules/base.xml.in.h:454
-msgid "Kurdish (Turkey, Latin Q)"
-msgstr "クルド語 (トルコ、ラテン Q)"
+msgid "French (Breton)"
+msgstr "フランス語 (ブレトン)"
-# ISO 639 より
+# ISO 639
#: ../rules/base.xml.in.h:455
-msgid "Kyrgyz"
-msgstr "キルギス語"
+msgid "Occitan"
+msgstr "オック語"
#: ../rules/base.xml.in.h:456
-msgid "Kyrgyz (phonetic)"
-msgstr "キルギス語 (表音)"
+msgid "Georgian (France, AZERTY Tskapo)"
+msgstr "グルジア語 (フランス、AZERTY Tskapo)"
-# ISO 639 より
-# ラオスのラオ語
#: ../rules/base.xml.in.h:457
-msgid "Lao"
-msgstr "ラオ語"
+msgid "English (Ghana)"
+msgstr "英語 (ガーナ)"
#: ../rules/base.xml.in.h:458
-msgid "Lao (STEA proposed standard layout)"
-msgstr "ラオ語 (STEA 提案標準配列)"
-
-#: ../rules/base.xml.in.h:459
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "ラップトップ/ノートブック Compaq (Armada等) ラップトップキーボード"
+msgid "English (Ghana, multilingual)"
+msgstr "英語 (ガーナ、複数言語)"
+#. Keyboard indicator for Akan layouts
#: ../rules/base.xml.in.h:460
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "ラップトップ/ノートブック Compaq (Presario等) インターネットキーボード"
+msgid "ak"
+msgstr "ak"
+# アカン語? ISO コードと合わせる必要があり
#: ../rules/base.xml.in.h:461
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "ラップトップ/ノートブック eMachines m68xx"
-
-# ISO 639 ではラトヴィア語となっているが、外務省の
-# 国表記、KDEなどではラトビア語となっている
-#: ../rules/base.xml.in.h:462 ../rules/base.extras.xml.in.h:16
-msgid "Latvian"
-msgstr "ラトビア語"
+#, fuzzy
+msgid "Akan"
+msgstr "コメント内でファイル終端 (EOF) に達しました。改行が挿入されました"
+#. Keyboard indicator for Ewe layouts
#: ../rules/base.xml.in.h:463
-msgid "Latvian (F variant)"
-msgstr "ラトビア語 (F variant)"
+msgid "ee"
+msgstr "ee"
+# ISO 639 より
+# ガーナの言語
#: ../rules/base.xml.in.h:464
-msgid "Latvian (adapted)"
-msgstr "ラトビア語 (adapted)"
-
-#: ../rules/base.xml.in.h:465
-msgid "Latvian (apostrophe variant)"
-msgstr "ラトビア語 (apostrophe variant)"
+msgid "Ewe"
+msgstr "エウェ語"
+#. Keyboard indicator for Fula layouts
#: ../rules/base.xml.in.h:466
-msgid "Latvian (ergonomic, ŪGJRMV)"
-msgstr "ラトビア語 (ergonomic, ŪGJRMV)"
+msgid "ff"
+msgstr "ff"
+# ISO 639 では Fulah
#: ../rules/base.xml.in.h:467
-msgid "Latvian (modern)"
-msgstr "ラトビア語 (modern)"
-
-#: ../rules/base.xml.in.h:468
-msgid "Latvian (tilde variant)"
-msgstr "ラトビア語 (tilde variant)"
+msgid "Fula"
+msgstr "フラ語"
+#. Keyboard indicator for Ga layouts
#: ../rules/base.xml.in.h:469
-msgid "Left Alt"
-msgstr "左 Alt"
+msgid "gaa"
+msgstr "gaa"
+# ISO 639
#: ../rules/base.xml.in.h:470
-msgid "Left Alt (while pressed)"
-msgstr "左 Alt (押している間)"
-
-#: ../rules/base.xml.in.h:471
-msgid "Left Alt is swapped with Left Win"
-msgstr "左 Alt と左 Win を入れ替える"
+msgid "Ga"
+msgstr "ガ語"
+#. Keyboard indicator for Hausa layouts
#: ../rules/base.xml.in.h:472
-msgid "Left Ctrl"
-msgstr "左 Ctrl"
+msgid "ha"
+msgstr "ha"
#: ../rules/base.xml.in.h:473
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "左 Ctrl (最初の配列に変更する)、右 Ctrl (最後の配列に変更する)"
-
-#: ../rules/base.xml.in.h:474
-msgid "Left Ctrl as Meta"
-msgstr "左 Ctrl を Meta として扱う"
+msgid "Hausa"
+msgstr "ハウサ語"
+#. Keyboard indicator for Avatime layouts
#: ../rules/base.xml.in.h:475
-msgid "Left Ctrl+Left Shift"
-msgstr "左 Ctrl+左 Shift"
+msgid "avn"
+msgstr "avn"
#: ../rules/base.xml.in.h:476
-msgid "Left Shift"
-msgstr "左 Shift"
+msgid "Avatime"
+msgstr ""
#: ../rules/base.xml.in.h:477
-msgid "Left Win"
-msgstr "左 Win"
+msgid "English (Ghana, GILLBT)"
+msgstr "英語 (ガーナ、GILLBT)"
#: ../rules/base.xml.in.h:478
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "左 Win (最初の配列に変更する)、右 Win/Menu (最後の配列に変更する)"
-
-#: ../rules/base.xml.in.h:479
-msgid "Left Win (while pressed)"
-msgstr "左 Win (押している間)"
+msgid "French (Guinea)"
+msgstr "フランス語 (ギニア)"
+#. Keyboard indicator for Georgian layouts
#: ../rules/base.xml.in.h:480
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "左 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+msgid "ka"
+msgstr "ka"
#: ../rules/base.xml.in.h:481
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "左 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する。固定を解除する場合は第5層を選択するキーのいずれかを押す"
+msgid "Georgian"
+msgstr "グルジア語"
#: ../rules/base.xml.in.h:482
-msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
-msgstr "左 Ctrl+ 左tWin (最初の配列に変更する)、右 Ctrl+Menu (2番目の配列に変更する)"
+msgid "Georgian (ergonomic)"
+msgstr "グルジア語 (人間工学)"
#: ../rules/base.xml.in.h:483
-msgid "Legacy"
-msgstr ""
+msgid "Georgian (MESS)"
+msgstr "グルジア語 (MESS)"
#: ../rules/base.xml.in.h:484
-msgid "Legacy Wang 724"
-msgstr ""
+msgid "Russian (Georgia)"
+msgstr "ロシア語 (Georgia)"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:486
-msgid "Legacy key with comma"
-msgstr ""
+#: ../rules/base.xml.in.h:485
+msgid "Ossetian (Georgia)"
+msgstr "オセット語 (Georgia)"
+
+#: ../rules/base.xml.in.h:486 ../rules/base.extras.xml.in.h:11
+msgid "German"
+msgstr "ドイツ語"
#: ../rules/base.xml.in.h:487
-msgid "Legacy key with dot"
-msgstr ""
+msgid "German (dead acute)"
+msgstr "ドイツ語 (デッド acute キー付き)"
-#: ../rules/base.xml.in.h:488 ../rules/base.extras.xml.in.h:25
-msgid "Lithuanian"
-msgstr "リトアニア語"
+#: ../rules/base.xml.in.h:488
+msgid "German (dead grave acute)"
+msgstr "ドイツ語 (デッド grave acute キー付き)"
#: ../rules/base.xml.in.h:489
-msgid "Lithuanian (IBM LST 1205-92)"
-msgstr "リトアニア語 (IBM LST 1205-92)"
+msgid "German (eliminate dead keys)"
+msgstr "ドイツ語 (デッドキー無し)"
#: ../rules/base.xml.in.h:490
-msgid "Lithuanian (LEKP)"
-msgstr "リトアニア語 (LEKP)"
+msgid "Romanian (Germany)"
+msgstr "ルーマニア語 (ドイツ)"
#: ../rules/base.xml.in.h:491
-msgid "Lithuanian (LEKPa)"
-msgstr "リトアニア語 (LEKPa)"
+msgid "Romanian (Germany, eliminate dead keys)"
+msgstr "ルーマニア語 (ドイツ、デッドキー無し)"
#: ../rules/base.xml.in.h:492
-msgid "Lithuanian (US keyboard with Lithuanian letters)"
-msgstr "リトアニア語 (リトアニア文字付き US キーボード)"
+msgid "German (Dvorak)"
+msgstr "ドイツ語 (Dvorak)"
#: ../rules/base.xml.in.h:493
-msgid "Lithuanian (standard)"
-msgstr "リトアニア語 (標準)"
+msgid "German (Sun dead keys)"
+msgstr "ドイツ語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:494
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access キーボード"
+msgid "German (Neo 2)"
+msgstr "ドイツ語 (Neo 2)"
#: ../rules/base.xml.in.h:495
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech コードレスデスクトップ"
+msgid "German (Macintosh)"
+msgstr "ドイツ語 (Macintosh)"
#: ../rules/base.xml.in.h:496
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech コードレスデスクトップ (代替オプション)"
+msgid "German (Macintosh, eliminate dead keys)"
+msgstr "ドイツ語 (Macintosh、デッドキー無し)"
#: ../rules/base.xml.in.h:497
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech コードレスデスクトップ EX110"
+msgid "Lower Sorbian"
+msgstr ""
#: ../rules/base.xml.in.h:498
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech コードレスデスクトップ LX-300"
+msgid "Lower Sorbian (qwertz)"
+msgstr ""
#: ../rules/base.xml.in.h:499
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech コードレスデスクトップナビゲーター"
+msgid "German (qwerty)"
+msgstr "ドイツ語 (qwerty)"
#: ../rules/base.xml.in.h:500
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech コードレスデスクトップ Optical"
-
-#: ../rules/base.xml.in.h:501
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech コードレスデスクトッププロ (代替オプション 2)"
+msgid "Russian (Germany, phonetic)"
+msgstr "ロシア語 (ドイツ、表音)"
-#: ../rules/base.xml.in.h:502
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech コードレスデスクトップ iTouch"
+#. Keyboard indicator for Greek layouts
+#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+msgid "gr"
+msgstr "gr"
-#: ../rules/base.xml.in.h:503
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech コードレス・フリーダム/デスクトップ・ナビゲーター"
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+msgid "Greek"
+msgstr "ギリシャ語"
#: ../rules/base.xml.in.h:504
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15、G15daemon による追加キー"
+msgid "Greek (simple)"
+msgstr "ギリシャ語 (標準)"
#: ../rules/base.xml.in.h:505
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech 標準キーボード"
+msgid "Greek (extended)"
+msgstr "ギリシャ語 (拡張)"
#: ../rules/base.xml.in.h:506
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech インターネット 350 キーボード"
+msgid "Greek (eliminate dead keys)"
+msgstr "ギリシャ語 (デッドキー無し)"
#: ../rules/base.xml.in.h:507
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech インターネットキーボード"
-
-#: ../rules/base.xml.in.h:508
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech インターネットナビゲーターキーボード"
+msgid "Greek (polytonic)"
+msgstr "ギリシャ語 (表音)"
+#. Keyboard indicator for Hungarian layouts
#: ../rules/base.xml.in.h:509
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite キーボード"
+msgid "hu"
+msgstr "hu"
#: ../rules/base.xml.in.h:510
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X コードレスメディアデスクトップキーボード"
+msgid "Hungarian"
+msgstr "ハンガリー語"
#: ../rules/base.xml.in.h:511
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X キーボード"
+msgid "Hungarian (standard)"
+msgstr "ハンガリー語 (標準)"
#: ../rules/base.xml.in.h:512
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge キーボード"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "ハンガリー語 (デッドキー無し)"
#: ../rules/base.xml.in.h:513
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo キーボード"
+msgid "Hungarian (qwerty)"
+msgstr "ハンガリー語 (qwerty)"
#: ../rules/base.xml.in.h:514
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "ハンガリー語 (101/qwertz/comma/デッドキー付き)"
#: ../rules/base.xml.in.h:515
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch コードレスキーボード (モデル Y-RB6)"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "ハンガリー語 (101/qwertz/comma/デッドキー無し)"
#: ../rules/base.xml.in.h:516
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch インターネットナビゲーターキーボード SE"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "ハンガリー語 (101/qwertz/dot/dead keys)"
#: ../rules/base.xml.in.h:517
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch インターネットナビゲーターキーボード SE (USB)"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "ハンガリー語 (101/qwertz/dot/デッドキー無し)"
#: ../rules/base.xml.in.h:518
-msgid "Lower Sorbian"
-msgstr ""
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "ハンガリー語 (101/qwerty/comma/デッドキー付き)"
#: ../rules/base.xml.in.h:519
-msgid "Lower Sorbian (qwertz)"
-msgstr ""
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "ハンガリー語 (101/qwerty/comma/デッドキー無し)"
#: ../rules/base.xml.in.h:520
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "ハンガリー語 (101/qwerty/dot/デッドキー付き)"
#: ../rules/base.xml.in.h:521
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "ハンガリー語 (101/qwerty/dot/デッドキー無し)"
#: ../rules/base.xml.in.h:522
-msgid "Macedonian"
-msgstr "マケドニア語"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "ハンガリー語 (102/qwertz/comma/デッドキー付き)"
#: ../rules/base.xml.in.h:523
-msgid "Macedonian (eliminate dead keys)"
-msgstr "マケドニア語 (デッドキー無し)"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "ハンガリー語 (102/qwertz/comma/デッドキー無し)"
#: ../rules/base.xml.in.h:524
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "ハンガリー語 (102/qwertz/dot/デッドキー付き)"
#: ../rules/base.xml.in.h:525
-msgid "Macintosh Old"
-msgstr "Macintosh Old"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "ハンガリー語 (102/qwertz/dot/デッドキー無し)"
#: ../rules/base.xml.in.h:526
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Caps Lock を追加の Backspace にする"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "ハンガリー語 (102/qwerty/comma/デッドキー付き)"
#: ../rules/base.xml.in.h:527
-msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
-msgstr "Caps Lock を追加の Control にするが、Caps_Lock キーコードはそのままにする"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "ハンガリー語 (102/qwerty/comma/デッドキー無し)"
#: ../rules/base.xml.in.h:528
-msgid "Make Caps Lock an additional ESC"
-msgstr "Caps Lock を追加の ESC にする"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "ハンガリー語 (102/qwerty/dot/デッドキー付き)"
#: ../rules/base.xml.in.h:529
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Caps Lock を追加の Hyper にする"
-
-#: ../rules/base.xml.in.h:530
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Caps Lock を追加の Num Lock にする"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "ハンガリー語 (102/qwerty/dot/デッドキー無し)"
+#. Keyboard indicator for Icelandic layouts
#: ../rules/base.xml.in.h:531
-msgid "Make Caps Lock an additional Super"
-msgstr "Caps Lock を追加の Super にする"
+msgid "is"
+msgstr "is"
-# ISO 639 より
#: ../rules/base.xml.in.h:532
-msgid "Malayalam"
-msgstr "マラヤーラム語"
+msgid "Icelandic"
+msgstr "アイスランド語"
#: ../rules/base.xml.in.h:533
-msgid "Malayalam (Lalitha)"
-msgstr "マラヤーラム語 (Lalitha)"
+msgid "Icelandic (Sun dead keys)"
+msgstr "アイスランド語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:534
-msgid "Malayalam (enhanced Inscript with Rupee Sign)"
-msgstr "マラヤーラム語 (ルピー記号付き拡張 Inscript)"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "アイスランド語 (デッドキー無し)"
-# ISO 639 より
#: ../rules/base.xml.in.h:535
-msgid "Maltese"
-msgstr "マルタ語"
+msgid "Icelandic (Macintosh)"
+msgstr "アイスランド語 (Macintosh)"
#: ../rules/base.xml.in.h:536
-msgid "Maltese (with US layout)"
-msgstr "マルタ語 (US 配列付き)"
-
-#: ../rules/base.xml.in.h:537
-msgid "Maori"
-msgstr "マオリ語"
+msgid "Icelandic (Dvorak)"
+msgstr "アイスランド語 (Dvorak)"
-# ISO 639 より
-#: ../rules/base.xml.in.h:538
-msgid "Mari"
-msgstr "マリ語"
+#. Keyboard indicator for Hebrew layouts
+#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+msgid "he"
+msgstr "he"
-#: ../rules/base.xml.in.h:539
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+msgid "Hebrew"
+msgstr "ヘブライ語"
#: ../rules/base.xml.in.h:540
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access キーボード"
+msgid "Hebrew (lyx)"
+msgstr "ヘブライ語 (lyx)"
#: ../rules/base.xml.in.h:541
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Hebrew (phonetic)"
+msgstr "ヘブライ語 (表音)"
#: ../rules/base.xml.in.h:542
-msgid "Menu"
-msgstr "Menu"
-
-#: ../rules/base.xml.in.h:543
-msgid "Menu as Right Ctrl"
-msgstr "Menu を右 Ctrl として扱う"
+msgid "Hebrew (Biblical, Tiro)"
+msgstr "ヘブライ語 (Biblical, Tiro)"
-#: ../rules/base.xml.in.h:544
-msgid "Meta is mapped to Left Win"
-msgstr "Meta を左 Win に割り当てる"
+#. Keyboard indicator for Italian layouts
+#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+msgid "it"
+msgstr "it"
-#: ../rules/base.xml.in.h:545
-msgid "Meta is mapped to Win keys"
-msgstr "Meta を Win キーに割り当てる"
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+msgid "Italian"
+msgstr "イタリア語"
#: ../rules/base.xml.in.h:546
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve キーボード 2000"
+msgid "Italian (eliminate dead keys)"
+msgstr "イタリア語 (デッドキー無し)"
#: ../rules/base.xml.in.h:547
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft インターネットキーボード"
+msgid "Italian (Macintosh)"
+msgstr "イタリア語 (Macintosh)"
#: ../rules/base.xml.in.h:548
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft インターネットキーボードプロ (スウェーデン語)"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "イタリア語 (イタリア文字付き US キーボード)"
#: ../rules/base.xml.in.h:549
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Georgian (Italy)"
+msgstr "グルジア語 (イタリア)"
#: ../rules/base.xml.in.h:550
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural キーボード Elite"
+msgid "Italian (IBM 142)"
+msgstr "イタリア語 (IBM 142)"
-#: ../rules/base.xml.in.h:551
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural キーボードプロ/ Microsoft インターネットキーボードプロ"
-
-#: ../rules/base.xml.in.h:552
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural キーボードプロ OEM"
+#. Keyboard indicator for Japanese layouts
+#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+msgid "ja"
+msgstr "ja"
-#: ../rules/base.xml.in.h:553
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural キーボードプロ USB / Microsoft インターネットキーボードプロ"
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+msgid "Japanese"
+msgstr "日本語"
#: ../rules/base.xml.in.h:554
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
-msgstr "Microsoft Natural ワイヤレスエルゴノミックキーボード 4000"
+msgid "Japanese (Kana)"
+msgstr "日本語 (かな)"
#: ../rules/base.xml.in.h:555
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural ワイヤレスエルゴノミックキーボード 7000"
+msgid "Japanese (Kana 86)"
+msgstr "日本語 (かな 86)"
#: ../rules/base.xml.in.h:556
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft オフィスキーボード"
+msgid "Japanese (OADG 109A)"
+msgstr "日本語 (OADG 109A)"
#: ../rules/base.xml.in.h:557
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft ワイヤレスマルチメディアキーボード 1.0A"
+msgid "Japanese (Macintosh)"
+msgstr "日本語 (Macintosh)"
#: ../rules/base.xml.in.h:558
-msgid "Miscellaneous compatibility options"
-msgstr "その他の互換性に関するオプション"
-
-# ISO 639 では蒙古語になっているが外務省表記を採用する
-#: ../rules/base.xml.in.h:559
-msgid "Mongolian"
-msgstr "モンゴル語"
+msgid "Japanese (Dvorak)"
+msgstr "日本語 (Dvorak)"
+#. Keyboard indicator for Kikuyu layouts
#: ../rules/base.xml.in.h:560
-msgid "Montenegrin"
-msgstr "モンテネグロ語"
+msgid "ki"
+msgstr "ki"
+# ISO 639 より
#: ../rules/base.xml.in.h:561
-msgid "Montenegrin (Cyrillic with guillemets)"
-msgstr "モンテネグロ語 (Cyrillic with guillemets)"
+msgid "Kyrgyz"
+msgstr "キルギス語"
#: ../rules/base.xml.in.h:562
-msgid "Montenegrin (Cyrillic)"
-msgstr "モンテネグロ語 (Cyrillic)"
-
-#: ../rules/base.xml.in.h:563
-msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
-msgstr "モンテネグロ語 (Cyrillic, Z and ZHE swapped)"
+msgid "Kyrgyz (phonetic)"
+msgstr "キルギス語 (表音)"
+#. Keyboard indicator for Khmer layouts
#: ../rules/base.xml.in.h:564
-msgid "Montenegrin (Latin Unicode qwerty)"
-msgstr "モンテネグロ語 (ラテンユニコード qwerty)"
+msgid "km"
+msgstr "km"
#: ../rules/base.xml.in.h:565
-msgid "Montenegrin (Latin Unicode)"
-msgstr "モンテネグロ語 (ラテンユニコード)"
-
-#: ../rules/base.xml.in.h:566
-msgid "Montenegrin (Latin qwerty)"
-msgstr "モンテネグロ語 (ラテン qwerty)"
+msgid "Khmer (Cambodia)"
+msgstr "クメール語 (カンボジア)"
+#. Keyboard indicator for Kazakh layouts
#: ../rules/base.xml.in.h:567
-msgid "Montenegrin (Latin with guillemets)"
-msgstr "モンテネグロ語 (Latin with guillemets)"
+msgid "kk"
+msgstr "kk"
#: ../rules/base.xml.in.h:568
-msgid "NICOLA-F style Backspace"
-msgstr "NICOLA-F スタイルの Backspace にする"
+msgid "Kazakh"
+msgstr "カザフ語"
#: ../rules/base.xml.in.h:569
-msgid "Nepali"
-msgstr "ネパール語"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "ロシア語 (カザフスタン、カザフ語付き)"
#: ../rules/base.xml.in.h:570
-msgid "Non-breakable space character at fourth level"
-msgstr "第4層で改行不可空白文字を入力する"
-
-#: ../rules/base.xml.in.h:571
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "第4層で改行不可空白文字を入力し、第六層で細い改行不可空白文字を入力する"
+msgid "Kazakh (with Russian)"
+msgstr "カザフ語 (ロシア語付き)"
+#. Keyboard indicator for Lao layouts
#: ../rules/base.xml.in.h:572
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "第4層で改行不可空白文字を入力し、第六層で細い改行不可空白文字を入力する (Ctrl+Shift 経由)"
+msgid "lo"
+msgstr "lo"
+# ISO 639 より
+# ラオスのラオ語
#: ../rules/base.xml.in.h:573
-msgid "Non-breakable space character at second level"
-msgstr "第2層で改行不可空白文字を入力する"
+msgid "Lao"
+msgstr "ラオ語"
#: ../rules/base.xml.in.h:574
-msgid "Non-breakable space character at third level"
-msgstr "第3層で改行不可空白文字を入力する"
-
-#: ../rules/base.xml.in.h:575
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "第3層で改行不可空白文字を入力し、第4層では何もしない"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "ラオ語 (STEA 提案標準配列)"
-#: ../rules/base.xml.in.h:576
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "第3層で改行不可空白文字を入力し、第4層で細い改行不可空白文字を入力する"
+#. Keyboard indicator for Spanish layouts
+#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+msgid "es"
+msgstr "es"
-# ISO 639 より
#: ../rules/base.xml.in.h:577
-msgid "Northern Saami (Finland)"
-msgstr "北サーミ語 (フィンランド)"
+msgid "Spanish (Latin American)"
+msgstr "スペイン語 (ラテンアメリカ)"
#: ../rules/base.xml.in.h:578
-msgid "Northern Saami (Norway)"
-msgstr "北サーミ語 (ノルウェー)"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "スペイン語 (ラテンアメリカ、デッドキー無し)"
#: ../rules/base.xml.in.h:579
-msgid "Northern Saami (Norway, eliminate dead keys)"
-msgstr "北サーミ語 (ノルウェー、デッドキー無し)"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "スペイン語 (ラテンアメリカ、デッドティルダ付き)"
#: ../rules/base.xml.in.h:580
-msgid "Northern Saami (Sweden)"
-msgstr "北サーミ語 (スウェーデン)"
-
-#: ../rules/base.xml.in.h:581
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Spanish (Latin American, Sun dead keys)"
+msgstr "スペイン語 (ラテンアメリカ、Sun デッドキー付き)"
-#: ../rules/base.xml.in.h:582
-msgid "Norwegian"
-msgstr "ノルウェー語"
+#. Keyboard indicator for Lithuanian layouts
+#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+msgid "lt"
+msgstr "lt"
-#: ../rules/base.xml.in.h:583
-msgid "Norwegian (Dvorak)"
-msgstr "ノルウェー語 (Dvorak)"
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+msgid "Lithuanian"
+msgstr "リトアニア語"
#: ../rules/base.xml.in.h:584
-msgid "Norwegian (Macintosh)"
-msgstr "ノルウェー語 (Macintosh)"
+msgid "Lithuanian (standard)"
+msgstr "リトアニア語 (標準)"
#: ../rules/base.xml.in.h:585
-msgid "Norwegian (Macintosh, eliminate dead keys)"
-msgstr "ノルウェー語 (Macintosh、デッドキー無し)"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "リトアニア語 (リトアニア文字付き US キーボード)"
#: ../rules/base.xml.in.h:586
-msgid "Norwegian (eliminate dead keys)"
-msgstr "ノルウェー語 (デッドキー無し)"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "リトアニア語 (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:587
-msgid "Num Lock"
-msgstr "Num Lock"
+msgid "Lithuanian (LEKP)"
+msgstr "リトアニア語 (LEKP)"
#: ../rules/base.xml.in.h:588
-msgid "Numeric keypad delete key behaviour"
-msgstr "テンキーにある delete キーの動作"
-
-#: ../rules/base.xml.in.h:589
-msgid "Numeric keypad keys work as with Macintosh"
-msgstr "テンキーを Macintosh と同じ動作にする"
+msgid "Lithuanian (LEKPa)"
+msgstr "リトアニア語 (LEKPa)"
-#: ../rules/base.xml.in.h:590
-msgid "Numeric keypad layout selection"
-msgstr "テンキー配列の選択"
+#. Keyboard indicator for Latvian layouts
+#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+msgid "lv"
+msgstr "lv"
-#: ../rules/base.xml.in.h:591
-msgid "OLPC"
-msgstr "OLPC"
+# ISO 639 ではラトヴィア語となっているが、外務省の
+# 国表記、KDEなどではラトビア語となっている
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+msgid "Latvian"
+msgstr "ラトビア語"
-# ISO 639
#: ../rules/base.xml.in.h:592
-msgid "Occitan"
-msgstr "オック語"
+msgid "Latvian (apostrophe variant)"
+msgstr "ラトビア語 (apostrophe variant)"
-# 古代語
-# オガムまたはオーガム表記
#: ../rules/base.xml.in.h:593
-msgid "Ogham"
-msgstr "オガム語"
+msgid "Latvian (tilde variant)"
+msgstr "ラトビア語 (tilde variant)"
#: ../rules/base.xml.in.h:594
-msgid "Ogham (IS434)"
-msgstr "オガム語 (IS434)"
+msgid "Latvian (F variant)"
+msgstr "ラトビア語 (F variant)"
#: ../rules/base.xml.in.h:595
-msgid "Oriya"
-msgstr "オリヤー語"
+msgid "Latvian (modern)"
+msgstr "ラトビア語 (modern)"
#: ../rules/base.xml.in.h:596
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/インターネットキーボード"
+msgid "Latvian (ergonomic, ŪGJRMV)"
+msgstr "ラトビア語 (ergonomic, ŪGJRMV)"
#: ../rules/base.xml.in.h:597
-msgid "Ossetian (Georgia)"
-msgstr "オセット語 (Georgia)"
-
-#: ../rules/base.xml.in.h:598
-msgid "Ossetian (WinKeys)"
-msgstr "オセット語 (WinKeys)"
+msgid "Latvian (adapted)"
+msgstr "ラトビア語 (adapted)"
+#. Keyboard indicator for Maori layouts
#: ../rules/base.xml.in.h:599
-msgid "Ossetian (legacy)"
-msgstr "オセット語 (legacy)"
+msgid "mi"
+msgstr "mi"
#: ../rules/base.xml.in.h:600
-msgid "PC-98xx Series"
-msgstr "PC-98xx シリーズ"
-
-# スロバキアの地方語、要調査
-#: ../rules/base.xml.in.h:601
-msgid "Pannonian Rusyn (homophonic)"
-msgstr ""
+msgid "Maori"
+msgstr "マオリ語"
-#: ../rules/base.xml.in.h:602
-msgid "Pashto"
-msgstr "パシュト語"
+#. Keyboard indicator for Serbian layouts
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+msgid "sr"
+msgstr "sr"
#: ../rules/base.xml.in.h:603
-msgid "Pashto (Afghanistan, OLPC)"
-msgstr "パシュト語 (アフガニスタン、OLPC)"
+msgid "Montenegrin"
+msgstr "モンテネグロ語"
#: ../rules/base.xml.in.h:604
-msgid "Pause"
-msgstr "Pause"
+msgid "Montenegrin (Cyrillic)"
+msgstr "モンテネグロ語 (Cyrillic)"
-# ISO 639
-#: ../rules/base.xml.in.h:605 ../rules/base.extras.xml.in.h:27
-msgid "Persian"
-msgstr "ペルシア語"
+#: ../rules/base.xml.in.h:605
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "モンテネグロ語 (Cyrillic, Z and ZHE swapped)"
#: ../rules/base.xml.in.h:606
-msgid "Persian (Afghanistan, Dari OLPC)"
-msgstr "ペルシア語 (アフガニスタン、ダリー語 OLPC)"
+msgid "Montenegrin (Latin Unicode)"
+msgstr "モンテネグロ語 (ラテンユニコード)"
#: ../rules/base.xml.in.h:607
-msgid "Persian (with Persian Keypad)"
-msgstr "ペルシア語 (ペルシア語キーパッド付き)"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "モンテネグロ語 (ラテン qwerty)"
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:28
-msgid "Polish"
-msgstr "ポーランド語"
+#: ../rules/base.xml.in.h:608
+msgid "Montenegrin (Latin Unicode qwerty)"
+msgstr "モンテネグロ語 (ラテンユニコード qwerty)"
#: ../rules/base.xml.in.h:609
-msgid "Polish (Dvorak)"
-msgstr "ポーランド語 (Dvorak)"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "モンテネグロ語 (Cyrillic with guillemets)"
#: ../rules/base.xml.in.h:610
-msgid "Polish (Dvorak, Polish quotes on key 1)"
-msgstr "ポーランド語 (Dvorak, Polish quotes on key 1)"
-
-#: ../rules/base.xml.in.h:611
-msgid "Polish (Dvorak, Polish quotes on quotemark key)"
-msgstr "ポーランド語 (Dvorak, Polish quotes on quotemark key)"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "モンテネグロ語 (Latin with guillemets)"
+#. Keyboard indicator for Macedonian layouts
#: ../rules/base.xml.in.h:612
-msgid "Polish (programmer Dvorak)"
-msgstr "ポーランド語 (プログラマー Dvorak)"
+msgid "mk"
+msgstr "mk"
#: ../rules/base.xml.in.h:613
-msgid "Polish (qwertz)"
-msgstr "ポーランド語 (qwertz)"
+msgid "Macedonian"
+msgstr "マケドニア語"
#: ../rules/base.xml.in.h:614
-msgid "Portuguese"
-msgstr "ポルトガル語"
-
-#: ../rules/base.xml.in.h:615
-msgid "Portuguese (Brazil)"
-msgstr "ポルトガル語 (ブラジル)"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "マケドニア語 (デッドキー無し)"
+#. Keyboard indicator for Maltese layouts
#: ../rules/base.xml.in.h:616
-msgid "Portuguese (Brazil, Dvorak)"
-msgstr "ポルトガル語 (ブラジル、Dvorak)"
+msgid "mt"
+msgstr "mt"
+# ISO 639 より
#: ../rules/base.xml.in.h:617
-msgid "Portuguese (Brazil, eliminate dead keys)"
-msgstr "ポルトガル語 (ブラジル、デッドキー無し)"
+msgid "Maltese"
+msgstr "マルタ語"
#: ../rules/base.xml.in.h:618
-msgid "Portuguese (Brazil, nativo for Esperanto)"
-msgstr "ポルトガル語 (ブラジル、nativo for Esperanto)"
-
-#: ../rules/base.xml.in.h:619
-msgid "Portuguese (Brazil, nativo for USA keyboards)"
-msgstr "ポルトガル語 (ブラジル、nativo for USA keyboards)"
+msgid "Maltese (with US layout)"
+msgstr "マルタ語 (US 配列付き)"
+#. Keyboard indicator for Mongolian layouts
#: ../rules/base.xml.in.h:620
-msgid "Portuguese (Brazil, nativo)"
-msgstr "ポルトガル語 (ブラジル、nativo)"
+msgid "mn"
+msgstr "mn"
+# ISO 639 では蒙古語になっているが外務省表記を採用する
#: ../rules/base.xml.in.h:621
-msgid "Portuguese (Macintosh)"
-msgstr "ポルトガル語 (Macintosh)"
-
-#: ../rules/base.xml.in.h:622
-msgid "Portuguese (Macintosh, Sun dead keys)"
-msgstr "ポルトガル語 (Macintosh, Sun デッドキー付き)"
+msgid "Mongolian"
+msgstr "モンゴル語"
-#: ../rules/base.xml.in.h:623
-msgid "Portuguese (Macintosh, eliminate dead keys)"
-msgstr "ポルトガル語 (Macintosh、デッドキー無し)"
+#. Keyboard indicator for Norwegian layouts
+#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+msgid "no"
+msgstr "no"
-#: ../rules/base.xml.in.h:624
-msgid "Portuguese (Nativo for USA keyboards)"
-msgstr "ポルトガル語 (Nativo for USA keyboards)"
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+msgid "Norwegian"
+msgstr "ノルウェー語"
#: ../rules/base.xml.in.h:625
-msgid "Portuguese (Nativo)"
-msgstr "ポルトガル語 (Nativo)"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "ノルウェー語 (デッドキー無し)"
#: ../rules/base.xml.in.h:626
-msgid "Portuguese (Sun dead keys)"
-msgstr "ポルトガル語 (Sun デッドキー付き)"
+msgid "Norwegian (Dvorak)"
+msgstr "ノルウェー語 (Dvorak)"
#: ../rules/base.xml.in.h:627
-msgid "Portuguese (eliminate dead keys)"
-msgstr "ポルトガル語 (デッドキー無し)"
+msgid "Northern Saami (Norway)"
+msgstr "北サーミ語 (ノルウェー)"
#: ../rules/base.xml.in.h:628
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Northern Saami (Norway, eliminate dead keys)"
+msgstr "北サーミ語 (ノルウェー、デッドキー無し)"
#: ../rules/base.xml.in.h:629
-msgid "PrtSc"
-msgstr "PrtSc"
+msgid "Norwegian (Macintosh)"
+msgstr "ノルウェー語 (Macintosh)"
-# ISO 639
#: ../rules/base.xml.in.h:630
-msgid "Punjabi (Gurmukhi Jhelum)"
-msgstr "パンジャブ語 (Gurmukhi Jhelum)"
+msgid "Norwegian (Macintosh, eliminate dead keys)"
+msgstr "ノルウェー語 (Macintosh、デッドキー無し)"
#: ../rules/base.xml.in.h:631
-msgid "Punjabi (Gurmukhi)"
-msgstr "パンジャブ語 (Gurmukhi)"
-
-#: ../rules/base.xml.in.h:632
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Norwegian (Colemak)"
+msgstr "ノルウェー語 (Colemak)"
-#: ../rules/base.xml.in.h:633
-msgid "Right Alt"
-msgstr "右 Alt"
+#. Keyboard indicator for Polish layouts
+#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+msgid "pl"
+msgstr "pl"
-#: ../rules/base.xml.in.h:634
-msgid "Right Alt (while pressed)"
-msgstr "右 Alt (押している間)"
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+msgid "Polish"
+msgstr "ポーランド語"
#: ../rules/base.xml.in.h:635
-msgid "Right Alt as Right Ctrl"
-msgstr "右 Alt を右 Ctrl として扱う"
+msgid "Polish (legacy)"
+msgstr "ポーランド語 (legacy)"
#: ../rules/base.xml.in.h:636
-msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr ""
+msgid "Polish (qwertz)"
+msgstr "ポーランド語 (qwertz)"
#: ../rules/base.xml.in.h:637
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "右t Alt で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+msgid "Polish (Dvorak)"
+msgstr "ポーランド語 (Dvorak)"
#: ../rules/base.xml.in.h:638
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "右 Alt で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する。固定を解除する場合は第5層を選択するキーのいずれかを押す"
+msgid "Polish (Dvorak, Polish quotes on quotemark key)"
+msgstr "ポーランド語 (Dvorak, Polish quotes on quotemark key)"
#: ../rules/base.xml.in.h:639
-msgid "Right Alt key never chooses 3rd level"
-msgstr "右 Alt キーでは第3層を選択しない"
+msgid "Polish (Dvorak, Polish quotes on key 1)"
+msgstr "ポーランド語 (Dvorak, Polish quotes on key 1)"
+# ポーランド北部の言語
+# カシューブ方言ともいう (世界大百科事典)
#: ../rules/base.xml.in.h:640
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "右 Alt、 Shift+右 Alt キーを Multi_Key にする"
+msgid "Kashubian"
+msgstr "カシューブ語"
#: ../rules/base.xml.in.h:641
-msgid "Right Ctrl"
-msgstr "右 Ctrl"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "ロシア語 (ポーランド、表音 Dvorak)"
#: ../rules/base.xml.in.h:642
-msgid "Right Ctrl (while pressed)"
-msgstr "右 Ctrl (押している間)"
+msgid "Polish (programmer Dvorak)"
+msgstr "ポーランド語 (プログラマー Dvorak)"
-#: ../rules/base.xml.in.h:643
-msgid "Right Ctrl as Right Alt"
-msgstr "右 Ctrl を右 Alt として扱う"
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+msgid "Portuguese"
+msgstr "ポルトガル語"
#: ../rules/base.xml.in.h:644
-msgid "Right Ctrl+Right Shift"
-msgstr "右 Ctrl + 右 Shift"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "ポルトガル語 (デッドキー無し)"
#: ../rules/base.xml.in.h:645
-msgid "Right Shift"
-msgstr "右 Shift"
+msgid "Portuguese (Sun dead keys)"
+msgstr "ポルトガル語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:646
-msgid "Right Win"
-msgstr "右 Win"
+msgid "Portuguese (Macintosh)"
+msgstr "ポルトガル語 (Macintosh)"
#: ../rules/base.xml.in.h:647
-msgid "Right Win (while pressed)"
-msgstr "右 Win (押している間)"
+msgid "Portuguese (Macintosh, eliminate dead keys)"
+msgstr "ポルトガル語 (Macintosh、デッドキー無し)"
#: ../rules/base.xml.in.h:648
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "右 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+msgid "Portuguese (Macintosh, Sun dead keys)"
+msgstr "ポルトガル語 (Macintosh, Sun デッドキー付き)"
#: ../rules/base.xml.in.h:649
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "右 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する。固定を解除する場合は第5層を選択するキーのいずれかを押す"
+msgid "Portuguese (Nativo)"
+msgstr "ポルトガル語 (Nativo)"
-#: ../rules/base.xml.in.h:650 ../rules/base.extras.xml.in.h:30
-msgid "Romanian"
-msgstr "ルーマニア語"
+#: ../rules/base.xml.in.h:650
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "ポルトガル語 (Nativo for USA keyboards)"
#: ../rules/base.xml.in.h:651
-msgid "Romanian (Germany)"
-msgstr "ルーマニア語 (ドイツ)"
+msgid "Esperanto (Portugal, Nativo)"
+msgstr "エスペラント語 (ポルトガル、Nativo)"
-#: ../rules/base.xml.in.h:652
-msgid "Romanian (Germany, eliminate dead keys)"
-msgstr "ルーマニア語 (ドイツ、デッドキー無し)"
+#. Keyboard indicator for Romanian layouts
+#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+msgid "ro"
+msgstr "ro"
-#: ../rules/base.xml.in.h:653
-msgid "Romanian (WinKeys)"
-msgstr "ルーマニア語 (WinKeys)"
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+msgid "Romanian"
+msgstr "ルーマニア語"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:655
msgid "Romanian (cedilla)"
msgstr "ルーマニア語 (cedilla)"
-#: ../rules/base.xml.in.h:655
-msgid "Romanian (standard cedilla)"
-msgstr "ルーマニア語 (standard cedilla)"
-
#: ../rules/base.xml.in.h:656
msgid "Romanian (standard)"
msgstr "ルーマニア語 (標準)"
#: ../rules/base.xml.in.h:657
-msgid "Rupee on 4"
-msgstr "4 キーにルピー記号を追加割り当てする"
+msgid "Romanian (standard cedilla)"
+msgstr "ルーマニア語 (standard cedilla)"
-#: ../rules/base.xml.in.h:658 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:658
+msgid "Romanian (WinKeys)"
+msgstr "ルーマニア語 (WinKeys)"
+
+#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "ロシア語"
-#: ../rules/base.xml.in.h:659
-msgid "Russian (DOS)"
-msgstr "ロシア語 (DOS)"
-
#: ../rules/base.xml.in.h:660
-msgid "Russian (Georgia)"
-msgstr "ロシア語 (Georgia)"
+msgid "Russian (phonetic)"
+msgstr "ロシア語 (表音)"
#: ../rules/base.xml.in.h:661
-msgid "Russian (Germany, phonetic)"
-msgstr "ロシア語 (ドイツ、表音)"
+msgid "Russian (phonetic WinKeys)"
+msgstr "ロシア語 (表音、WinKeys)"
#: ../rules/base.xml.in.h:662
-msgid "Russian (Kazakhstan, with Kazakh)"
-msgstr "ロシア語 (カザフスタン、カザフ語付き)"
+msgid "Russian (typewriter)"
+msgstr "ロシア語 (タイプライター)"
#: ../rules/base.xml.in.h:663
-msgid "Russian (Poland, phonetic Dvorak)"
-msgstr "ロシア語 (ポーランド、表音 Dvorak)"
+msgid "Russian (legacy)"
+msgstr "ロシア語 (legacy)"
#: ../rules/base.xml.in.h:664
-msgid "Russian (Sweden, phonetic)"
-msgstr "ロシア語 (スウェーデン、表音)"
+msgid "Russian (typewriter, legacy)"
+msgstr "ロシア語 (タイプライター、legacy)"
#: ../rules/base.xml.in.h:665
-msgid "Russian (Sweden, phonetic, eliminate dead keys)"
-msgstr "ロシア語 (スウェーデン、表音、デッドキー無し)"
+msgid "Tatar"
+msgstr "タタール語"
#: ../rules/base.xml.in.h:666
-msgid "Russian (US, phonetic)"
-msgstr "ロシア語 (US、表音)"
+msgid "Ossetian (legacy)"
+msgstr "オセット語 (legacy)"
#: ../rules/base.xml.in.h:667
-msgid "Russian (Ukraine, standard RSTU)"
-msgstr "ロシア語 (ウクライナ、標準 RSTU)"
+msgid "Ossetian (WinKeys)"
+msgstr "オセット語 (WinKeys)"
+# ISO 639 より
#: ../rules/base.xml.in.h:668
-msgid "Russian (legacy)"
-msgstr "ロシア語 (legacy)"
+msgid "Chuvash"
+msgstr "チュヴァシュ語"
#: ../rules/base.xml.in.h:669
-msgid "Russian (phonetic WinKeys)"
-msgstr "ロシア語 (表音、WinKeys)"
+msgid "Chuvash (Latin)"
+msgstr "チュヴァシュ語 (ラテン)"
+# ISO 639
#: ../rules/base.xml.in.h:670
-msgid "Russian (phonetic)"
-msgstr "ロシア語 (表音)"
+msgid "Udmurt"
+msgstr "ウドムルト語"
+# ISO 639より
#: ../rules/base.xml.in.h:671
-msgid "Russian (typewriter)"
-msgstr "ロシア語 (タイプライター)"
+msgid "Komi"
+msgstr "コミ語"
+# ISO 639
#: ../rules/base.xml.in.h:672
-msgid "Russian (typewriter, legacy)"
-msgstr "ロシア語 (タイプライター、legacy)"
+msgid "Yakut"
+msgstr "ヤクート語"
+# ISO 639 より
#: ../rules/base.xml.in.h:673
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST マルチメディアワイヤレスキーボード"
+msgid "Kalmyk"
+msgstr "カルミック語"
#: ../rules/base.xml.in.h:674
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Russian (DOS)"
+msgstr "ロシア語 (DOS)"
#: ../rules/base.xml.in.h:675
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "Serbian (Russia)"
+msgstr "セルビア語 (ロシア)"
#: ../rules/base.xml.in.h:676
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Bashkirian"
+msgstr ""
+# ISO 639 より
#: ../rules/base.xml.in.h:677
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Mari"
+msgstr "マリ語"
-#: ../rules/base.xml.in.h:678
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+msgid "Serbian"
+msgstr "セルビア語"
#: ../rules/base.xml.in.h:679
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+#, fuzzy
+msgid "Serbian (Cyrillic, Z and ZHE swapped)"
+msgstr "モンテネグロ語 (Cyrillic, Z and ZHE swapped)"
-# 台湾の地方語、サイシャット語?
#: ../rules/base.xml.in.h:680
-msgid "Saisiyat (Taiwan)"
-msgstr ""
+msgid "Serbian (Latin)"
+msgstr "セルビア語 (ラテン)"
#: ../rules/base.xml.in.h:681
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Serbian (Latin Unicode)"
+msgstr "セルビア語 (ラテンユニコード)"
#: ../rules/base.xml.in.h:682
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Serbian (Latin qwerty)"
+msgstr "セルビア語 (ラテン qwerty)"
#: ../rules/base.xml.in.h:683
-msgid "Sanwa Supply SKB-KG3"
-msgstr "サンワサプライ SKB-KG3"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "セルビア語 (ラテンユニコード qwerty)"
#: ../rules/base.xml.in.h:684
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#, fuzzy
+msgid "Serbian (Cyrillic with guillemets)"
+msgstr "モンテネグロ語 (Cyrillic with guillemets)"
#: ../rules/base.xml.in.h:685
-msgid "Semi-colon on third level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:686 ../rules/base.extras.xml.in.h:35
-msgid "Serbian"
-msgstr "セルビア語"
+msgid "Serbian (Latin with guillemets)"
+msgstr "セルビア語 (Latin with guillemets)"
-#: ../rules/base.xml.in.h:687
-msgid "Serbian (Latin Unicode qwerty)"
-msgstr "セルビア語 (ラテンユニコード qwerty)"
+# スロバキアの地方語、要調査
+#: ../rules/base.xml.in.h:686
+msgid "Pannonian Rusyn (homophonic)"
+msgstr ""
+#. Keyboard indicator for Slovenian layouts
#: ../rules/base.xml.in.h:688
-msgid "Serbian (Latin Unicode)"
-msgstr "セルビア語 (ラテンユニコード)"
+msgid "sl"
+msgstr "sl"
#: ../rules/base.xml.in.h:689
-msgid "Serbian (Latin qwerty)"
-msgstr "セルビア語 (ラテン qwerty)"
+msgid "Slovenian"
+msgstr "スロベニア語"
#: ../rules/base.xml.in.h:690
-msgid "Serbian (Latin with guillemets)"
-msgstr "セルビア語 (Latin with guillemets)"
+msgid "Slovenian (use guillemets for quotes)"
+msgstr "スロベニア語 (use guillemets for quotes)"
#: ../rules/base.xml.in.h:691
-msgid "Serbian (Latin)"
-msgstr "セルビア語 (ラテン)"
-
-#: ../rules/base.xml.in.h:692
-msgid "Serbian (Russia)"
-msgstr "セルビア語 (ロシア)"
+msgid "Slovenian (US keyboard with Slovenian letters)"
+msgstr "スロベニア語 (スロベニア文字付き US キーボード)"
-#: ../rules/base.xml.in.h:693
-msgid "Serbian (Z and ZHE swapped)"
-msgstr "セルビア語 (Z and ZHE swapped)"
+#. Keyboard indicator for Slovak layouts
+#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+msgid "sk"
+msgstr "sk"
-#: ../rules/base.xml.in.h:694
-msgid "Serbian (with guillemets)"
-msgstr "セルビア語 (with guillemets)"
+# ISO 639 ではスロヴァキアとしてあるが、
+# 外務省の国表記に従いスロバキアとする
+#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+msgid "Slovak"
+msgstr "スロバキア語"
#: ../rules/base.xml.in.h:695
-msgid "Serbo-Croatian (US)"
-msgstr "セルボクロアチア語 (US)"
+msgid "Slovak (extended Backslash)"
+msgstr "スロバキア語 (Backslash 拡張)"
#: ../rules/base.xml.in.h:696
-msgid "Shift cancels Caps Lock"
-msgstr "Shift を押すと Caps Lock をキャンセルする"
+msgid "Slovak (qwerty)"
+msgstr "スロバキア語 (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Shift を押しても Num Lock を解除せず、代わりに第3層を選択する"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "スロバキア語 (qwerty、Backslash 拡張)"
-#: ../rules/base.xml.in.h:698
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "テンキーの Shift の動作を MS Windows と同様にする"
+#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+msgid "Spanish"
+msgstr "スペイン語"
#: ../rules/base.xml.in.h:699
-msgid "Shift+Caps Lock"
-msgstr "Shift+Caps Lock"
+msgid "Spanish (eliminate dead keys)"
+msgstr "スペイン語 (デッドキー無し)"
#: ../rules/base.xml.in.h:700
-msgid "Sindhi"
-msgstr "シンディー語"
+msgid "Spanish (include dead tilde)"
+msgstr "スペイン語 (デッドティルダ付き)"
#: ../rules/base.xml.in.h:701
-msgid "Sinhala (phonetic)"
-msgstr "シンハラ語 (表音)"
+msgid "Spanish (Sun dead keys)"
+msgstr "スペイン語 (Sun デッドキー付き)"
-# ISO 639 ではスロヴァキアとしてあるが、
-# 外務省の国表記に従いスロバキアとする
#: ../rules/base.xml.in.h:702
-msgid "Slovak"
-msgstr "スロバキア語"
+msgid "Spanish (Dvorak)"
+msgstr "スペイン語 (Dvorak)"
+# スペインのアストゥリアス地方だが、言語は? ISOコードを要調査
#: ../rules/base.xml.in.h:703
-msgid "Slovak (extended Backslash)"
-msgstr "スロバキア語 (Backslash 拡張)"
+msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
+msgstr ""
#: ../rules/base.xml.in.h:704
-msgid "Slovak (qwerty)"
-msgstr "スロバキア語 (qwerty)"
+msgid "Catalan (Spain, with middle-dot L)"
+msgstr "カタロニア語 (スペイン、with middle-dot L)"
#: ../rules/base.xml.in.h:705
-msgid "Slovak (qwerty, extended Backslash)"
-msgstr "スロバキア語 (qwerty、Backslash 拡張)"
-
-#: ../rules/base.xml.in.h:706
-msgid "Slovenian"
-msgstr "スロベニア語"
+msgid "Spanish (Macintosh)"
+msgstr "スペイン語 (Macintosh)"
-#: ../rules/base.xml.in.h:707
-msgid "Slovenian (US keyboard with Slovenian letters)"
-msgstr "スロベニア語 (スロベニア文字付き US キーボード)"
+#. Keyboard indicator for Swedish layouts
+#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+msgid "sv"
+msgstr "sv"
-#: ../rules/base.xml.in.h:708
-msgid "Slovenian (use guillemets for quotes)"
-msgstr "スロベニア語 (use guillemets for quotes)"
+#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+msgid "Swedish"
+msgstr "スウェーデン語"
#: ../rules/base.xml.in.h:709
-msgid "Spanish"
-msgstr "スペイン語"
+msgid "Swedish (eliminate dead keys)"
+msgstr "スウェーデン語 (デッドキー無し)"
#: ../rules/base.xml.in.h:710
-msgid "Spanish (Dvorak)"
-msgstr "スペイン語 (Dvorak)"
+msgid "Swedish (Dvorak)"
+msgstr "スウェーデン語 (Dvorak)"
#: ../rules/base.xml.in.h:711
-msgid "Spanish (Latin American)"
-msgstr "スペイン語 (ラテンアメリカ)"
+msgid "Russian (Sweden, phonetic)"
+msgstr "ロシア語 (スウェーデン、表音)"
#: ../rules/base.xml.in.h:712
-msgid "Spanish (Latin American, Sun dead keys)"
-msgstr "スペイン語 (ラテンアメリカ、Sun デッドキー付き)"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "ロシア語 (スウェーデン、表音、デッドキー無し)"
#: ../rules/base.xml.in.h:713
-msgid "Spanish (Latin American, eliminate dead keys)"
-msgstr "スペイン語 (ラテンアメリカ、デッドキー無し)"
+msgid "Northern Saami (Sweden)"
+msgstr "北サーミ語 (スウェーデン)"
#: ../rules/base.xml.in.h:714
-msgid "Spanish (Latin American, include dead tilde)"
-msgstr "スペイン語 (ラテンアメリカ、デッドティルダ付き)"
+msgid "Swedish (Macintosh)"
+msgstr "スウェーデン語 (Macintosh)"
#: ../rules/base.xml.in.h:715
-msgid "Spanish (Macintosh)"
-msgstr "スペイン語 (Macintosh)"
+msgid "Swedish (Svdvorak)"
+msgstr "スウェーデン語 (Svdvorak)"
#: ../rules/base.xml.in.h:716
-msgid "Spanish (Sun dead keys)"
-msgstr "スペイン語 (Sun デッドキー付き)"
+msgid "Swedish Sign Language"
+msgstr "スウェーデン手話"
#: ../rules/base.xml.in.h:717
-msgid "Spanish (eliminate dead keys)"
-msgstr "スペイン語 (デッドキー無し)"
+msgid "German (Switzerland)"
+msgstr "ドイツ語 (スイス)"
#: ../rules/base.xml.in.h:718
-msgid "Spanish (include dead tilde)"
-msgstr "スペイン語 (デッドティルダ付き)"
+msgid "German (Switzerland, legacy)"
+msgstr "ドイツ語 (スイス、legacy)"
#: ../rules/base.xml.in.h:719
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "サーバーで取り扱われる特殊キー (Ctrl+Alt+&lt;key&gt;)"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "ドイツ語 (スイス、デッドキー無し)"
#: ../rules/base.xml.in.h:720
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "ドイツ語 (スイス語、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:721
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power マルチメディアキーボード"
+msgid "French (Switzerland)"
+msgstr "フランス語 (スイス)"
#: ../rules/base.xml.in.h:722
-msgid "Swahili (Kenya)"
-msgstr "スワヒリ語 (ケニア)"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "フランス語 (スイス、デッドキー無し)"
#: ../rules/base.xml.in.h:723
-msgid "Swahili (Tanzania)"
-msgstr "スワヒリ語 (タンザニア)"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "フランス語 (スイス、Sun デッドキー付き)"
#: ../rules/base.xml.in.h:724
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Ctrl と Caps Lock を入れ替える"
+msgid "French (Switzerland, Macintosh)"
+msgstr "フランス語 (スイス、Macintosh)"
#: ../rules/base.xml.in.h:725
-msgid "Swap ESC and Caps Lock"
-msgstr "ESC と Caps Lock を入れ替える"
+msgid "German (Switzerland, Macintosh)"
+msgstr "ドイツ語 (スイス、Macintosh)"
#: ../rules/base.xml.in.h:726
-msgid "Swedish"
-msgstr "スウェーデン語"
-
-#: ../rules/base.xml.in.h:727
-msgid "Swedish (Dvorak)"
-msgstr "スウェーデン語 (Dvorak)"
+msgid "Arabic (Syria)"
+msgstr "アラビア語 (シリア)"
+#. Keyboard indicator for Syriac layouts
#: ../rules/base.xml.in.h:728
-msgid "Swedish (Macintosh)"
-msgstr "スウェーデン語 (Macintosh)"
+msgid "syc"
+msgstr "syc"
#: ../rules/base.xml.in.h:729
-msgid "Swedish (Svdvorak)"
-msgstr "スウェーデン語 (Svdvorak)"
+msgid "Syriac"
+msgstr "シリア語"
#: ../rules/base.xml.in.h:730
-msgid "Swedish (eliminate dead keys)"
-msgstr "スウェーデン語 (デッドキー無し)"
+msgid "Syriac (phonetic)"
+msgstr "シリア語 (表音)"
#: ../rules/base.xml.in.h:731
-msgid "Swedish Sign Language"
-msgstr "スウェーデン手話"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "クルド語 (シリア、ラテン Q)"
#: ../rules/base.xml.in.h:732
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (タブレット PC)"
+msgid "Kurdish (Syria, F)"
+msgstr "クルド語 (シリア、F)"
#: ../rules/base.xml.in.h:733
-msgid "Syriac"
-msgstr "シリア語"
-
-#: ../rules/base.xml.in.h:734
-msgid "Syriac (phonetic)"
-msgstr "シリア語 (表音)"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "クルド語 (シリア、ラテン Alt-Q)"
+#. Keyboard indicator for Tajik layouts
#: ../rules/base.xml.in.h:735
-msgid "Taiwanese"
-msgstr "台湾語"
-
-#: ../rules/base.xml.in.h:736
-msgid "Taiwanese (indigenous)"
-msgstr "台湾語 (現地語)"
+msgid "tg"
+msgstr "tg"
# ISO 639
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:736
msgid "Tajik"
msgstr "タジク語"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:737
msgid "Tajik (legacy)"
msgstr "タジク語 (legacy)"
+#. Keyboard indicator for Sinhala layouts
#: ../rules/base.xml.in.h:739
-msgid "Tamil"
-msgstr "タミル語"
+msgid "si"
+msgstr "si"
#: ../rules/base.xml.in.h:740
-msgid "Tamil (Sri Lanka, TAB Typewriter)"
-msgstr "タミル語 (スリランカ、TAB タイプライター)"
+msgid "Sinhala (phonetic)"
+msgstr "シンハラ語 (表音)"
#: ../rules/base.xml.in.h:741
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "タミル語 (スリランカ、ユニコード)"
#: ../rules/base.xml.in.h:742
-msgid "Tamil (TAB typewriter)"
-msgstr "タミル語 (TAB タイプライター)"
-
-#: ../rules/base.xml.in.h:743
-msgid "Tamil (TSCII typewriter)"
-msgstr "タミル語 (TSCII タイプライター)"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "タミル語 (スリランカ、TAB タイプライター)"
+#. Keyboard indicator for Thai layouts
#: ../rules/base.xml.in.h:744
-msgid "Tamil (Unicode)"
-msgstr "タミル語 (ユニコード)"
+msgid "th"
+msgstr "th"
#: ../rules/base.xml.in.h:745
-msgid "Tamil (keyboard with numerals)"
-msgstr "タミル語 (数字付きキーボード)"
+msgid "Thai"
+msgstr "タイ語"
+# ISO 639
#: ../rules/base.xml.in.h:746
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "Thai (TIS-820.2538)"
+msgstr "タイ語 (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Tatar"
-msgstr "タタール語"
-
-#: ../rules/base.xml.in.h:748
-msgid "Telugu"
-msgstr "テルグ語"
-
-#: ../rules/base.xml.in.h:749
-msgid "Thai"
-msgstr "タイ語"
-
-#: ../rules/base.xml.in.h:750
msgid "Thai (Pattachote)"
msgstr "タイ語 (Pattachote)"
-# ISO 639
+#. Keyboard indicator for Turkish layouts
+#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+msgid "Turkish"
+msgstr "トルコ語"
+
#: ../rules/base.xml.in.h:751
-msgid "Thai (TIS-820.2538)"
-msgstr "タイ語 (TIS-820.2538)"
+msgid "Turkish (F)"
+msgstr "トルコ語 (F)"
-# ISO 639
#: ../rules/base.xml.in.h:752
-msgid "Tibetan"
-msgstr "チベット語"
+msgid "Turkish (Alt-Q)"
+msgstr "トルコ語 (Alt-Q)"
#: ../rules/base.xml.in.h:753
-msgid "Tibetan (with ASCII numerals)"
-msgstr "チベット語 (ASCII 数字付き)"
+msgid "Turkish (Sun dead keys)"
+msgstr "トルコ語 (Sun デッドキー付き)"
#: ../rules/base.xml.in.h:754
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Dvorak キーボードと対応するキーに割り当てる"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "クルド語 (トルコ、ラテン Q)"
#: ../rules/base.xml.in.h:755
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Qwerty キーボードと対応するキーに割り当てる"
+msgid "Kurdish (Turkey, F)"
+msgstr "クルド語 (トルコ、F)"
#: ../rules/base.xml.in.h:756
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Shift + NumLock で PointerKeys をトグルする"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "クルド語 (トルコ、ラテン Alt-Q)"
#: ../rules/base.xml.in.h:757
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
-
-#: ../rules/base.xml.in.h:758
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access キーボード"
+msgid "Turkish (international with dead keys)"
+msgstr "トルコ語 (国際化、デッドキー付き)"
-#: ../rules/base.xml.in.h:759
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+#. Keyboard indicator for Crimean Tatar layouts
+#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+msgid "crh"
+msgstr "crh"
#: ../rules/base.xml.in.h:760
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust ワイヤレスキーボードクラシック"
+msgid "Crimean Tatar (Turkish Q)"
+msgstr "クリミア・タタール語 (トルコ語 Q)"
-# ISO 639
#: ../rules/base.xml.in.h:761
-msgid "Tswana"
-msgstr "ツワナ語"
+msgid "Crimean Tatar (Turkish F)"
+msgstr "クリミア・タタール語 (トルコ語 F)"
#: ../rules/base.xml.in.h:762
-msgid "Turkish"
-msgstr "トルコ語"
+msgid "Crimean Tatar (Turkish Alt-Q)"
+msgstr "クリミア・タタール語 (トルコ語 Alt-Q)"
#: ../rules/base.xml.in.h:763
-msgid "Turkish (Alt-Q)"
-msgstr "トルコ語 (Alt-Q)"
+msgid "Taiwanese"
+msgstr "台湾語"
#: ../rules/base.xml.in.h:764
-msgid "Turkish (F)"
-msgstr "トルコ語 (F)"
-
-#: ../rules/base.xml.in.h:765
-msgid "Turkish (Sun dead keys)"
-msgstr "トルコ語 (Sun デッドキー付き)"
+msgid "Taiwanese (indigenous)"
+msgstr "台湾語 (現地語)"
+#. Keyboard indicator for Saisiyat layouts
#: ../rules/base.xml.in.h:766
-msgid "Turkish (international with dead keys)"
-msgstr "トルコ語 (国際化、デッドキー付き)"
+msgid "xsy"
+msgstr "xsy"
-# ISO 639 ではトゥルクメン語とあるが、
-# 外務省の国名ではトルクメニスタン
+# 台湾の地方語、サイシャット語?
#: ../rules/base.xml.in.h:767
-msgid "Turkmen"
-msgstr "トルクメン語"
-
-#: ../rules/base.xml.in.h:768
-msgid "Turkmen (Alt-Q)"
-msgstr "トルクメン語 (Alt-Q)"
+msgid "Saisiyat (Taiwan)"
+msgstr ""
-#: ../rules/base.xml.in.h:769
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+#. Keyboard indicator for Ukranian layouts
+#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+msgid "uk"
+msgstr "uk"
-#: ../rules/base.xml.in.h:770
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+# ISO 639
+#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+msgid "Ukrainian"
+msgstr "ウクライナ語"
#: ../rules/base.xml.in.h:771
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Ukrainian (phonetic)"
+msgstr "ウクライナ語 (表音)"
#: ../rules/base.xml.in.h:772
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU モード)"
+msgid "Ukrainian (typewriter)"
+msgstr "ウクライナ語 (タイプライター)"
#: ../rules/base.xml.in.h:773
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP モード)"
+msgid "Ukrainian (WinKeys)"
+msgstr "ウクライナ語 (WinKeys)"
-# ISO 639
#: ../rules/base.xml.in.h:774
-msgid "Udmurt"
-msgstr "ウドムルト語"
+msgid "Ukrainian (legacy)"
+msgstr "ウクライナ語 (legacy)"
-# ISO 639
#: ../rules/base.xml.in.h:775
-msgid "Ukrainian"
-msgstr "ウクライナ語"
+msgid "Ukrainian (standard RSTU)"
+msgstr "ウクライナ語 (標準 RSTU)"
#: ../rules/base.xml.in.h:776
-msgid "Ukrainian (WinKeys)"
-msgstr "ウクライナ語 (WinKeys)"
+msgid "Russian (Ukraine, standard RSTU)"
+msgstr "ロシア語 (ウクライナ、標準 RSTU)"
#: ../rules/base.xml.in.h:777
msgid "Ukrainian (homophonic)"
msgstr "ウクライナ語 (homophonic)"
-#: ../rules/base.xml.in.h:778
-msgid "Ukrainian (legacy)"
-msgstr "ウクライナ語 (legacy)"
+#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+msgid "English (UK)"
+msgstr "英語 (UK)"
#: ../rules/base.xml.in.h:779
-msgid "Ukrainian (phonetic)"
-msgstr "ウクライナ語 (表音)"
+msgid "English (UK, extended WinKeys)"
+msgstr "英語 (UK、WinKey 拡張)"
#: ../rules/base.xml.in.h:780
-msgid "Ukrainian (standard RSTU)"
-msgstr "ウクライナ語 (標準 RSTU)"
+msgid "English (UK, international with dead keys)"
+msgstr "英語 (UK、国際、デッドキー付き)"
#: ../rules/base.xml.in.h:781
-msgid "Ukrainian (typewriter)"
-msgstr "ウクライナ語 (タイプライター)"
+msgid "English (UK, Dvorak)"
+msgstr "英語 (UK, Dvorak)"
#: ../rules/base.xml.in.h:782
-msgid "Unicode additions (arrows and math operators)"
-msgstr "ユニコード追加文字 (矢印および数学記号)"
+msgid "English (UK, Dvorak with UK punctuation)"
+msgstr "英語 (UK, Dvorak with UK punctuation)"
#: ../rules/base.xml.in.h:783
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "ユニコード追加文字 (矢印および数学記号)。数学記号は標準の層に配置"
+msgid "English (UK, Macintosh)"
+msgstr "英語 (UK, Macintosh)"
#: ../rules/base.xml.in.h:784
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "English (UK, Macintosh international)"
+msgstr "英語 (UK, Macintosh 国際)"
-# ISO 639
#: ../rules/base.xml.in.h:785
-msgid "Urdu (Pakistan)"
-msgstr "ウルドゥー語 (パキスタン)"
+msgid "English (UK, Colemak)"
+msgstr "英語 (UK, Colemak)"
+# ISO 639
#: ../rules/base.xml.in.h:786
-msgid "Urdu (Pakistan, CRULP)"
-msgstr "ウルドゥー語 (パキスタン、CRULP)"
+msgid "Uzbek"
+msgstr "ウズベク語"
#: ../rules/base.xml.in.h:787
-msgid "Urdu (Pakistan, NLA)"
-msgstr "ウルドゥー語 (パキスタン、NLA)"
-
-#: ../rules/base.xml.in.h:788
-msgid "Urdu (WinKeys)"
-msgstr "ウルドゥー語 (WinKeys)"
+msgid "Uzbek (Latin)"
+msgstr "ウズベク語 (ラテン)"
+#. Keyboard indicator for Vietnamese layouts
#: ../rules/base.xml.in.h:789
-msgid "Urdu (alternative phonetic)"
-msgstr "ウルドゥー語 (代替表音)"
+msgid "vi"
+msgstr "vi"
+# ISO 639
#: ../rules/base.xml.in.h:790
-msgid "Urdu (phonetic)"
-msgstr "ウルドゥー語 (表音)"
-
-#: ../rules/base.xml.in.h:791
-msgid "Use keyboard LED to show alternative layout"
-msgstr "キーボード LED を代替配列を表すために使用する"
+msgid "Vietnamese"
+msgstr "ベトナム語"
-#: ../rules/base.xml.in.h:792
-msgid "Using space key to input non-breakable space character"
-msgstr "スペースキーを使用して改行不可空白文字を入力する時の動作"
+#. Keyboard indicator for Korean layouts
+#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+msgid "ko"
+msgstr "ko"
-#: ../rules/base.xml.in.h:793
-msgid "Usual space at any level"
-msgstr "すべての層で通常のスペースを使用する"
+#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+msgid "Korean"
+msgstr "朝鮮語、韓国語"
-# ISO 639
#: ../rules/base.xml.in.h:794
-msgid "Uyghur"
-msgstr "ウイグル語"
+msgid "Korean (101/104 key compatible)"
+msgstr "朝鮮語、韓国語 (101/104 キー互換)"
-# ISO 639
#: ../rules/base.xml.in.h:795
-msgid "Uzbek"
-msgstr "ウズベク語"
-
-#: ../rules/base.xml.in.h:796
-msgid "Uzbek (Afghanistan)"
-msgstr "ウズベク語 (アフガニスタン)"
+msgid "Japanese (PC-98xx Series)"
+msgstr "日本語 (PC-98xx シリーズ)"
+#. Keyboard indicator for Irish layouts
#: ../rules/base.xml.in.h:797
-msgid "Uzbek (Afghanistan, OLPC)"
-msgstr "ウズベク語 (アフガニスタン、OLPC)"
+msgid "ie"
+msgstr "ie"
#: ../rules/base.xml.in.h:798
-msgid "Uzbek (Latin)"
-msgstr "ウズベク語 (ラテン)"
+msgid "Irish"
+msgstr "アイルランド語"
-# ISO 639
#: ../rules/base.xml.in.h:799
-msgid "Vietnamese"
-msgstr "ベトナム語"
+msgid "CloGaelach"
+msgstr ""
#: ../rules/base.xml.in.h:800
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 インターネットキーボード"
+msgid "Irish (UnicodeExpert)"
+msgstr "アイルランド語 (UnicodeExpert)"
+# 古代語
+# オガムまたはオーガム表記
#: ../rules/base.xml.in.h:801
-msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
-msgstr ""
+msgid "Ogham"
+msgstr "オガム語"
#: ../rules/base.xml.in.h:802
-msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
-msgstr ""
+msgid "Ogham (IS434)"
+msgstr "オガム語 (IS434)"
+# ISO 639
#: ../rules/base.xml.in.h:803
-msgid "Winbook Model XP5"
-msgstr "Winbook モデル XP5"
+msgid "Urdu (Pakistan)"
+msgstr "ウルドゥー語 (パキスタン)"
-# ISO 639
#: ../rules/base.xml.in.h:804
-msgid "Wolof"
-msgstr "ウォロフ語"
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "ウルドゥー語 (パキスタン、CRULP)"
#: ../rules/base.xml.in.h:805
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! インターネットキーボード"
+msgid "Urdu (Pakistan, NLA)"
+msgstr "ウルドゥー語 (パキスタン、NLA)"
-# ISO 639
#: ../rules/base.xml.in.h:806
-msgid "Yakut"
-msgstr "ヤクート語"
-
-# ISO 639
-#: ../rules/base.xml.in.h:807
-msgid "Yoruba"
-msgstr "ヨルバ語"
+msgid "Arabic (Pakistan)"
+msgstr "アラビア語 (パキスタン)"
+#. Keyboard indicator for Sindhi layouts
#: ../rules/base.xml.in.h:808
-msgid "Zero-width non-joiner character at second level"
-msgstr "第2層で幅 0 の非結合文字を入力する"
+msgid "sd"
+msgstr "sd"
#: ../rules/base.xml.in.h:809
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力する"
-
-#: ../rules/base.xml.in.h:810
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層では何もしない"
+msgid "Sindhi"
+msgstr "シンディー語"
+#. Keyboard indicator for Dhivehi layouts
#: ../rules/base.xml.in.h:811
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層で細い改行不可空白文字を入力する"
+msgid "dv"
+msgstr "dv"
#: ../rules/base.xml.in.h:812
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層で幅 0 の結合文字を入力する"
+msgid "Dhivehi"
+msgstr "Dhivehi"
#: ../rules/base.xml.in.h:813
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で幅 0 の結合文字を入力する"
-
-#: ../rules/base.xml.in.h:814
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "第2層で幅 0 の非結合文字を入力し、第3層で幅 0 の結合文字を入力し、第4層で改行不可空白文字を入力する"
+msgid "English (South Africa)"
+msgstr "英語 (南アフリカ)"
+#. Keyboard indicator for Esperanto layouts
#: ../rules/base.xml.in.h:815
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "第3層で幅 0 の非結合文字を入力し、第4層で幅 0 の結合文字を入力する"
+msgid "eo"
+msgstr "eo"
#: ../rules/base.xml.in.h:816
-msgid "ak"
-msgstr "ak"
+msgid "Esperanto"
+msgstr "エスペラント語"
#: ../rules/base.xml.in.h:817
-msgid "am"
-msgstr "am"
-
-#: ../rules/base.xml.in.h:818
-msgid "ar"
-msgstr "ar"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "エスペラント語 (セミコロンとクォート無し、廃止)"
+#. Keyboard indicator for Nepali layouts
#: ../rules/base.xml.in.h:819
-msgid "avn"
-msgstr "avn"
+msgid "ne"
+msgstr "ne"
#: ../rules/base.xml.in.h:820
-msgid "az"
-msgstr "az"
+msgid "Nepali"
+msgstr "ネパール語"
#: ../rules/base.xml.in.h:821
-msgid "be"
-msgstr "be"
-
-#: ../rules/base.xml.in.h:822
-msgid "ber"
-msgstr "ber"
+msgid "English (Nigeria)"
+msgstr "英語 (ナイジェリア)"
+#. Keyboard indicator for Igbo layouts
#: ../rules/base.xml.in.h:823
-msgid "bg"
-msgstr "bg"
+msgid "ig"
+msgstr "ig"
#: ../rules/base.xml.in.h:824
-msgid "bm"
-msgstr "bm"
-
-#: ../rules/base.xml.in.h:825
-msgid "bn"
-msgstr "bn"
+msgid "Igbo"
+msgstr "イボ語"
+#. Keyboard indicator for Yoruba layouts
#: ../rules/base.xml.in.h:826
-msgid "brl"
-msgstr "brl"
+msgid "yo"
+msgstr "yo"
+# ISO 639
#: ../rules/base.xml.in.h:827
-msgid "bs"
-msgstr "bs"
-
-#: ../rules/base.xml.in.h:828
-msgid "ca"
-msgstr "ca"
+msgid "Yoruba"
+msgstr "ヨルバ語"
+#. Keyboard indicator for Amharic layouts
#: ../rules/base.xml.in.h:829
-msgid "chr"
-msgstr "chr"
+msgid "am"
+msgstr "am"
+# ISO 639 より
#: ../rules/base.xml.in.h:830
-msgid "cm"
-msgstr "cm"
-
-#: ../rules/base.xml.in.h:831 ../rules/base.extras.xml.in.h:38
-msgid "crh"
-msgstr "crh"
+msgid "Amharic"
+msgstr "アムハラ語"
+#. Keyboard indicator for Wolof layouts
#: ../rules/base.xml.in.h:832
-msgid "cs"
-msgstr "cs"
+msgid "wo"
+msgstr "wo"
+# ISO 639
#: ../rules/base.xml.in.h:833
-msgid "da"
-msgstr "da"
-
-#: ../rules/base.xml.in.h:834 ../rules/base.extras.xml.in.h:39
-msgid "de"
-msgstr "de"
+msgid "Wolof"
+msgstr "ウォロフ語"
+#. Keyboard indicator for Braille layouts
#: ../rules/base.xml.in.h:835
-msgid "dv"
-msgstr "dv"
+msgid "brl"
+msgstr "brl"
#: ../rules/base.xml.in.h:836
-msgid "dz"
-msgstr "dz"
+msgid "Braille"
+msgstr "ブライユ点字"
#: ../rules/base.xml.in.h:837
-msgid "ee"
-msgstr "ee"
-
-#: ../rules/base.xml.in.h:838 ../rules/base.extras.xml.in.h:40
-msgid "en"
-msgstr "en"
+msgid "Braille (left hand)"
+msgstr "ブライユ点字 (左手)"
-#: ../rules/base.xml.in.h:839
-msgid "eo"
-msgstr "eo"
+#: ../rules/base.xml.in.h:838
+msgid "Braille (right hand)"
+msgstr "ブライユ点字 (右手)"
+#. Keyboard indicator for Turkmen layouts
#: ../rules/base.xml.in.h:840
-msgid "es"
-msgstr "es"
+msgid "tk"
+msgstr "tk"
+# ISO 639 ではトゥルクメン語とあるが、
+# 外務省の国名ではトルクメニスタン
#: ../rules/base.xml.in.h:841
-msgid "et"
-msgstr "et"
-
-#: ../rules/base.xml.in.h:842 ../rules/base.extras.xml.in.h:41
-msgid "fa"
-msgstr "fa"
+msgid "Turkmen"
+msgstr "トルクメン語"
-#: ../rules/base.xml.in.h:843
-msgid "ff"
-msgstr "ff"
+#: ../rules/base.xml.in.h:842
+msgid "Turkmen (Alt-Q)"
+msgstr "トルクメン語 (Alt-Q)"
+#. Keyboard indicator for Bambara layouts
#: ../rules/base.xml.in.h:844
-msgid "fi"
-msgstr "fi"
+msgid "bm"
+msgstr "bm"
#: ../rules/base.xml.in.h:845
-msgid "fo"
-msgstr "fo"
+msgid "Bambara"
+msgstr "バンバラ語"
-#: ../rules/base.xml.in.h:846 ../rules/base.extras.xml.in.h:42
-msgid "fr"
-msgstr "fr"
+#: ../rules/base.xml.in.h:846
+msgid "French (Mali, alternative)"
+msgstr "フランス語 (マリ、代替)"
#: ../rules/base.xml.in.h:847
-msgid "gaa"
-msgstr "gaa"
+msgid "English (Mali, US Macintosh)"
+msgstr "英語 (マリ、US Macintosh)"
#: ../rules/base.xml.in.h:848
-msgid "gr"
-msgstr "gr"
-
-#: ../rules/base.xml.in.h:849
-msgid "gu"
-msgstr "gu"
+msgid "English (Mali, US international)"
+msgstr "英語 (マリ、US 国際)"
+#. Keyboard indicator for Swahili layouts
#: ../rules/base.xml.in.h:850
-msgid "ha"
-msgstr "ha"
+msgid "sw"
+msgstr "sw"
#: ../rules/base.xml.in.h:851
-msgid "he"
-msgstr "he"
+msgid "Swahili (Tanzania)"
+msgstr "スワヒリ語 (タンザニア)"
#: ../rules/base.xml.in.h:852
-msgid "hi"
-msgstr "hi"
+msgid "Swahili (Kenya)"
+msgstr "スワヒリ語 (ケニア)"
+# ケニアの言語
+# キクーユ語、キクーユ族
#: ../rules/base.xml.in.h:853
-msgid "hr"
-msgstr "hr"
-
-#: ../rules/base.xml.in.h:854
-msgid "hu"
-msgstr "hu"
+msgid "Kikuyu"
+msgstr "キクユ語"
-#: ../rules/base.xml.in.h:855 ../rules/base.extras.xml.in.h:43
-msgid "hy"
-msgstr "hy"
+#. Keyboard indicator for Tswana layouts
+#: ../rules/base.xml.in.h:855
+msgid "tn"
+msgstr "tn"
+# ISO 639
#: ../rules/base.xml.in.h:856
-msgid "ie"
-msgstr "ie"
-
-#: ../rules/base.xml.in.h:857
-msgid "ig"
-msgstr "ig"
+msgid "Tswana"
+msgstr "ツワナ語"
+#. Keyboard indicator for Filipino layouts
#: ../rules/base.xml.in.h:858
-msgid "ike"
-msgstr "ike"
+msgid "ph"
+msgstr "ph"
+# ISO 639
#: ../rules/base.xml.in.h:859
-msgid "in"
-msgstr "in"
+msgid "Filipino"
+msgstr "フィリピノ語"
#: ../rules/base.xml.in.h:860
-msgid "is"
-msgstr "is"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "フィリピノ語 (QWERTY Baybayin)"
#: ../rules/base.xml.in.h:861
-msgid "it"
-msgstr "it"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "フィリピノ語 (Capewell-Dvorak Latin)"
#: ../rules/base.xml.in.h:862
-msgid "ja"
-msgstr "ja"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "フィリピノ語 (Capewell-Dvorak Baybayin)"
#: ../rules/base.xml.in.h:863
-msgid "ka"
-msgstr "ka"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "フィリピノ語 (Capewell-QWERF 2006 Latin)"
#: ../rules/base.xml.in.h:864
-msgid "ki"
-msgstr "ki"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "フィリピノ語 (Capewell-QWERF 2006 Baybayin)"
#: ../rules/base.xml.in.h:865
-msgid "kk"
-msgstr "kk"
+msgid "Filipino (Colemak Latin)"
+msgstr "フィリピノ語 (Colemak Latin)"
#: ../rules/base.xml.in.h:866
-msgid "km"
-msgstr "km"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "フィリピノ語 (Colemak Baybayin)"
#: ../rules/base.xml.in.h:867
-msgid "kn"
-msgstr "kn"
+msgid "Filipino (Dvorak Latin)"
+msgstr "フィリピノ語 (Dvorak Latin)"
#: ../rules/base.xml.in.h:868
-msgid "ko"
-msgstr "ko"
+msgid "Filipino (Dvorak Baybayin)"
+msgstr "フィリピノ語 (Dvorak Baybayin)"
#: ../rules/base.xml.in.h:869
-msgid "ku"
-msgstr "ku"
+msgid "md"
+msgstr ""
+# ISO 639 ではラトヴィア語となっているが、外務省の
+# 国表記、KDEなどではラトビア語となっている
#: ../rules/base.xml.in.h:870
-msgid "lo"
-msgstr "lo"
+#, fuzzy
+msgid "Moldavian"
+msgstr "ラトビア語"
-#: ../rules/base.xml.in.h:871 ../rules/base.extras.xml.in.h:45
-msgid "lt"
-msgstr "lt"
+#: ../rules/base.xml.in.h:871
+msgid "gag"
+msgstr "gag"
-#: ../rules/base.xml.in.h:872 ../rules/base.extras.xml.in.h:46
-msgid "lv"
-msgstr "lv"
+#: ../rules/base.xml.in.h:872
+msgid "Moldavian (Gagauz)"
+msgstr ""
#: ../rules/base.xml.in.h:873
-msgid "mi"
-msgstr "mi"
+msgid "Key(s) to change layout"
+msgstr "配列を変更する時に使用するキー"
#: ../rules/base.xml.in.h:874
-msgid "mk"
-msgstr "mk"
+msgid "Right Alt (while pressed)"
+msgstr "右 Alt (押している間)"
#: ../rules/base.xml.in.h:875
-msgid "ml"
-msgstr "ml"
+msgid "Left Alt (while pressed)"
+msgstr "左 Alt (押している間)"
#: ../rules/base.xml.in.h:876
-msgid "mn"
-msgstr "mn"
+msgid "Left Win (while pressed)"
+msgstr "左 Win (押している間)"
#: ../rules/base.xml.in.h:877
-msgid "mt"
-msgstr "mt"
+msgid "Right Win (while pressed)"
+msgstr "右 Win (押している間)"
#: ../rules/base.xml.in.h:878
-msgid "my"
-msgstr "my"
+msgid "Any Win key (while pressed)"
+msgstr "いずれかの Win キー (押している間)"
#: ../rules/base.xml.in.h:879
-msgid "ne"
-msgstr "ne"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (押している間)、 Alt+Caps Lock で通常の Caps Lock 動作にする"
#: ../rules/base.xml.in.h:880
-msgid "nl"
-msgstr "nl"
+msgid "Right Ctrl (while pressed)"
+msgstr "右 Ctrl (押している間)"
#: ../rules/base.xml.in.h:881
-msgid "no"
-msgstr "no"
+msgid "Right Alt"
+msgstr "右 Alt"
#: ../rules/base.xml.in.h:882
-msgid "or"
-msgstr "or"
+msgid "Left Alt"
+msgstr "左 Alt"
#: ../rules/base.xml.in.h:883
-msgid "pa"
-msgstr "pa"
+msgid "Caps Lock"
+msgstr "Caps Lock"
#: ../rules/base.xml.in.h:884
-msgid "ph"
-msgstr "ph"
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:885 ../rules/base.extras.xml.in.h:47
-msgid "pl"
-msgstr "pl"
+#: ../rules/base.xml.in.h:885
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (最初の配列に変更する)、 Shift+Caps Lock (最後の配列に変更する)"
#: ../rules/base.xml.in.h:886
-msgid "ps"
-msgstr "ps"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "左 Win (最初の配列に変更する)、右 Win/Menu (最後の配列に変更する)"
#: ../rules/base.xml.in.h:887
-msgid "pt"
-msgstr "pt"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "左 Ctrl (最初の配列に変更する)、右 Ctrl (最後の配列に変更する)"
-#: ../rules/base.xml.in.h:888 ../rules/base.extras.xml.in.h:48
-msgid "ro"
-msgstr "ro"
+#: ../rules/base.xml.in.h:888
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:889 ../rules/base.extras.xml.in.h:49
-msgid "ru"
-msgstr "ru"
+#: ../rules/base.xml.in.h:889
+msgid "Both Shift keys together"
+msgstr "両方の Shift キーを同時に押す"
#: ../rules/base.xml.in.h:890
-msgid "sd"
-msgstr "sd"
+msgid "Both Alt keys together"
+msgstr "両方の Alt キーを同時に押す"
#: ../rules/base.xml.in.h:891
-msgid "si"
-msgstr "si"
+msgid "Both Ctrl keys together"
+msgstr "両方の Ctrl キーを同時に押す"
#: ../rules/base.xml.in.h:892
-msgid "sk"
-msgstr "sk"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
#: ../rules/base.xml.in.h:893
-msgid "sl"
-msgstr "sl"
+msgid "Left Ctrl+Left Shift"
+msgstr "左 Ctrl+左 Shift"
#: ../rules/base.xml.in.h:894
-msgid "sq"
-msgstr "sq"
+msgid "Right Ctrl+Right Shift"
+msgstr "右 Ctrl + 右 Shift"
-#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:51
-msgid "sr"
-msgstr "sr"
+#: ../rules/base.xml.in.h:895
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:896
-msgid "sv"
-msgstr "sv"
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
#: ../rules/base.xml.in.h:897
-msgid "sw"
-msgstr "sw"
+msgid "Left Alt+Left Shift"
+msgstr "左 Alt+左 Shift"
#: ../rules/base.xml.in.h:898
-msgid "syc"
-msgstr "syc"
+msgid "Alt+Space"
+msgstr "Alt+Space"
#: ../rules/base.xml.in.h:899
-msgid "ta"
-msgstr "ta"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:900
-msgid "te"
-msgstr "te"
+msgid "Left Win"
+msgstr "左 Win"
#: ../rules/base.xml.in.h:901
-msgid "tg"
-msgstr "tg"
+msgid "Right Win"
+msgstr "右 Win"
#: ../rules/base.xml.in.h:902
-msgid "th"
-msgstr "th"
+msgid "Left Shift"
+msgstr "左 Shift"
#: ../rules/base.xml.in.h:903
-msgid "tk"
-msgstr "tk"
+msgid "Right Shift"
+msgstr "右 Shift"
#: ../rules/base.xml.in.h:904
-msgid "tn"
-msgstr "tn"
+msgid "Left Ctrl"
+msgstr "左 Ctrl"
#: ../rules/base.xml.in.h:905
-msgid "tr"
-msgstr "tr"
+msgid "Right Ctrl"
+msgstr "右 Ctrl"
#: ../rules/base.xml.in.h:906
-msgid "uk"
-msgstr "uk"
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
#: ../rules/base.xml.in.h:907
-msgid "ur"
-msgstr "ur"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "左 Ctrl+ 左tWin (最初の配列に変更する)、右 Ctrl+Menu (2番目の配列に変更する)"
#: ../rules/base.xml.in.h:908
-msgid "uz"
-msgstr "uz"
+msgid "Key to choose 3rd level"
+msgstr "第3層を選択するキー"
#: ../rules/base.xml.in.h:909
-msgid "vi"
-msgstr "vi"
+msgid "Any Win key"
+msgstr "いずれかの Win キー"
#: ../rules/base.xml.in.h:910
-msgid "wo"
-msgstr "wo"
+msgid "Any Alt key"
+msgstr "いずれかの Alt キー"
#: ../rules/base.xml.in.h:911
-msgid "xsy"
-msgstr "xsy"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "右 Alt、 Shift+右 Alt キーを Multi_Key にする"
#: ../rules/base.xml.in.h:912
-msgid "yo"
-msgstr "yo"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "右 Alt キーでは第3層を選択しない"
#: ../rules/base.xml.in.h:913
-msgid "zh"
-msgstr "zh"
+msgid "Enter on keypad"
+msgstr "テンキーの Enter"
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL Keyboard Symbols"
-msgstr "APL Keyboard Symbols"
+#: ../rules/base.xml.in.h:914
+msgid "Backslash"
+msgstr "Backslash"
-#: ../rules/base.extras.xml.in.h:3
-msgid "Armenian (OLPC phonetic)"
-msgstr "アルメニア語 (OLPC 表音)"
+#: ../rules/base.xml.in.h:915
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Less/Greater&gt;"
-# カナダサスカチワン州の地方言語、アトシーナ語?
-#: ../rules/base.extras.xml.in.h:4
-msgid "Atsina"
+#: ../rules/base.xml.in.h:916
+#, fuzzy
+msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "Caps Lock (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+
+#: ../rules/base.xml.in.h:917
+#, fuzzy
+msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "Backslash (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+
+#: ../rules/base.xml.in.h:918
+#, fuzzy
+msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "&lt;Less/Greater&gt; (第3層を選択する。他の第3層を選択するキーと同時に押した場合は第3層で固定する)"
+
+#: ../rules/base.xml.in.h:919
+msgid "Ctrl key position"
+msgstr "Ctrl キーの位置"
+
+#: ../rules/base.xml.in.h:920
+msgid "Caps Lock as Ctrl"
+msgstr "Caps Lock を Ctrl として扱う"
+
+#: ../rules/base.xml.in.h:921
+msgid "Left Ctrl as Meta"
+msgstr "左 Ctrl を Meta として扱う"
+
+#: ../rules/base.xml.in.h:922
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Ctrl と Caps Lock を入れ替える"
+
+#: ../rules/base.xml.in.h:923
+msgid "At left of 'A'"
+msgstr "'A' の左側"
+
+#: ../rules/base.xml.in.h:924
+msgid "At bottom left"
+msgstr "左下"
+
+#: ../rules/base.xml.in.h:925
+msgid "Right Ctrl as Right Alt"
+msgstr "右 Ctrl を右 Alt として扱う"
+
+#: ../rules/base.xml.in.h:926
+msgid "Menu as Right Ctrl"
+msgstr "Menu を右 Ctrl として扱う"
+
+#: ../rules/base.xml.in.h:927
+msgid "Right Alt as Right Ctrl"
+msgstr "右 Alt を右 Ctrl として扱う"
+
+#: ../rules/base.xml.in.h:928
+msgid "Use keyboard LED to show alternative layout"
+msgstr "キーボード LED を代替配列を表すために使用する"
+
+#: ../rules/base.xml.in.h:929
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: ../rules/base.xml.in.h:930
+msgid "Numeric keypad layout selection"
+msgstr "テンキー配列の選択"
+
+#: ../rules/base.xml.in.h:931
+msgid "Legacy"
msgstr ""
-# 古代イランゾロアスター教のアベスタ語?
-#: ../rules/base.extras.xml.in.h:5
-msgid "Avestan"
+#: ../rules/base.xml.in.h:932
+msgid "Unicode additions (arrows and math operators)"
+msgstr "ユニコード追加文字 (矢印および数学記号)"
+
+#: ../rules/base.xml.in.h:933
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "ユニコード追加文字 (矢印および数学記号)。数学記号は標準の層に配置"
+
+#: ../rules/base.xml.in.h:934
+msgid "Legacy Wang 724"
msgstr ""
-#: ../rules/base.extras.xml.in.h:6
-msgid "Couer D'alene Salish"
+#: ../rules/base.xml.in.h:935
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr ""
-# ISO 639 より
+#: ../rules/base.xml.in.h:936
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:937
+msgid "Hexadecimal"
+msgstr "十六進数"
+
+#: ../rules/base.xml.in.h:938
+msgid "ATM/phone-style"
+msgstr "ATM/電話形式"
+
+#: ../rules/base.xml.in.h:939
+msgid "Numeric keypad delete key behaviour"
+msgstr "テンキーにある delete キーの動作"
+
+#: ../rules/base.xml.in.h:940
+msgid "Legacy key with dot"
+msgstr ""
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:942
+msgid "Legacy key with comma"
+msgstr ""
+
+#: ../rules/base.xml.in.h:943
+msgid "Four-level key with dot"
+msgstr ""
+
+#: ../rules/base.xml.in.h:944
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr ""
+
+#: ../rules/base.xml.in.h:945
+msgid "Four-level key with comma"
+msgstr ""
+
+#: ../rules/base.xml.in.h:946
+msgid "Four-level key with momayyez"
+msgstr ""
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:949
+msgid "Four-level key with abstract separators"
+msgstr ""
+
+#: ../rules/base.xml.in.h:950
+msgid "Semi-colon on third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:951
+msgid "Caps Lock key behavior"
+msgstr "Caps Lock キーの動作"
+
+#: ../rules/base.xml.in.h:952
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:953
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:954
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock をロック付き Shift として扱う。 Shift を押した時は Caps Lock を「一時中断」する"
+
+#: ../rules/base.xml.in.h:955
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock をロック付き Shift として扱う。Shift は Caps Lock に影響を及ぼさない"
+
+#: ../rules/base.xml.in.h:956
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr ""
+
+#: ../rules/base.xml.in.h:957
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Caps Lock を追加の Num Lock にする"
+
+#: ../rules/base.xml.in.h:958
+msgid "Swap ESC and Caps Lock"
+msgstr "ESC と Caps Lock を入れ替える"
+
+#: ../rules/base.xml.in.h:959
+msgid "Make Caps Lock an additional ESC"
+msgstr "Caps Lock を追加の ESC にする"
+
+#: ../rules/base.xml.in.h:960
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Caps Lock を追加の Backspace にする"
+
+#: ../rules/base.xml.in.h:961
+msgid "Make Caps Lock an additional Super"
+msgstr "Caps Lock を追加の Super にする"
+
+#: ../rules/base.xml.in.h:962
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Caps Lock を追加の Hyper にする"
+
+#: ../rules/base.xml.in.h:963
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock は Shift をトグルし、すべてのキーが影響を受ける"
+
+#: ../rules/base.xml.in.h:964
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock を無効にする"
+
+#: ../rules/base.xml.in.h:965
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Caps Lock を追加の Control にするが、Caps_Lock キーコードはそのままにする"
+
+#: ../rules/base.xml.in.h:966
+msgid "Alt/Win key behavior"
+msgstr "Alt/Win キーの動作"
+
+#: ../rules/base.xml.in.h:967
+msgid "Add the standard behavior to Menu key"
+msgstr "Menu キーに標準動作を追加する"
+
+#: ../rules/base.xml.in.h:968
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt と Meta を Alt キーに割り当てる"
+
+#: ../rules/base.xml.in.h:969
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control を Win キーに割り当てる (通常の Ctrl キーとする)"
+
+#: ../rules/base.xml.in.h:970
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control を Alt キーに割り当て、 Alt を Win キーに割り当てる"
+
+#: ../rules/base.xml.in.h:971
+msgid "Meta is mapped to Win keys"
+msgstr "Meta を Win キーに割り当てる"
+
+#: ../rules/base.xml.in.h:972
+msgid "Meta is mapped to Left Win"
+msgstr "Meta を左 Win に割り当てる"
+
+#: ../rules/base.xml.in.h:973
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper を Win キーに割り当てる"
+
+#: ../rules/base.xml.in.h:974
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt を右 Win キーに、Super を Menu に割り当てる"
+
+#: ../rules/base.xml.in.h:975
+msgid "Alt is swapped with Win"
+msgstr "Alt と Win を入れ替える"
+
+#: ../rules/base.xml.in.h:976
+msgid "Compose key position"
+msgstr "Compose キーの位置"
+
+#: ../rules/base.xml.in.h:977
+msgid "Pause"
+msgstr "Pause"
+
+#: ../rules/base.xml.in.h:978
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:979
+msgid "Miscellaneous compatibility options"
+msgstr "その他の互換性に関するオプション"
+
+#: ../rules/base.xml.in.h:980
+msgid "Default numeric keypad keys"
+msgstr "デフォルトのテンキー"
+
+#: ../rules/base.xml.in.h:981
+#, fuzzy
+msgid "Numeric keypad keys always enter digits (as in Mac OS)"
+msgstr "テンキーを Macintosh と同じ動作にする"
+
+#: ../rules/base.xml.in.h:982
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "テンキーの Shift の動作を MS Windows と同様にする"
+
+#: ../rules/base.xml.in.h:983
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift を押しても Num Lock を解除せず、代わりに第3層を選択する"
+
+#: ../rules/base.xml.in.h:984
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "サーバーで取り扱われる特殊キー (Ctrl+Alt+&lt;key&gt;)"
+
+#: ../rules/base.xml.in.h:985
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple アルミニウムキーボード: PC キーエミュレート (Print, Scroll Lock, Pause, Num Lock)"
+
+#: ../rules/base.xml.in.h:986
+msgid "Shift cancels Caps Lock"
+msgstr "Shift を押すと Caps Lock をキャンセルする"
+
+#: ../rules/base.xml.in.h:987
+msgid "Enable extra typographic characters"
+msgstr "追加の印刷文字を有効にする"
+
+#: ../rules/base.xml.in.h:988
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "両方の Shift キー同時押しで Caps Lock をトグルする"
+
+#: ../rules/base.xml.in.h:989
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "両方の Shift キー同時押しで Caps Lock を有効にし、片方の Shift キーで無効にする"
+
+#: ../rules/base.xml.in.h:990
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "両方の Shift キー同時押しで Shift ロックをトグルする"
+
+#: ../rules/base.xml.in.h:991
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Shift + NumLock で PointerKeys をトグルする"
+
+#: ../rules/base.xml.in.h:992
+msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:993
+msgid "Adding currency signs to certain keys"
+msgstr "通貨記号を特定のキーに追加割り当て"
+
+#: ../rules/base.xml.in.h:994
+msgid "Euro on E"
+msgstr "E キーにユーロ記号を追加割り当てする"
+
+#: ../rules/base.xml.in.h:995
+msgid "Euro on 2"
+msgstr "2 キーにユーロ記号を追加割り当てする"
+
+#: ../rules/base.xml.in.h:996
+msgid "Euro on 4"
+msgstr "4 キーにユーロ記号を追加割り当てする"
+
+#: ../rules/base.xml.in.h:997
+msgid "Euro on 5"
+msgstr "5 キーにユーロ記号を追加割り当てする"
+
+#: ../rules/base.xml.in.h:998
+msgid "Rupee on 4"
+msgstr "4 キーにルピー記号を追加割り当てする"
+
+#: ../rules/base.xml.in.h:999
+msgid "Key to choose 5th level"
+msgstr "第5層を選択するキー"
+
+#: ../rules/base.xml.in.h:1000
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Less/Greater&gt; で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+
+#: ../rules/base.xml.in.h:1001
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "右 Alt で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+
+#: ../rules/base.xml.in.h:1002
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "左 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+
+#: ../rules/base.xml.in.h:1003
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "右 Win で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する"
+
+#: ../rules/base.xml.in.h:1004
+msgid "Using space key to input non-breakable space character"
+msgstr "スペースキーを使用して改行不可空白文字を入力する時の動作"
+
+#: ../rules/base.xml.in.h:1005
+msgid "Usual space at any level"
+msgstr "すべての層で通常のスペースを使用する"
+
+#: ../rules/base.xml.in.h:1006
+msgid "Non-breakable space character at second level"
+msgstr "第2層で改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1007
+msgid "Non-breakable space character at third level"
+msgstr "第3層で改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1008
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "第3層で改行不可空白文字を入力し、第4層では何もしない"
+
+#: ../rules/base.xml.in.h:1009
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "第3層で改行不可空白文字を入力し、第4層で細い改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1010
+msgid "Non-breakable space character at fourth level"
+msgstr "第4層で改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1011
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "第4層で改行不可空白文字を入力し、第六層で細い改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1012
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "第4層で改行不可空白文字を入力し、第六層で細い改行不可空白文字を入力する (Ctrl+Shift 経由)"
+
+#: ../rules/base.xml.in.h:1013
+msgid "Zero-width non-joiner character at second level"
+msgstr "第2層で幅 0 の非結合文字を入力する"
+
+#: ../rules/base.xml.in.h:1014
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で幅 0 の結合文字を入力する"
+
+#: ../rules/base.xml.in.h:1015
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で幅 0 の結合文字を入力し、第4層で改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1016
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1017
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層では何もしない"
+
+#: ../rules/base.xml.in.h:1018
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層で幅 0 の結合文字を入力する"
+
+#: ../rules/base.xml.in.h:1019
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "第2層で幅 0 の非結合文字を入力し、第3層で改行不可空白文字を入力し、第4層で細い改行不可空白文字を入力する"
+
+#: ../rules/base.xml.in.h:1020
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "第3層で幅 0 の非結合文字を入力し、第4層で幅 0 の結合文字を入力する"
+
+#: ../rules/base.xml.in.h:1021
+msgid "Japanese keyboard options"
+msgstr "日本語キーボードオプション"
+
+#: ../rules/base.xml.in.h:1022
+msgid "Kana Lock key is locking"
+msgstr "かなロックキーのロック動作を有効にする"
+
+#: ../rules/base.xml.in.h:1023
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F スタイルの Backspace にする"
+
+#: ../rules/base.xml.in.h:1024
+msgid "Make Zenkaku Hankaku an additional ESC"
+msgstr "全角/半角 を追加の ESC にする"
+
+#: ../rules/base.xml.in.h:1025
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "エスペラント語 circumflexe (supersigno) の追加"
+
+#: ../rules/base.xml.in.h:1026
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Qwerty キーボードと対応するキーに割り当てる"
+
+#: ../rules/base.xml.in.h:1027
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Dvorak キーボードと対応するキーに割り当てる"
+
+#: ../rules/base.xml.in.h:1028
+msgid "Maintain key compatibility with old Solaris keycodes"
+msgstr ""
+
+#: ../rules/base.xml.in.h:1029
+#, fuzzy
+msgid "Sun Key compatibility"
+msgstr " KEY スキーマ内のキー\n"
+
+#: ../rules/base.xml.in.h:1030
+msgid "Key sequence to kill the X server"
+msgstr "X サーバーを終了するためのキーシーケンス"
+
+#: ../rules/base.xml.in.h:1031
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "apl"
+msgstr "apl"
+
+#: ../rules/base.extras.xml.in.h:2
+#, fuzzy
+msgid "APL keyboard symbols"
+msgstr "画面とキーボード"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Kutenai"
+msgstr "クテナイ語"
+
#: ../rules/base.extras.xml.in.h:7
-msgid "Crimean Tatar (Dobruja Q)"
-msgstr "クリミア・タタール語 (Dobruja Q)"
+msgid "shs"
+msgstr "shs"
-#: ../rules/base.extras.xml.in.h:9
-msgid "English (US, international AltGr Unicode combining)"
-msgstr "英語 (US, international AltGr Unicode combining)"
+#: ../rules/base.extras.xml.in.h:8
+msgid "Secwepemctsin"
+msgstr ""
-#: ../rules/base.extras.xml.in.h:10
-msgid "English (US, international AltGr Unicode combining, alternative)"
-msgstr "英語 (US, international AltGr Unicode combining, alternative)"
+#: ../rules/base.extras.xml.in.h:9
+msgid "Multilingual (Canada, Sun Type 6/7)"
+msgstr ""
-#: ../rules/base.extras.xml.in.h:13
+#: ../rules/base.extras.xml.in.h:12
msgid "German (US keyboard with German letters)"
msgstr "ドイツ語 (ドイツ語文字付き US キーボード)"
-#: ../rules/base.extras.xml.in.h:14
+#: ../rules/base.extras.xml.in.h:13
msgid "German (with Hungarian letters and no dead keys)"
msgstr "ドイツ語 (ハンガリー語文字付き、デッドキー無し)"
-#: ../rules/base.extras.xml.in.h:15
-msgid "Kutenai"
-msgstr "クテナイ語"
+#: ../rules/base.extras.xml.in.h:14
+msgid "German (Sun Type 6/7)"
+msgstr "ドイツ語 (Sun Type 6/7)"
+# 古代イランゾロアスター教のアベスタ語?
#: ../rules/base.extras.xml.in.h:17
-msgid "Latvian (US Colemak)"
-msgstr "ラトビア語 (US Colemak)"
+#, fuzzy
+msgid "Avestan"
+msgstr ""
+" --size-check=[error|warning]\n"
+"\t\t\t ELF .size 指示を検査する (デフォルト --size-check=error)\n"
-#: ../rules/base.extras.xml.in.h:18
-msgid "Latvian (US Colemak, apostrophe variant)"
-msgstr "ラトビア語 (US Colemak, apostrophe variant)"
+#: ../rules/base.extras.xml.in.h:20
+msgid "Lithuanian (US Dvorak with Lithuanian letters)"
+msgstr "リトアニア語 (リトアニア語文字付き US Dvorak)"
+
+#: ../rules/base.extras.xml.in.h:21
+msgid "Lithuanian (Sun Type 6/7)"
+msgstr "リトアニア語 (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:19
+#: ../rules/base.extras.xml.in.h:24
msgid "Latvian (US Dvorak)"
msgstr "ラトビア語 (US Dvorak)"
-#: ../rules/base.extras.xml.in.h:20
+#: ../rules/base.extras.xml.in.h:25
msgid "Latvian (US Dvorak, Y variant)"
msgstr "ラトビア語 (US Dvorak, Y variant)"
-#: ../rules/base.extras.xml.in.h:21
+#: ../rules/base.extras.xml.in.h:26
msgid "Latvian (US Dvorak, minus variant)"
msgstr "ラトビア語 (US Dvorak, minus variant)"
-#: ../rules/base.extras.xml.in.h:22
+#: ../rules/base.extras.xml.in.h:27
msgid "Latvian (programmer US Dvorak)"
msgstr "ラトビア語 (プログラマー US Dvorak)"
-#: ../rules/base.extras.xml.in.h:23
+#: ../rules/base.extras.xml.in.h:28
msgid "Latvian (programmer US Dvorak, Y variant)"
msgstr "ラトビア語 (プログラマー US Dvorak, Y variant)"
-#: ../rules/base.extras.xml.in.h:24
+#: ../rules/base.extras.xml.in.h:29
msgid "Latvian (programmer US Dvorak, minus variant)"
msgstr "ラトビア語 (プログラマー US Dvorak, minus variant)"
-#: ../rules/base.extras.xml.in.h:26
-msgid "Lithuanian (US Dvorak with Lithuanian letters)"
-msgstr "リトアニア語 (リトアニア語文字付き US Dvorak)"
+#: ../rules/base.extras.xml.in.h:30
+msgid "Latvian (US Colemak)"
+msgstr "ラトビア語 (US Colemak)"
-#: ../rules/base.extras.xml.in.h:29
+#: ../rules/base.extras.xml.in.h:31
+msgid "Latvian (US Colemak, apostrophe variant)"
+msgstr "ラトビア語 (US Colemak, apostrophe variant)"
+
+#: ../rules/base.extras.xml.in.h:32
+msgid "Latvian (Sun Type 6/7)"
+msgstr "ラトビア語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:35
+msgid "English (US, international AltGr Unicode combining)"
+msgstr "英語 (US, international AltGr Unicode combining)"
+
+#: ../rules/base.extras.xml.in.h:36
+msgid "English (US, international AltGr Unicode combining, alternative)"
+msgstr "英語 (US, international AltGr Unicode combining, alternative)"
+
+# カナダサスカチワン州の地方言語、アトシーナ語?
+#: ../rules/base.extras.xml.in.h:37
+msgid "Atsina"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:38
+msgid "Couer D'alene Salish"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:39
+msgid "English (US, Sun Type 6/7)"
+msgstr "英語 (US、Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:42
msgid "Polish (international with dead keys)"
msgstr "ポーランド語 (国際、デッドキー付き)"
-#: ../rules/base.extras.xml.in.h:31
+#: ../rules/base.extras.xml.in.h:43
+msgid "Polish (Colemak)"
+msgstr "ポーランド語 (Colemak)"
+
+#: ../rules/base.extras.xml.in.h:44
+msgid "Polish (Sun Type 6/7)"
+msgstr "ポーランド語 (Sun Type 6/7)"
+
+# ISO 639 より
+#: ../rules/base.extras.xml.in.h:48
+msgid "Crimean Tatar (Dobruja Q)"
+msgstr "クリミア・タタール語 (Dobruja Q)"
+
+#: ../rules/base.extras.xml.in.h:49
msgid "Romanian (ergonomic Touchtype)"
msgstr "ルーマニア語 (人間工学 Touchtype)"
-#: ../rules/base.extras.xml.in.h:33
+#: ../rules/base.extras.xml.in.h:50
+msgid "Romanian (Sun Type 6/7)"
+msgstr "ルーマニア語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:53
+msgid "Serbian (combining accents instead of dead keys)"
+msgstr "セルビア語 (合成アクセント付き、デッドキー無し)"
+
+#: ../rules/base.extras.xml.in.h:56
msgid "Russian (with Ukrainian-Belorussian layout)"
msgstr "ロシア語 (ウクライナ語・ベラルーシ語配列付き)"
-#: ../rules/base.extras.xml.in.h:34
-msgid "Secwepemctsin"
-msgstr ""
+#: ../rules/base.extras.xml.in.h:57
+msgid "Russian (Sun Type 6/7)"
+msgstr "ロシア語 (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:36
-msgid "Serbian (combining accents instead of dead keys)"
-msgstr "セルビア語 (合成アクセント付き、デッドキー無し)"
+#: ../rules/base.extras.xml.in.h:60
+msgid "Armenian (OLPC phonetic)"
+msgstr "アルメニア語 (OLPC 表音)"
-#: ../rules/base.extras.xml.in.h:37
-msgid "apl"
-msgstr "apl"
+#: ../rules/base.extras.xml.in.h:63
+#, fuzzy
+msgid "Hebrew (Biblical, SIL phonetic)"
+msgstr "ヘブライ語 (Biblical, Tiro)"
-#: ../rules/base.extras.xml.in.h:44
-msgid "kut"
-msgstr "kut"
+#: ../rules/base.extras.xml.in.h:66
+msgid "Arabic (Sun Type 6/7)"
+msgstr "アラビア語 (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:50
-msgid "shs"
-msgstr "shs"
+#: ../rules/base.extras.xml.in.h:69
+msgid "Belgian (Sun Type 6/7)"
+msgstr "ベルギー語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:72
+msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgstr "ポルトガル語 (ブラジル、Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:75
+msgid "Czech (Sun Type 6/7)"
+msgstr "チェコ語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:78
+msgid "Danish (Sun Type 6/7)"
+msgstr "デンマーク語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:81
+msgid "Dutch (Sun Type 6/7)"
+msgstr "オランダ語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:84
+msgid "Estonian (Sun Type 6/7)"
+msgstr "エストニア語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:87
+msgid "Finnish (Sun Type 6/7)"
+msgstr "フィンランド語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:89
+msgid "French (Sun Type 6/7)"
+msgstr "フランス語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:92
+msgid "Greek (Sun Type 6/7)"
+msgstr "ギリシャ語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:95
+msgid "Italian (Sun Type 6/7)"
+msgstr "イタリア語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:98
+msgid "Japanese (Sun Type 6)"
+msgstr "日本語 (Sun Type 6)"
+
+#: ../rules/base.extras.xml.in.h:99
+msgid "Japanese (Sun Type 7 - pc compatible)"
+msgstr "日本語 (Sun Type 7 - PC互換)"
+
+#: ../rules/base.extras.xml.in.h:100
+msgid "Japanese (Sun Type 7 - sun compatible)"
+msgstr "日本語 (Sun Type 7 - SUN互換)"
+
+#: ../rules/base.extras.xml.in.h:103
+msgid "Norwegian (Sun Type 6/7)"
+msgstr "ノルウェー語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:105
+msgid "Portuguese (Sun Type 6/7)"
+msgstr "ポルトガル語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:108
+msgid "Slovak (Sun Type 6/7)"
+msgstr "スロバキア語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:111
+msgid "Spanish (Sun Type 6/7)"
+msgstr "スペイン語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:114
+msgid "Swedish (Sun Type 6/7)"
+msgstr "スウェーデン語 (Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:115
+msgid ">German (Switzerland)"
+msgstr ">ドイツ語 (スイス)"
+
+#: ../rules/base.extras.xml.in.h:116
+msgid "German (Switzerland, Sun Type 6/7)"
+msgstr "ドイツ語 (スイス語、Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:117
+msgid "French (Switzerland, Sun Type 6/7)"
+msgstr "フランス語 (スイス、Sun Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:120
+msgid "Turkish (Sun Type 6/7)"
+msgstr "トルコ語 (Sun Type 6/7)"
-#~ msgid "English (Cameroon qwerty)"
-#~ msgstr "英語 (カメルーン qwerty)"
+#: ../rules/base.extras.xml.in.h:123
+msgid "Ukrainian (Sun Type 6/7)"
+msgstr "ウクライナ語 (Sun Type 6/7)"
-#~ msgid "French (Cameroon azerty)"
-#~ msgstr "フランス語 (カメルーン azerty)"
+#: ../rules/base.extras.xml.in.h:125
+msgid "English (UK, Sun Type 6/7)"
+msgstr "英語 (UK、Sun Type 6/7)"
-#~ msgid "German (qwerty)"
-#~ msgstr "ドイツ語 (qwerty)"
+#: ../rules/base.extras.xml.in.h:128
+msgid "Korean (Sun Type 6/7)"
+msgstr "韓国語 (Sun Type 6/7)"
-# スリランカ シンハラ語
-#~ msgid "Sinhala"
-#~ msgstr "シンハラ語"
+#~ msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+#~ msgstr "&lt;Less/Greater&gt; で第5層を選択する。他の第5層を選択するキーと同時に押した場合は第5層で固定する。固定を解除する場合は第5層を選択するキーのいずれかを押す"
diff --git a/xorg-server/xkeyboard-config/po/pl.po b/xorg-server/xkeyboard-config/po/pl.po
index 37b1cf783..168a6f742 100644
--- a/xorg-server/xkeyboard-config/po/pl.po
+++ b/xorg-server/xkeyboard-config/po/pl.po
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.7.99\n"
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-18 15:02+0100\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 19:20+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
@@ -1825,2014 +1825,2054 @@ msgid "German (eliminate dead keys)"
msgstr "Niemiecki (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Niemiecki (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Rumuński (Niemcy)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumuński (Niemcy, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Niemiecki (Dvoraka)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Niemiecki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Niemiecki (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Niemiecki (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Niemiecki (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Dolnołużycki"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Dolnołużycki (QWERTZ)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Niemiecki (QWERTY)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Rosyjski (Niemcy, fonetyczny)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Grecki"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Grecki (prosty)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Grecki (rozszerzony)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Grecki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Grecki (politoniczny)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Węgierski"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Węgierski (standardowy)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Węgierski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Węgierski (QWERTY)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Węgierski (101/QWERTZ/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Węgierski (101/QWERTZ/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Węgierski (101/QWERTZ/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Węgierski (101/QWERTZ/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Węgierski (101/QWERTY/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Węgierski (101/QWERTY/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Węgierski (101/QWERTY/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Węgierski (101/QWERTY/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Węgierski (102/QWERTZ/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Węgierski (102/QWERTZ/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Węgierski (102/QWERTZ/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Węgierski (102/QWERTZ/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Węgierski (102/QWERTY/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Węgierski (102/QWERTY/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Węgierski (102/QWERTY/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Węgierski (102/QWERTY/kropka/bez klawiszy akcentów)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Islandzki"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Islandzki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandzki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Islandzki (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Islandzki (Dvoraka)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Hebrajski"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Hebrajski (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Hebrajski (fonetyczny)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebrajski (biblijny, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Włoski"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Włoski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Włoski (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Włoski (klawiatura US z literami włoskimi)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Gruziński (Włochy)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Włoski (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Japoński"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Japoński (Kana)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Japoński (Kana 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Japoński (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Japoński (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Japoński (Dvoraka)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Kirgiski"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Kirgiski (fonetyczny)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Khmerski (Kambodża)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Kazaski"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rosyjski (Kazahstan, z kazaskim)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Kazaski (z rosyjskim)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Laotański"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Laotański (proponowany układ standardowy STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Hiszpański (Ameryka Łacińska)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Hiszpański (Ameryka Łacińska, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Hiszpański (Ameryka Łacińska, ze znakiem tyldy)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Hiszpański (Ameryka Łacińska, klawisze akcentów Suna)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Litewski"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Litewski (standardowy)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litewski (klawiatura US z literami litewskimi)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litewski (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Litewski (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Litewski (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Łotewski"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Łotewski (wariant z apostrofem)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Łotewski (wariant z tyldą)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Łotewski (wariant F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Łotewski (współczesny)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Łotewski (ergonomiczny ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Łotewski (zaadaptowany)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Maoryski"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Czarnogórski"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Czarnogórski (cyrylicki)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Czarnogórski (cyrylicki, zamienione Z i Ż)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Czarnogórski (łaciński unikodowy)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Czarnogórski (łaciński QWERTY)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Czarnogórski (łaciński unikodowy QWERTY)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Czarnogórski (cyrylicki z cudzysłowami)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Czarnogórski (łaciński z cudzysłowami)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Macedoński"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedoński (bez klawiszy akcentów)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Maltański"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Maltański (z układem US)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Mongolski"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Norweski"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Norweski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Norweski (Dvoraka)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Północnolapoński (Norwegia)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Północnolapoński (Norwegia, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Norweski (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norweski (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Norweski (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Polski"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Polski (stary)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Polski (QWERTZ)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Polski (Dvoraka)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Kaszubski"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rosyjski (Polska, fonetyczny Dvoraka)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Polski (Dvoraka programisty)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Portugalski"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugalski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Portugalski (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Portugalski (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugalski (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugalski (Macintosh, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Portugalski (nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Portugalski (nativo dla klawiatur USA)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugalia, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Rumuński"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Rumuński (cedilla)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Rumuński (standardowy)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Rumuński (standardowy cedilla)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Rumuński (klawisze Win)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Rosyjski"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Rosyjski (fonetyczny)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Rosyjski (fonetyczny, klawisze Win)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Rosyjski (maszynistki)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Rosyjski (stary)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Rosyjski (maszynistki, stary)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Tatarski"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Osetyjski (stary)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Osetyjski (klawisze Win)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Czuwaski"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Czuwaski (łaciński)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Udmurcki"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Jakucki"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Kałmucki"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Rosyjski (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Rosyjski (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Serbski (Rosja)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Baszkirski"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Maryjski"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Serbski"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Serbski (cyrylicki, zamienione Z i Ż)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Serbski (łaciński)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Serbski (łaciński unikodowy)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Serbski (łaciński QWERTY)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbski (łaciński unikodowy QWERTY)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbski (cyrylicki z cudzysłowami)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Serbski (łaciński z cudzysłowami)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Pannońskorusiński (homofoniczny)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Słoweński"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Słoweński (używanie cudzysłowów do cytowania)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Słoweński (klawiatura US z literami słoweńskimi)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Słowacki"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Słowacki (rozszerzony backslash)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Słowacki (QWERTY)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Słowacki (QWERTY, rozszerzony Backslash)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Hiszpański"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Hiszpański (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Hiszpański (ze znakiem tyldy)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Hiszpański (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Hiszpański (Dvoraka)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturski (hiszpański, z H i L z dolną kropką)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Kataloński (hiszpański, z L ze środkową kropką)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Hiszpański (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Szwedzki"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Szwedzki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Szwedzki (Dvoraka)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Rosyjski (Szwecja, fonetyczny)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rosyjski (Szwecja, fonetyczny, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Północnolapoński (Szwecja)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Szwedzki (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Szwedzki (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Szwedzki migowy"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Niemiecki (Szwajcaria)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Niemiecki (Szwajcaria, stary)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Niemiecki (Szwajcaria, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Niemiecki (Szwajcaria, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Francuski (Szwajcaria)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francuski (Szwajcaria, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francuski (Szwajcaria, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Francuski (Szwajcaria, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Niemiecki (Szwajcaria, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Arabski (syryjski)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Syryjski"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Syryjski (fonetyczny)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdyjski (Syria, łaciński Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Kurdyjski (Syria, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdyjski (Syria, łaciński Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Tadżycki"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Tadżycki (stary)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Syngaleski (fonetyczny)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilski (Sri Lanka, unikodowy)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilski (Sri Lanka, maszynistki TAB)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Tajski"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Tajski (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Tajski (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Turecki"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Turecki (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Turecki (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Turecki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdyjski (Turcja, łaciński Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Kurdyjski (Turcja, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdyjski (Turcja, łaciński Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Turecki (międzynarodowy z klawiszami akcentów)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krymskotatarski (turecki Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Krymskotatarski (turecki F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krymskotatarski (turecki Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Tajwański"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Tajwański (autochtoniczny)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Tajwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Ukraiński"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Ukraiński (fonetyczny)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Ukraiński (maszynistki)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Ukraiński (klawisze Win)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Ukraiński (stary)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Ukraiński (standardowy RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rosyjski (Ukraina, standardowy RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Ukraiński (homofoniczny)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Angielski (Wielka Brytania)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Angielski (Wielka Brytania, rozszerzone klawisze Win)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Angielski (Wielka Brytania, międzynarodowy z klawiszami akcentów)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Angielski (Wielka Brytania, Dvoraka)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Angielski (Wielka Brytania, Dvoraka z brytyjskimi znakami przestankowymi)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Angielski (Wielka Brytania, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Angielski (Wielka Brytania, międzynarodowy Macintosh)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Angielski (Wielka Brytania, Colemak)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Uzbecki"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Uzbecki (łaciński)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Wietnamski"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Koreański"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Koreański (kompatybilny ze 101/104 klawiszami)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Japoński (serie PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Irlandzki"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "Irlandzki gaelicki"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Irlandzki (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Ogamiczny"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Ogamiczny (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Arabski (pakistański)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Malediwski"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Angielski (Afryka Południowa)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Esperancki"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (zamieniony średnik i apostrof, przestarzałe)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Nepalski"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Angielski (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Ibo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Joruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Amharski"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Braille'a"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Braille (leworęczny)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Braille (praworęczny)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Turkmeński"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Turkmeński (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Francuski (Mali, alternatywny)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Angielski (Mali, USA - Macintosh)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Angielski (Mali, międzynarodowy USA)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Suahili (Tanzania)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Suahili (Kenia)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Kikiju"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Filipiński"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (baybain QWERTY)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipiński (łaciński Capewella-Dvoraka)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipiński (baybayin Capewella-Dvoraka)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipiński (łaciński Capewella-QWERF 2006)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipiński (baybayin Capewella-QWERF 2006)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Filipiński (łaciński Colemak)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipiński (baybain Colemak)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Filipiński (łaciński Dvoraka)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipiński (baybain Dvoraka)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Mołdawski"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Mołdawski (gagauski)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Klawisze zmieniające układ"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Prawy Alt (wciśnięty)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Lewy Alt (wciśnięty)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Lewy Win (wciśnięty)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Prawy Win (wciśnięty)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Dowolny klawisz Win (wciśnięty)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "CapsLock (wciśnięty), Alt+CapsLock działa jak zwykły CapsLock"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Prawy Ctrl (wciśnięty)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Prawy Alt"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Lewy Alt"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "CapsLock"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Shift+CapsLock"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "CapsLock (do pierwszego układu), Shift+CapsLock (do ostatniego układu)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Lewy Win (do pierwszego układu), prawy Win/Menu (do ostatniego układu)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Lewy Ctrl (do pierwszego układu), prawy Ctrl (do ostatniego układu)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+CapsLock"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Oba klawisze Shift naraz"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Oba klawisze Alt naraz"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Oba klawisze Ctrl naraz"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Lewy Ctrl+lewy Shift"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Prawy Ctrl+prawy Shift"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Lewy Alt+lewy Shift"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Spacja"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Lewy Win"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Prawy Win"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Lewy Shift"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Prawy Shift"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Lewy Ctrl"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Prawy Ctrl"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "ScrollLock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Lewy Ctrl+lewy Win (do pierwszego układu), prawy Ctrl+Menu (do drugiego układu)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Klawisz wybierający poziom 3."
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Dowolny klawisz Win"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Dowolny klawisz Alt"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Prawy Alt, Shift+prawy Alt jako Multi_Key"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Prawy Alt nigdy nie wybierający poziomu 3."
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Enter na klawiaturze numerycznej"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mniejsze/Większe&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "CapsLock wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Odwrotny ukośnik wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Położenie klawisza Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "CapsLock jako Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Lewy Ctrl jako Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Zamiana Ctrl i CapsLocka"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Z lewej 'A'"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "W lewym dolnym rogu"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Prawy Ctrl jako prawy Alt"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menu jako prawy Ctrl"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Prawy Alt jako prawy Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "NumLock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Wybór układu klawiatury numerycznej"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Stary"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Dodatki Unicode (strzałki i symbole matematyczne)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Dodatki Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Legacy Wang 724"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Szesnastkowy"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "ATM/telefoniczna"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Klawisz tradycyjny z kropką"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Klawisz tradycyjny z przecinkiem"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Klawisz czterofunkcyjny z kropką"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Klawisz czterofunkcyjny z kropką, tylko latin-9"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Klawisz czterofunkcyjny z przecinkiem"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Klawisz czterofunkcyjny ze znakiem momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Klawisz czterofunkcyjny z abstrakcyjnymi separatorami"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Średnik na poziomie 3."
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Zachowanie klawisza CapsLock"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift wstrzymuje CapsLock"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift nie wpływa na CapsLock"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "CapsLock działa jako Shift z blokadą. Shift wstrzymuje CapsLock"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "CapsLock działa jako Shift z blokadą. Shift nie wpływa na CapsLock"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "CapsLock przełącza wielkość znaków alfabetycznych"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "CapsLock jako dodatkowy NumLock"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Zamiana Esc i CapsLocka"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "CapsLock jako dodatkowy Esc"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "CapsLock jako dodatkowy Backspace"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "CapsLock jako dodatkowy Super"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "CapsLock jako dodatkowy Hyper"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "CapsLock przełącza Shift wpływając na wszystkie klawisze"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "CapsLock wyłączony"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "CapsLock jako dodatkowy Ctrl, ale z pozostawieniem symbolu Caps_Lock"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Zachowanie klawiszy Alt/Win"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Dodanie standardowego działania klawisza Menu"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt i Meta pod klawiszami Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt pod klawiszami Win (oraz zwykłymi klawiszami Alt)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control pod klawiszami Alt, Alt pod klawiszami Win"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta pod klawiszami Win"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta pod lewym Win"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper pod klawiszami Win"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt pod prawym Win, Super pod Menu"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Lewy zamieniony z Win"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Położenie klawisza Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "Pozion 3. lewego klawisza Win"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "Pozion 3. prawego klawisza Win"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Poziom 3. klawisza Menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "Poziom 3. lewego klawisza Ctrl"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "Poziom 3. prawego klawisza Ctrl"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Poziom 3. klawisza Caps Lock"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Poziom 3. klawisza &lt;Mniejsze/Większe&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pauza"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Różne opcje kompatybilności"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Domyślne klawisze klawiatury numerycznej"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Klawiatura numeryczna zawsze prowadza cyfry (jak w Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Shift z klawiaturą numeryczną działą jak pod MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift nie anuluje NumLocka, wybiera poziom 3."
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Klawisze specjalne (Ctrl+Alt+&lt;klawisz&gt;) obsługiwane przez serwer"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: emulacja klawiszy PC (Print, ScrollLock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Shift anuluje CapsLock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Włączenie dodatkowych znaków typograficznych"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Oba klawisze Shift naraz przełączają CapsLock"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Oba klawisze Shift naraz włączają CapsLock, jeden Shift wyłącza"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Oba klawisze Shift naraz przełączają ShiftLock"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Przełączanie klawiszy kursorów przez Shift + NumLock."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Akcje klawiatury mogą przełamywać przechwytywanie (uwaga: zagrożenie bezpieczeństwa)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Dodanie znaków walut do pewnych klawiszy"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Euro pod E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Euro pod 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Euro pod 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Euro pod 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Rupia pod 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Klawisz wybierający poziom 5."
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Używanie klawisza spacji do wprowadzania znaku niełamliwej spacji"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Zwykła spacja na dowolnym poziomie"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Znak niełamliwej spacji na poziomie 2."
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Znak niełamliwej spacji na poziomie 3."
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6."
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6. (z Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2."
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3."
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3., znak niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3."
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Opcje klawiatury japońskiej"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Blokujący klawisz Kana Lock"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Backspace w stylu NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Zenkaku Hankaku jako dodatkowy Esc"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Dodanie akcentów przeciągłych Esperanto (supersigno)"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Pod odpowiednimi klawiszami wg układu QWERTY."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Zachowanie zgodności klawiszy ze starymi kodami Solarisa"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Zgodność klawiszy z Sunem"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Sekwencja klawiszy zabijająca serwer X"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Backspace"
@@ -3997,7 +4037,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Belgijski (Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugalski (Brazylia, Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4064,10 +4104,6 @@ msgstr "Hiszpański (Sun Type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Szwedzki (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr "Niemiecki (Szwajcaria)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Niemiecki (Szwajcaria, Sun Type 6/7)"
diff --git a/xorg-server/xkeyboard-config/po/pt_BR.po b/xorg-server/xkeyboard-config/po/pt_BR.po
new file mode 100644
index 000000000..c77945a3f
--- /dev/null
+++ b/xorg-server/xkeyboard-config/po/pt_BR.po
@@ -0,0 +1,4145 @@
+# Brazilian Portuguese translation for xkeyboard-config
+# Copyright (c) 2013 Canonical Ltd, and Rosetta Contributors 2013
+# This file is distributed under the same license as the xkeyboard-config package.
+# Gabriell Nascimento <gabriellhrn@gmail.com>, 2012.
+# Enrico Nicoletto <liverig@gmail.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 09:27-0300\n"
+"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-09-01 07:16+0000\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../rules/base.xml.in.h:1
+msgid "Generic 101-key PC"
+msgstr "PC Genérico de 101 teclas"
+
+#: ../rules/base.xml.in.h:2
+msgid "Generic 102-key (Intl) PC"
+msgstr "Genérico 102 teclas (Intl) PC"
+
+#: ../rules/base.xml.in.h:3
+msgid "Generic 104-key PC"
+msgstr "PC Genérico de 104 teclas"
+
+#: ../rules/base.xml.in.h:4
+msgid "Generic 105-key (Intl) PC"
+msgstr "PC (Intl) Genérico de 105 teclas"
+
+#: ../rules/base.xml.in.h:5
+msgid "Dell 101-key PC"
+msgstr "Dell 101 teclas"
+
+#: ../rules/base.xml.in.h:6
+msgid "Dell Latitude series laptop"
+msgstr "Dell Latitude series laptop"
+
+#: ../rules/base.xml.in.h:7
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
+
+#: ../rules/base.xml.in.h:8
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
+
+#: ../rules/base.xml.in.h:9
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
+
+#: ../rules/base.xml.in.h:10
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
+
+#: ../rules/base.xml.in.h:11
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
+
+#: ../rules/base.xml.in.h:12
+msgid "Winbook Model XP5"
+msgstr "Modelo Winbook XP5"
+
+#: ../rules/base.xml.in.h:13
+msgid "PC-98xx Series"
+msgstr "Série PC-98xx"
+
+#: ../rules/base.xml.in.h:14
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
+
+#: ../rules/base.xml.in.h:15
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
+
+#: ../rules/base.xml.in.h:16
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
+
+#: ../rules/base.xml.in.h:17
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
+
+#: ../rules/base.xml.in.h:18
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF23000 - Teclado sem fio para Internet"
+
+#: ../rules/base.xml.in.h:19
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
+
+#: ../rules/base.xml.in.h:20
+msgid "Brother Internet Keyboard"
+msgstr "Brother - teclado para internet"
+
+#: ../rules/base.xml.in.h:21
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimídia"
+
+#: ../rules/base.xml.in.h:22
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
+
+#: ../rules/base.xml.in.h:23
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+#: ../rules/base.xml.in.h:24
+msgid "BTC 9000"
+msgstr "BTC 9000"
+
+#: ../rules/base.xml.in.h:25
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
+
+#: ../rules/base.xml.in.h:26
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
+
+#: ../rules/base.xml.in.h:27
+msgid "BTC 5090"
+msgstr "BTC 5090"
+
+#: ../rules/base.xml.in.h:28
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+#: ../rules/base.xml.in.h:29
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet e Jogos"
+
+#: ../rules/base.xml.in.h:30
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
+
+#: ../rules/base.xml.in.h:31
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
+
+#: ../rules/base.xml.in.h:32
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (opção alternativa)"
+
+#: ../rules/base.xml.in.h:33
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
+
+#: ../rules/base.xml.in.h:34
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
+
+#: ../rules/base.xml.in.h:35
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
+
+#: ../rules/base.xml.in.h:36
+msgid "Chicony Internet Keyboard"
+msgstr "Teclado Chicony para Internet"
+
+#: ../rules/base.xml.in.h:37
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
+
+#: ../rules/base.xml.in.h:38
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
+
+#: ../rules/base.xml.in.h:39
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
+
+#: ../rules/base.xml.in.h:40
+msgid "Compaq Easy Access Keyboard"
+msgstr "Teclado Compaq Easy Access"
+
+#: ../rules/base.xml.in.h:41
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Teclado Compaq para Internet (7 teclas)"
+
+#: ../rules/base.xml.in.h:42
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Teclado Compaq para Internet (13 teclas)"
+
+#: ../rules/base.xml.in.h:43
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Teclado Compaq para Internet (18 teclas)"
+
+#: ../rules/base.xml.in.h:44
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
+
+#: ../rules/base.xml.in.h:45
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Laptop/notebook Compaq (ex. Armada) Teclado de Laptop"
+
+#: ../rules/base.xml.in.h:46
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Laptop/notebook Compaq (ex. Presario) Teclado para Internet"
+
+#: ../rules/base.xml.in.h:47
+msgid "Compaq iPaq Keyboard"
+msgstr "Teclado Compaq IPaq"
+
+#: ../rules/base.xml.in.h:48
+msgid "Dell"
+msgstr "Dell"
+
+#: ../rules/base.xml.in.h:49
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
+
+#: ../rules/base.xml.in.h:50
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
+
+#: ../rules/base.xml.in.h:51
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keyboard"
+
+#: ../rules/base.xml.in.h:52
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+
+#: ../rules/base.xml.in.h:53
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell Laptop/notebook Precision M series"
+
+#: ../rules/base.xml.in.h:54
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Teclado Desktop para Rede sem Fio Dexxa"
+
+#: ../rules/base.xml.in.h:55
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond séries 9801 / 9802"
+
+#: ../rules/base.xml.in.h:56
+msgid "DTK2000"
+msgstr "DTK2000"
+
+#: ../rules/base.xml.in.h:57
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
+
+#: ../rules/base.xml.in.h:58
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO laptop"
+
+#: ../rules/base.xml.in.h:59
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+
+#: ../rules/base.xml.in.h:60
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
+
+#: ../rules/base.xml.in.h:61
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
+
+#: ../rules/base.xml.in.h:62
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
+
+#: ../rules/base.xml.in.h:63
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
+
+#: ../rules/base.xml.in.h:64
+msgid "Gyration"
+msgstr "Gyration"
+
+#: ../rules/base.xml.in.h:65
+msgid "HTC Dream"
+msgstr "HTC Dream"
+
+#: ../rules/base.xml.in.h:66
+msgid "Kinesis"
+msgstr "Kinesis"
+
+#: ../rules/base.xml.in.h:67
+msgid "Logitech Generic Keyboard"
+msgstr "Teclado Genérico Logitech"
+
+#: ../rules/base.xml.in.h:68
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 teclas extras via G15daemon"
+
+#: ../rules/base.xml.in.h:69
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Teclado para Internet"
+
+#: ../rules/base.xml.in.h:70
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Teclado Multimídia"
+
+#: ../rules/base.xml.in.h:71
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
+
+#: ../rules/base.xml.in.h:72
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
+
+#: ../rules/base.xml.in.h:73
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
+
+#: ../rules/base.xml.in.h:74
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
+
+#: ../rules/base.xml.in.h:75
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
+
+#: ../rules/base.xml.in.h:76
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
+
+#: ../rules/base.xml.in.h:77
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
+
+#: ../rules/base.xml.in.h:78
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
+
+#: ../rules/base.xml.in.h:79
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
+
+#: ../rules/base.xml.in.h:80
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
+
+#: ../rules/base.xml.in.h:81
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
+
+#: ../rules/base.xml.in.h:82
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
+
+#: ../rules/base.xml.in.h:83
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
+
+#: ../rules/base.xml.in.h:84
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+
+#: ../rules/base.xml.in.h:85
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:86
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+
+#: ../rules/base.xml.in.h:87
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
+
+#: ../rules/base.xml.in.h:88
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
+
+#: ../rules/base.xml.in.h:89
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
+
+#: ../rules/base.xml.in.h:90
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Teclado Logitech Internet 350"
+
+#: ../rules/base.xml.in.h:91
+msgid "Logitech Media Elite Keyboard"
+msgstr "Teclado Logitech Media Elite"
+
+#: ../rules/base.xml.in.h:92
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
+
+#: ../rules/base.xml.in.h:93
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
+
+#: ../rules/base.xml.in.h:94
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
+
+#: ../rules/base.xml.in.h:95
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
+
+#: ../rules/base.xml.in.h:96
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (opção alternativa)"
+
+#: ../rules/base.xml.in.h:97
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (opção alternativa 2)"
+
+#: ../rules/base.xml.in.h:98
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
+
+#: ../rules/base.xml.in.h:99
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+
+#: ../rules/base.xml.in.h:100
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
+
+#: ../rules/base.xml.in.h:101
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
+
+#: ../rules/base.xml.in.h:102
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
+
+#: ../rules/base.xml.in.h:103
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
+
+#: ../rules/base.xml.in.h:104
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+
+#: ../rules/base.xml.in.h:105
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+
+#: ../rules/base.xml.in.h:106
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
+
+#: ../rules/base.xml.in.h:107
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Teclado Logitech Ultra-X Cordless Media Desktop"
+
+#: ../rules/base.xml.in.h:108
+msgid "Logitech diNovo Keyboard"
+msgstr "Teclado Logitech diNovo"
+
+#: ../rules/base.xml.in.h:109
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Teclado Logitech diNovo Edge"
+
+#: ../rules/base.xml.in.h:110
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
+
+#: ../rules/base.xml.in.h:111
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Teclado Memorex MX2500 EZ-Access"
+
+#: ../rules/base.xml.in.h:112
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
+
+#: ../rules/base.xml.in.h:113
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+
+#: ../rules/base.xml.in.h:114
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+
+#: ../rules/base.xml.in.h:115
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
+
+#: ../rules/base.xml.in.h:116
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:117
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:118
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Teclado Nativo Microsoft Pro OEM"
+
+#: ../rules/base.xml.in.h:119
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "Teclado ViewSonic KU-306 Internet"
+
+#: ../rules/base.xml.in.h:120
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, Sueco"
+
+#: ../rules/base.xml.in.h:121
+msgid "Microsoft Office Keyboard"
+msgstr "Teclado do Microsoft Office"
+
+#: ../rules/base.xml.in.h:122
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Teclado Multimídia Microsoft Wireless 1.0A"
+
+#: ../rules/base.xml.in.h:123
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
+
+#: ../rules/base.xml.in.h:124
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
+
+#: ../rules/base.xml.in.h:125
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Teclado Ortek MCK-800 MM/Internet"
+
+#: ../rules/base.xml.in.h:126
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
+
+#: ../rules/base.xml.in.h:127
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
+
+#: ../rules/base.xml.in.h:128
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
+
+#: ../rules/base.xml.in.h:129
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
+
+#: ../rules/base.xml.in.h:130
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
+
+#: ../rules/base.xml.in.h:131
+msgid "SK-1300"
+msgstr "SK-1300"
+
+#: ../rules/base.xml.in.h:132
+msgid "SK-2500"
+msgstr "SK-2500"
+
+#: ../rules/base.xml.in.h:133
+msgid "SK-6200"
+msgstr "SK-6200"
+
+#: ../rules/base.xml.in.h:134
+msgid "SK-7100"
+msgstr "SK-7100"
+
+#: ../rules/base.xml.in.h:135
+msgid "Super Power Multimedia Keyboard"
+msgstr "Teclado Multimídia Super Power"
+
+#: ../rules/base.xml.in.h:136
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
+
+#: ../rules/base.xml.in.h:137
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
+
+#: ../rules/base.xml.in.h:138
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
+
+#: ../rules/base.xml.in.h:139
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:140
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Teclado Trust Wireless Classic"
+
+#: ../rules/base.xml.in.h:141
+msgid "Trust Direct Access Keyboard"
+msgstr "Teclado Trust Direct Access"
+
+#: ../rules/base.xml.in.h:142
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:143
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:144
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:145
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:146
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:modo EU)"
+
+#: ../rules/base.xml.in.h:147
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)"
+
+#: ../rules/base.xml.in.h:148
+msgid "Yahoo! Internet Keyboard"
+msgstr "Teclado Yahoo! Internet"
+
+#: ../rules/base.xml.in.h:149
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
+
+#: ../rules/base.xml.in.h:150
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
+
+#: ../rules/base.xml.in.h:151
+msgid "Macintosh"
+msgstr "Macintosh"
+
+#: ../rules/base.xml.in.h:152
+msgid "Macintosh Old"
+msgstr "Macintosh Antigo"
+
+#: ../rules/base.xml.in.h:153
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Teclado Happy Hacking para Mac"
+
+#: ../rules/base.xml.in.h:154
+msgid "Acer C300"
+msgstr "Acer C300"
+
+#: ../rules/base.xml.in.h:155
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
+
+#: ../rules/base.xml.in.h:156
+msgid "Acer Laptop"
+msgstr "Notebook Acer"
+
+#: ../rules/base.xml.in.h:157
+msgid "Asus Laptop"
+msgstr "Notebook Asus"
+
+#: ../rules/base.xml.in.h:158
+msgid "Apple"
+msgstr "Apple"
+
+#: ../rules/base.xml.in.h:159
+msgid "Apple Laptop"
+msgstr "Notebook Apple"
+
+#: ../rules/base.xml.in.h:160
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Teclado Apple Aluminium (ANSI)"
+
+#: ../rules/base.xml.in.h:161
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Teclado Apple Aluminium (ISO)"
+
+#: ../rules/base.xml.in.h:162
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Teclado Apple Aluminium (JIS)"
+
+#: ../rules/base.xml.in.h:163
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "Teclado Multimídia Sem Fio SILVERCREST"
+
+#: ../rules/base.xml.in.h:164
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Laptop/notebook eMachines m68xx"
+
+#: ../rules/base.xml.in.h:165
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
+
+#: ../rules/base.xml.in.h:166
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
+
+#: ../rules/base.xml.in.h:167
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
+
+#: ../rules/base.xml.in.h:168
+msgid "Happy Hacking Keyboard"
+msgstr "Teclado Happy Hacking"
+
+#: ../rules/base.xml.in.h:169
+msgid "Classmate PC"
+msgstr "Classmate PC"
+
+#: ../rules/base.xml.in.h:170
+msgid "OLPC"
+msgstr "OLPC"
+
+#: ../rules/base.xml.in.h:171
+msgid "Sun Type 7 USB"
+msgstr "Sun tipo 7 USB"
+
+#: ../rules/base.xml.in.h:172
+msgid "Sun Type 7 USB (European layout)"
+msgstr "Sun tipo 7 USB (disposição européia)"
+
+#: ../rules/base.xml.in.h:173
+msgid "Sun Type 7 USB (Unix layout)"
+msgstr "Sun tipo 7 USB (disposição Unix)"
+
+#: ../rules/base.xml.in.h:174
+msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key"
+msgstr "Sun tipo 7 USB (disposição japonesa) / Japonês de 106 teclas"
+
+#: ../rules/base.xml.in.h:175
+msgid "Sun Type 6/7 USB"
+msgstr "Sun tipo 6/7 USB"
+
+#: ../rules/base.xml.in.h:176
+msgid "Sun Type 6/7 USB (European layout)"
+msgstr "Sun tipo 6/7 USB (disposição européia)"
+
+#: ../rules/base.xml.in.h:177
+msgid "Sun Type 6 USB (Unix layout)"
+msgstr "Sun tipo 6 USB (disposição Unix)"
+
+#: ../rules/base.xml.in.h:178
+msgid "Sun Type 6 USB (Japanese layout)"
+msgstr "Sun tipo 6 USB (disposição japonesa)"
+
+#: ../rules/base.xml.in.h:179
+msgid "Sun Type 6 (Japanese layout)"
+msgstr "Sun tipo 6 (disposição japonesa)"
+
+#: ../rules/base.xml.in.h:180
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+#: ../rules/base.xml.in.h:181
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:182
+msgid "FL90"
+msgstr "FL90"
+
+#: ../rules/base.xml.in.h:183
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
+
+#: ../rules/base.xml.in.h:184
+msgid "Htc Dream phone"
+msgstr "Telefone HTC Dream"
+
+#. Keyboard indicator for English layouts
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:33
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34
+msgid "English (US)"
+msgstr "Inglês (EUA)"
+
+#. Keyboard indicator for Cherokee layouts
+#: ../rules/base.xml.in.h:189
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:190
+msgid "Cherokee"
+msgstr "Cherokee"
+
+#: ../rules/base.xml.in.h:191
+msgid "English (US, with euro on 5)"
+msgstr "Inglês (EUA, com euro no 5)"
+
+#: ../rules/base.xml.in.h:192
+msgid "English (US, international with dead keys)"
+msgstr "Inglês (EUA, internacional com teclas mortas)"
+
+#: ../rules/base.xml.in.h:193
+msgid "English (US, alternative international)"
+msgstr "Inglês (EUA, alternativo internacional)"
+
+#: ../rules/base.xml.in.h:194
+msgid "English (Colemak)"
+msgstr "Inglês (Colemak)"
+
+#: ../rules/base.xml.in.h:195
+msgid "English (Dvorak)"
+msgstr "Inglês (Dvorak)"
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Dvorak, international with dead keys)"
+msgstr "Inglês (Dvorak, internacional com teclas mortas)"
+
+#: ../rules/base.xml.in.h:197
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Inglês (Dvorak alternativo internacional sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:198
+msgid "English (left handed Dvorak)"
+msgstr "Inglês (Dvorak canhoto)"
+
+#: ../rules/base.xml.in.h:199
+msgid "English (right handed Dvorak)"
+msgstr "Inglês (Dvorak destro)"
+
+#: ../rules/base.xml.in.h:200
+msgid "English (classic Dvorak)"
+msgstr "Inglês (Dvorak clássico)"
+
+#: ../rules/base.xml.in.h:201
+msgid "English (programmer Dvorak)"
+msgstr "Inglês (Dvorak para programador)"
+
+#. Keyboard indicator for Russian layouts
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:204
+msgid "Russian (US, phonetic)"
+msgstr "Russo (EUA, fonético)"
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr "Inglês (Macintosh)"
+
+#: ../rules/base.xml.in.h:206
+msgid "English (international AltGr dead keys)"
+msgstr "Inglês (Internacional, com tecla AltGr)"
+
+#: ../rules/base.xml.in.h:207
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Inglês (Mudando disposição nas teclas de divisão e multiplicação)"
+
+#: ../rules/base.xml.in.h:208
+msgid "Serbo-Croatian (US)"
+msgstr "Servo-croata (EUA)"
+
+#: ../rules/base.xml.in.h:209
+msgid "English (Workman)"
+msgstr "Inglês (Workman)"
+
+#: ../rules/base.xml.in.h:210
+msgid "English (Workman, international with dead keys)"
+msgstr "Inglês (Workman, internacional com teclas mortas)"
+
+#. Keyboard indicator for Persian layouts
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:15
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:213
+msgid "Afghani"
+msgstr "Afegane"
+
+#. Keyboard indicator for Pashto layouts
+#: ../rules/base.xml.in.h:215
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:216
+msgid "Pashto"
+msgstr "Pashto"
+
+#. Keyboard indicator for Uzbek layouts
+#: ../rules/base.xml.in.h:218
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:219
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbeque (Afeganistão)"
+
+#: ../rules/base.xml.in.h:220
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Pachto (Afeganistão, OLPC)"
+
+#: ../rules/base.xml.in.h:221
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persa (Afeganistão, OLPC Dari)"
+
+#: ../rules/base.xml.in.h:222
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbeque (Afeganistão, OLPC)"
+
+#. Keyboard indicator for Arabic layouts
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65
+msgid "Arabic"
+msgstr "Árabe"
+
+#: ../rules/base.xml.in.h:226
+msgid "Arabic (azerty)"
+msgstr "Árabe (azerty)"
+
+#: ../rules/base.xml.in.h:227
+msgid "Arabic (azerty/digits)"
+msgstr "Árabe (azerty/dígitos)"
+
+#: ../rules/base.xml.in.h:228
+msgid "Arabic (digits)"
+msgstr "Árabe (dígitos)"
+
+#: ../rules/base.xml.in.h:229
+msgid "Arabic (qwerty)"
+msgstr "Árabe (qwerty)"
+
+#: ../rules/base.xml.in.h:230
+msgid "Arabic (qwerty/digits)"
+msgstr "Árabe (qwerty/dígitos)"
+
+#: ../rules/base.xml.in.h:231
+msgid "Arabic (Buckwalter)"
+msgstr "Árabe (Buckwalter)"
+
+#. Keyboard indicator for Albanian layouts
+#: ../rules/base.xml.in.h:233
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:234
+msgid "Albanian"
+msgstr "Albanês"
+
+#. Keyboard indicator for Armenian layouts
+#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59
+msgid "Armenian"
+msgstr "Armênio"
+
+#: ../rules/base.xml.in.h:238
+msgid "Armenian (phonetic)"
+msgstr "Armênio (fonético)"
+
+#: ../rules/base.xml.in.h:239
+msgid "Armenian (alternative phonetic)"
+msgstr "Armênio (alternativo fonético)"
+
+#: ../rules/base.xml.in.h:240
+msgid "Armenian (eastern)"
+msgstr "Armênio (oriental)"
+
+#: ../rules/base.xml.in.h:241
+msgid "Armenian (western)"
+msgstr "Armênio (ocidental)"
+
+#: ../rules/base.xml.in.h:242
+msgid "Armenian (alternative eastern)"
+msgstr "Armênio (alternativo oriental)"
+
+#. Keyboard indicator for German layouts
+#: ../rules/base.xml.in.h:244 ../rules/base.extras.xml.in.h:10
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:245
+msgid "German (Austria)"
+msgstr "Alemão (Áustria)"
+
+#: ../rules/base.xml.in.h:246
+msgid "German (legacy)"
+msgstr "Alemão (legado)"
+
+#: ../rules/base.xml.in.h:247
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Alemão (Áustria, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:248
+msgid "German (Austria, Sun dead keys)"
+msgstr "Alemão (Áustria, com teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:249
+msgid "German (Austria, Macintosh)"
+msgstr "Alemão (Áustria, Macintosh)"
+
+#. Keyboard indicator for Azerbaijani layouts
+#: ../rules/base.xml.in.h:251
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:252
+msgid "Azerbaijani"
+msgstr "Azerbaijano"
+
+#: ../rules/base.xml.in.h:253
+msgid "Azerbaijani (Cyrillic)"
+msgstr "Azeri (Cirílico)"
+
+#. Keyboard indicator for Belarusian layouts
+#: ../rules/base.xml.in.h:255
+msgid "by"
+msgstr "by"
+
+#: ../rules/base.xml.in.h:256
+msgid "Belarusian"
+msgstr "Bielorrusso"
+
+#: ../rules/base.xml.in.h:257
+msgid "Belarusian (legacy)"
+msgstr "Bielorrusso (legado)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Belarusian (Latin)"
+msgstr "Bielorrusso (latino)"
+
+#. Keyboard indicator for Belgian layouts
+#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:67
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:68
+msgid "Belgian"
+msgstr "Belga"
+
+#: ../rules/base.xml.in.h:262
+msgid "Belgian (alternative)"
+msgstr "Belga (alternativo)"
+
+#: ../rules/base.xml.in.h:263
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belga (alternativo, apenas latin-9)"
+
+#: ../rules/base.xml.in.h:264
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belga (Teclas mortas da Sun, alternativo)"
+
+#: ../rules/base.xml.in.h:265
+msgid "Belgian (ISO alternate)"
+msgstr "Belga (ISO alternativo)"
+
+#: ../rules/base.xml.in.h:266
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belga (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:267
+msgid "Belgian (Sun dead keys)"
+msgstr "Belga (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:268
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belga (Wang modelo 724 azerty)"
+
+#. Keyboard indicator for Bengali layouts
+#: ../rules/base.xml.in.h:270
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:271
+msgid "Bengali"
+msgstr "Bengali"
+
+#: ../rules/base.xml.in.h:272
+msgid "Bengali (Probhat)"
+msgstr "Bengali (Probhat)"
+
+#. Keyboard indicator for Indian layouts
+#: ../rules/base.xml.in.h:274
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:275
+msgid "Indian"
+msgstr "Indiano"
+
+#: ../rules/base.xml.in.h:276
+msgid "Bengali (India)"
+msgstr "Bengali (Índia)"
+
+#: ../rules/base.xml.in.h:277
+msgid "Bengali (India, Probhat)"
+msgstr "Bengali (Índia, Probhat)"
+
+#: ../rules/base.xml.in.h:278
+msgid "Bengali (India, Baishakhi)"
+msgstr "Bengali (Índia, Baishakhi)"
+
+#: ../rules/base.xml.in.h:279
+msgid "Bengali (India, Bornona)"
+msgstr "Bengali (Índia, Bornona)"
+
+#: ../rules/base.xml.in.h:280
+msgid "Bengali (India, Uni Gitanjali)"
+msgstr "Bengali (Índia, Uni Gitanjali)"
+
+#: ../rules/base.xml.in.h:281
+msgid "Bengali (India, Baishakhi Inscript)"
+msgstr "Bengali (Índia, Baishakhi Inscript)"
+
+#. Keyboard indicator for Gujarati layouts
+#: ../rules/base.xml.in.h:283
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:284
+msgid "Gujarati"
+msgstr "Guzarate"
+
+#. Keyboard indicator for Punjabi layouts
+#: ../rules/base.xml.in.h:286
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:287
+msgid "Punjabi (Gurmukhi)"
+msgstr "Punjabi (Gurmukhi)"
+
+#: ../rules/base.xml.in.h:288
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Panjabi (Gurmukhi Jhelum)"
+
+#. Keyboard indicator for Kannada layouts
+#: ../rules/base.xml.in.h:290
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:291
+msgid "Kannada"
+msgstr "Canadense"
+
+#. Keyboard indicator for Malayalam layouts
+#: ../rules/base.xml.in.h:293
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:294
+msgid "Malayalam"
+msgstr "Malayalam"
+
+#: ../rules/base.xml.in.h:295
+msgid "Malayalam (Lalitha)"
+msgstr "Malaio (Lalitha)"
+
+#: ../rules/base.xml.in.h:296
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malaio (Inscript aprimorado com a tecla Rupia)"
+
+#. Keyboard indicator for Oriya layouts
+#: ../rules/base.xml.in.h:298
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:299
+msgid "Oriya"
+msgstr "Oriá"
+
+#. Keyboard indicator for Tamil layouts
+#: ../rules/base.xml.in.h:301
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:302
+msgid "Tamil (Unicode)"
+msgstr "Tâmil (Unicode)"
+
+#: ../rules/base.xml.in.h:303
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tâmil (Teclado com numerais)"
+
+#: ../rules/base.xml.in.h:304
+msgid "Tamil (TAB typewriter)"
+msgstr "Tâmil (máquina de escrever TAB)"
+
+#: ../rules/base.xml.in.h:305
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tâmil (máquina de escrever TSCII)"
+
+#: ../rules/base.xml.in.h:306
+msgid "Tamil"
+msgstr "Tamil"
+
+#. Keyboard indicator for Telugu layouts
+#: ../rules/base.xml.in.h:308
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:309
+msgid "Telugu"
+msgstr "Télugu"
+
+#. Keyboard indicator for Urdu layouts
+#: ../rules/base.xml.in.h:311
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:312
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonético)"
+
+#: ../rules/base.xml.in.h:313
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (fonético alternativo)"
+
+#: ../rules/base.xml.in.h:314
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (teclas Windows)"
+
+#. Keyboard indicator for Hindi layouts
+#: ../rules/base.xml.in.h:316
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:317
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (Bolnagri)"
+
+#: ../rules/base.xml.in.h:318
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
+
+#: ../rules/base.xml.in.h:319
+msgid "English (India, with RupeeSign)"
+msgstr "Inglês (Índia, com a tecla Rupia)"
+
+#. Keyboard indicator for Bosnian layouts
+#: ../rules/base.xml.in.h:321
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:322
+msgid "Bosnian"
+msgstr "Bósnio"
+
+#: ../rules/base.xml.in.h:323
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bósnio (Usando aspas angulares para citações)"
+
+#: ../rules/base.xml.in.h:324
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bósnio (Usando digráfos bósnios)"
+
+#: ../rules/base.xml.in.h:325
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bósnio (Teclado EUA com digráfos bósnios)"
+
+#: ../rules/base.xml.in.h:326
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bósnio (Teclado EUA com letras bósnias)"
+
+#. Keyboard indicator for Portuguese layouts
+#: ../rules/base.xml.in.h:328 ../rules/base.extras.xml.in.h:70
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:329 ../rules/base.extras.xml.in.h:71
+msgid "Portuguese (Brazil)"
+msgstr "Português (Brasil)"
+
+#: ../rules/base.xml.in.h:330
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Português (Brasil, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:331
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portuguese (Brasil, Dvorak)"
+
+#: ../rules/base.xml.in.h:332
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Português (Brasil, nativo)"
+
+#: ../rules/base.xml.in.h:333
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Português (Brazil, nativo para teclados americanos)"
+
+#: ../rules/base.xml.in.h:334
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Português (Brasil, nativo para Esperanto)"
+
+#. Keyboard indicator for Bulgarian layouts
+#: ../rules/base.xml.in.h:336
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:337
+msgid "Bulgarian"
+msgstr "Búlgaro"
+
+#: ../rules/base.xml.in.h:338
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Búlgaro (fonética tradicional)"
+
+#: ../rules/base.xml.in.h:339
+msgid "Bulgarian (new phonetic)"
+msgstr "Búlgaro (fonética nova)"
+
+#: ../rules/base.xml.in.h:340
+msgid "Arabic (Morocco)"
+msgstr "Árabe (Marrocos)"
+
+#. Keyboard indicator for French layouts
+#: ../rules/base.xml.in.h:342 ../rules/base.extras.xml.in.h:3
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:343
+msgid "French (Morocco)"
+msgstr "Francês (Marrocos)"
+
+#. Keyboard indicator for Berber layouts
+#: ../rules/base.xml.in.h:345
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:346
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berber (Marrocos, Tifinagh)"
+
+#: ../rules/base.xml.in.h:347
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berber (Marrocos, Tifinagh alternativo)"
+
+#: ../rules/base.xml.in.h:348
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berber (Marrocos, Tifinagh fonético alternativo)"
+
+#: ../rules/base.xml.in.h:349
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berber (Marrocos, Tifinagh extendido)"
+
+#: ../rules/base.xml.in.h:350
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berber (Marrocos, Tifinagh fonético)"
+
+#: ../rules/base.xml.in.h:351
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berber (Marrocos, Tifinagh fonético extendido)"
+
+#. Keyboard indicator for Cameroon layouts
+#: ../rules/base.xml.in.h:353
+msgid "cm"
+msgstr "cm"
+
+#: ../rules/base.xml.in.h:354
+msgid "English (Cameroon)"
+msgstr "Inglês (Camarões)"
+
+#: ../rules/base.xml.in.h:355
+msgid "French (Cameroon)"
+msgstr "Francês (Camarões)"
+
+#: ../rules/base.xml.in.h:356
+msgid "Cameroon Multilingual (qwerty)"
+msgstr "Camarão multilíngue (qwerty)"
+
+#: ../rules/base.xml.in.h:357
+msgid "Cameroon Multilingual (azerty)"
+msgstr "Camarão multilíngue (azerty)"
+
+#: ../rules/base.xml.in.h:358
+msgid "Cameroon Multilingual (Dvorak)"
+msgstr "Camarão multilíngue (Dvorak)"
+
+#. Keyboard indicator for Burmese layouts
+#: ../rules/base.xml.in.h:360
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:361
+msgid "Burmese"
+msgstr "Birmanês"
+
+#: ../rules/base.xml.in.h:362 ../rules/base.extras.xml.in.h:4
+msgid "French (Canada)"
+msgstr "Francês (Canadá)"
+
+#: ../rules/base.xml.in.h:363
+msgid "French (Canada, Dvorak)"
+msgstr "Francês (Canadá, Dvorak)"
+
+#: ../rules/base.xml.in.h:364
+msgid "French (Canada, legacy)"
+msgstr "Francês (Canadá, legado)"
+
+#: ../rules/base.xml.in.h:365
+msgid "Canadian Multilingual"
+msgstr "Canadense multilíngue"
+
+#: ../rules/base.xml.in.h:366
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadense multilíngue (primeira parte)"
+
+#: ../rules/base.xml.in.h:367
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadense multilíngue (segunda parte)"
+
+#. Keyboard indicator for Inuktikut layouts
+#: ../rules/base.xml.in.h:369
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:370
+msgid "Inuktitut"
+msgstr "Inuktitut"
+
+#: ../rules/base.xml.in.h:371
+msgid "English (Canada)"
+msgstr "Inglês (Canadá)"
+
+#: ../rules/base.xml.in.h:372
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Francês (República Democrática de Congo)"
+
+#. Keyboard indicator for Taiwanese layouts
+#: ../rules/base.xml.in.h:374
+msgid "zh"
+msgstr "zh"
+
+#: ../rules/base.xml.in.h:375
+msgid "Chinese"
+msgstr "Chinês"
+
+#: ../rules/base.xml.in.h:376
+msgid "Tibetan"
+msgstr "Tibetano"
+
+#: ../rules/base.xml.in.h:377
+msgid "Tibetan (with ASCII numerals)"
+msgstr "Tibetano (com númerais ASCII)"
+
+#: ../rules/base.xml.in.h:378
+msgid "Uyghur"
+msgstr "Uigur"
+
+#. Keyboard indicator for Croatian layouts
+#: ../rules/base.xml.in.h:380
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:381
+msgid "Croatian"
+msgstr "Croata"
+
+#: ../rules/base.xml.in.h:382
+msgid "Croatian (use guillemets for quotes)"
+msgstr "Croata (utilizar aspas para citações)"
+
+#: ../rules/base.xml.in.h:383
+msgid "Croatian (use Croatian digraphs)"
+msgstr "Croata (utilizar dígrafos croatas)"
+
+#: ../rules/base.xml.in.h:384
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Croata (Teclado EUA com digráfos croatas)"
+
+#: ../rules/base.xml.in.h:385
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Croata (Teclado EUA com letras croatas)"
+
+#. Keyboard indicator for Chech layouts
+#: ../rules/base.xml.in.h:387 ../rules/base.extras.xml.in.h:73
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:388 ../rules/base.extras.xml.in.h:74
+msgid "Czech"
+msgstr "Tchéco"
+
+#: ../rules/base.xml.in.h:389
+msgid "Czech (with &lt;\\|&gt; key)"
+msgstr "Tcheco (com a tecla &lt;\\|&gt;)"
+
+#: ../rules/base.xml.in.h:390
+msgid "Czech (qwerty)"
+msgstr "Tcheco (qwerty)"
+
+#: ../rules/base.xml.in.h:391
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Tcheco (qwerty, barra invertida extendida)"
+
+#: ../rules/base.xml.in.h:392
+msgid "Czech (UCW layout, accented letters only)"
+msgstr "Tcheco (leiaute UCW, apenas letras acentuadas)"
+
+#: ../rules/base.xml.in.h:393
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Tcheco (Dvorak americano com suporte CZ UCW)"
+
+#. Keyboard indicator for Danish layouts
+#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:76
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:77
+msgid "Danish"
+msgstr "Dinamarquês"
+
+#: ../rules/base.xml.in.h:397
+msgid "Danish (eliminate dead keys)"
+msgstr "Dinamarquês (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:398
+msgid "Danish (Macintosh)"
+msgstr "Dinamarquês (Macintosh)"
+
+#: ../rules/base.xml.in.h:399
+msgid "Danish (Macintosh, eliminate dead keys)"
+msgstr "Dinamarquês (Macintosh, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:400
+msgid "Danish (Dvorak)"
+msgstr "Dinamarquês (Dvorak)"
+
+#. Keyboard indicator for Dutch layouts
+#: ../rules/base.xml.in.h:402 ../rules/base.extras.xml.in.h:79
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:80
+msgid "Dutch"
+msgstr "Holandês"
+
+#: ../rules/base.xml.in.h:404
+msgid "Dutch (Sun dead keys)"
+msgstr "Holandês (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:405
+msgid "Dutch (Macintosh)"
+msgstr "Holandês (Macintosh)"
+
+#: ../rules/base.xml.in.h:406
+msgid "Dutch (standard)"
+msgstr "Holandês (padrão)"
+
+#. Keyboard indicator for Dzongkha layouts
+#: ../rules/base.xml.in.h:408
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:409
+msgid "Dzongkha"
+msgstr "Dzongkha"
+
+#. Keyboard indicator for Estonian layouts
+#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:82
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:83
+msgid "Estonian"
+msgstr "Estônio"
+
+#: ../rules/base.xml.in.h:413
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estoniano (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:414
+msgid "Estonian (Dvorak)"
+msgstr "Estoniano (Dvorak)"
+
+#: ../rules/base.xml.in.h:415
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estoniano (teclado EUA com letras estonianas)"
+
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:16
+msgid "Persian"
+msgstr "Persa"
+
+#: ../rules/base.xml.in.h:417
+msgid "Persian (with Persian Keypad)"
+msgstr "Persa (com teclado númerico persa)"
+
+#. Keyboard indicator for Kurdish layouts
+#: ../rules/base.xml.in.h:419
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:420
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Curdo (Irã, Q latino)"
+
+#: ../rules/base.xml.in.h:421
+msgid "Kurdish (Iran, F)"
+msgstr "Curdo (Irã, F)"
+
+#: ../rules/base.xml.in.h:422
+msgid "Kurdish (Iran, Latin Alt-Q)"
+msgstr "Curdo (Irã, latino Alt-Q)"
+
+#: ../rules/base.xml.in.h:423
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Curdo (Irã, Arábico-Latino)"
+
+#: ../rules/base.xml.in.h:424
+msgid "Iraqi"
+msgstr "Iraqui"
+
+#: ../rules/base.xml.in.h:425
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Curdo (Irã, Q latino)"
+
+#: ../rules/base.xml.in.h:426
+msgid "Kurdish (Iraq, F)"
+msgstr "Curdo (Iraque, F)"
+
+#: ../rules/base.xml.in.h:427
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Curdo (Iraque, alt-Q latino)"
+
+#: ../rules/base.xml.in.h:428
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Curdo (Iraque, Arábico-Latino)"
+
+#. Keyboard indicator for Faroese layouts
+#: ../rules/base.xml.in.h:430
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:431
+msgid "Faroese"
+msgstr "Faroês"
+
+#: ../rules/base.xml.in.h:432
+msgid "Faroese (eliminate dead keys)"
+msgstr "Feroês (sem teclas mortas)"
+
+#. Keyboard indicator for Finnish layouts
+#: ../rules/base.xml.in.h:434 ../rules/base.extras.xml.in.h:85
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:435 ../rules/base.extras.xml.in.h:86
+msgid "Finnish"
+msgstr "Finlandês"
+
+#: ../rules/base.xml.in.h:436
+msgid "Finnish (classic)"
+msgstr "Finlandês (clássico)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finlandês (clássico, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:438
+msgid "Northern Saami (Finland)"
+msgstr "Lapão setentrional (Finlândia)"
+
+#: ../rules/base.xml.in.h:439
+msgid "Finnish (Macintosh)"
+msgstr "Finlandês (Macintosh)"
+
+#: ../rules/base.xml.in.h:440 ../rules/base.extras.xml.in.h:88
+msgid "French"
+msgstr "Francês"
+
+#: ../rules/base.xml.in.h:441
+msgid "French (eliminate dead keys)"
+msgstr "Francês (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:442
+msgid "French (Sun dead keys)"
+msgstr "Francês (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:443
+msgid "French (alternative)"
+msgstr "Francês (alternativo)"
+
+#: ../rules/base.xml.in.h:444
+msgid "French (alternative, latin-9 only)"
+msgstr "Francês (alternativo, apenas latin-9)"
+
+#: ../rules/base.xml.in.h:445
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Francês (alternativo, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:446
+msgid "French (alternative, Sun dead keys)"
+msgstr "Francês (alternativo, com teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:447
+msgid "French (legacy, alternative)"
+msgstr "Francês (legado, alternativo)"
+
+#: ../rules/base.xml.in.h:448
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Francês (legado, alternativo, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:449
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Francês (legado, alternativo, teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:450
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Francês (Bepó, ergonômico, Dvorak)"
+
+#: ../rules/base.xml.in.h:451
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Francês (Bepó, ergonômico, Dvorak, apenas latin-9)"
+
+#: ../rules/base.xml.in.h:452
+msgid "French (Dvorak)"
+msgstr "Francês (Dvorak)"
+
+#: ../rules/base.xml.in.h:453
+msgid "French (Macintosh)"
+msgstr "Francês (Macintosh)"
+
+#: ../rules/base.xml.in.h:454
+msgid "French (Breton)"
+msgstr "Francês (Bretão)"
+
+#: ../rules/base.xml.in.h:455
+msgid "Occitan"
+msgstr "Occitano"
+
+#: ../rules/base.xml.in.h:456
+msgid "Georgian (France, AZERTY Tskapo)"
+msgstr "Georgiano (França, AZERTY Tskapo)"
+
+#: ../rules/base.xml.in.h:457
+msgid "English (Ghana)"
+msgstr "Inglês (Gana)"
+
+#: ../rules/base.xml.in.h:458
+msgid "English (Ghana, multilingual)"
+msgstr "Inglês (Gana, multilíngue)"
+
+#. Keyboard indicator for Akan layouts
+#: ../rules/base.xml.in.h:460
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:461
+msgid "Akan"
+msgstr "Akan"
+
+#. Keyboard indicator for Ewe layouts
+#: ../rules/base.xml.in.h:463
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:464
+msgid "Ewe"
+msgstr "Ewe"
+
+#. Keyboard indicator for Fula layouts
+#: ../rules/base.xml.in.h:466
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:467
+msgid "Fula"
+msgstr "Fula"
+
+#. Keyboard indicator for Ga layouts
+#: ../rules/base.xml.in.h:469
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:470
+msgid "Ga"
+msgstr "Ga"
+
+#. Keyboard indicator for Hausa layouts
+#: ../rules/base.xml.in.h:472
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:473
+msgid "Hausa"
+msgstr "Hausa"
+
+#. Keyboard indicator for Avatime layouts
+#: ../rules/base.xml.in.h:475
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:476
+msgid "Avatime"
+msgstr "Avatime"
+
+#: ../rules/base.xml.in.h:477
+msgid "English (Ghana, GILLBT)"
+msgstr "Inglês (Gana, GILLBT)"
+
+#: ../rules/base.xml.in.h:478
+msgid "French (Guinea)"
+msgstr "Francês (Guiné)"
+
+#. Keyboard indicator for Georgian layouts
+#: ../rules/base.xml.in.h:480
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:481
+msgid "Georgian"
+msgstr "Georgiano"
+
+#: ../rules/base.xml.in.h:482
+msgid "Georgian (ergonomic)"
+msgstr "Georgiano (ergonômico)"
+
+#: ../rules/base.xml.in.h:483
+msgid "Georgian (MESS)"
+msgstr "Georgiano (MESS)"
+
+#: ../rules/base.xml.in.h:484
+msgid "Russian (Georgia)"
+msgstr "Russo (Geórgia)"
+
+#: ../rules/base.xml.in.h:485
+msgid "Ossetian (Georgia)"
+msgstr "Osseto (Geórgia)"
+
+#: ../rules/base.xml.in.h:486 ../rules/base.extras.xml.in.h:11
+msgid "German"
+msgstr "Alemão"
+
+#: ../rules/base.xml.in.h:487
+msgid "German (dead acute)"
+msgstr "Alemão (com acento agudo)"
+
+#: ../rules/base.xml.in.h:488
+msgid "German (dead grave acute)"
+msgstr "Alemão (com acentos grave e agudo)"
+
+#: ../rules/base.xml.in.h:489
+msgid "German (eliminate dead keys)"
+msgstr "Alemão (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Alemão (T3)"
+
+#: ../rules/base.xml.in.h:491
+msgid "Romanian (Germany)"
+msgstr "Romeno (Alemanha)"
+
+#: ../rules/base.xml.in.h:492
+msgid "Romanian (Germany, eliminate dead keys)"
+msgstr "Romeno (Alemanha, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:493
+msgid "German (Dvorak)"
+msgstr "Alemão (Dvorak)"
+
+#: ../rules/base.xml.in.h:494
+msgid "German (Sun dead keys)"
+msgstr "Alemão (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:495
+msgid "German (Neo 2)"
+msgstr "Alemão (Neo 2)"
+
+#: ../rules/base.xml.in.h:496
+msgid "German (Macintosh)"
+msgstr "Alemão (Macintosh)"
+
+#: ../rules/base.xml.in.h:497
+msgid "German (Macintosh, eliminate dead keys)"
+msgstr "Alemão (Macintosh, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:498
+msgid "Lower Sorbian"
+msgstr "Baixo Sorábio"
+
+#: ../rules/base.xml.in.h:499
+msgid "Lower Sorbian (qwertz)"
+msgstr "Baixo Sorábio (qwertz)"
+
+#: ../rules/base.xml.in.h:500
+msgid "German (qwerty)"
+msgstr "Alemão (qwerty)"
+
+#: ../rules/base.xml.in.h:501
+msgid "Russian (Germany, phonetic)"
+msgstr "Russo (Alemanha, fonético)"
+
+#. Keyboard indicator for Greek layouts
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
+msgid "Greek"
+msgstr "Grego"
+
+#: ../rules/base.xml.in.h:505
+msgid "Greek (simple)"
+msgstr "Grego (simplificado)"
+
+#: ../rules/base.xml.in.h:506
+msgid "Greek (extended)"
+msgstr "Grego (estendido)"
+
+#: ../rules/base.xml.in.h:507
+msgid "Greek (eliminate dead keys)"
+msgstr "Grego (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:508
+msgid "Greek (polytonic)"
+msgstr "Grego (politônico)"
+
+#. Keyboard indicator for Hungarian layouts
+#: ../rules/base.xml.in.h:510
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:511
+msgid "Hungarian"
+msgstr "Húngaro"
+
+#: ../rules/base.xml.in.h:512
+msgid "Hungarian (standard)"
+msgstr "Húngaro (padrão)"
+
+#: ../rules/base.xml.in.h:513
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Húngaro (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:514
+msgid "Hungarian (qwerty)"
+msgstr "Húngaro (qwerty)"
+
+#: ../rules/base.xml.in.h:515
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Húngaro (101 teclas, qwertz, com vírgula e teclas mortas)"
+
+#: ../rules/base.xml.in.h:516
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Húngaro (101 teclas, qwertz, com vírgula e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:517
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Húngaro (101 teclas, qwertz, com ponto e teclas mortas)"
+
+#: ../rules/base.xml.in.h:518
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Húngaro (101 teclas, qwertz, com ponto e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:519
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Húngaro (101 teclas, qwerty, com vírgula e teclas mortas)"
+
+#: ../rules/base.xml.in.h:520
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Húngaro (101 teclas, qwerty, com vírgula e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:521
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Húngaro (101 teclas, qwerty, com ponto e teclas mortas)"
+
+#: ../rules/base.xml.in.h:522
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Húngaro (101 teclas, qwerty, com ponto e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:523
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Húngaro (102 teclas, qwertz, com vírgula e teclas mortas)"
+
+#: ../rules/base.xml.in.h:524
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Húngaro (102 teclas, qwertz, com vírgula e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:525
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Húngaro (102 teclas, qwertz, com ponto e teclas mortas)"
+
+#: ../rules/base.xml.in.h:526
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Húngaro (102 teclas, qwertz, com ponto e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:527
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Húngaro (102 teclas, qwerty, com vírgula e teclas mortas)"
+
+#: ../rules/base.xml.in.h:528
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Húngaro (102 teclas, qwerty, com vírgula e sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:529
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Húngaro (102 teclas, qwerty, com ponto e teclas mortas)"
+
+#: ../rules/base.xml.in.h:530
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Húngaro (102 teclas, qwerty, com ponto e sem teclas mortas)"
+
+#. Keyboard indicator for Icelandic layouts
+#: ../rules/base.xml.in.h:532
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:533
+msgid "Icelandic"
+msgstr "Islandês"
+
+#: ../rules/base.xml.in.h:534
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandês (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:535
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandês (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:536
+msgid "Icelandic (Macintosh)"
+msgstr "Islandês (Macintosh)"
+
+#: ../rules/base.xml.in.h:537
+msgid "Icelandic (Dvorak)"
+msgstr "Islandês (Dvorak)"
+
+#. Keyboard indicator for Hebrew layouts
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
+msgid "Hebrew"
+msgstr "Hebraico"
+
+#: ../rules/base.xml.in.h:541
+msgid "Hebrew (lyx)"
+msgstr "Hebraico (lyx)"
+
+#: ../rules/base.xml.in.h:542
+msgid "Hebrew (phonetic)"
+msgstr "Hebraico (fonético)"
+
+#: ../rules/base.xml.in.h:543
+msgid "Hebrew (Biblical, Tiro)"
+msgstr "Hebraico (Bíblico, Tiro)"
+
+#. Keyboard indicator for Italian layouts
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
+msgid "Italian"
+msgstr "Italiano"
+
+#: ../rules/base.xml.in.h:547
+msgid "Italian (eliminate dead keys)"
+msgstr "Italiano (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:548
+msgid "Italian (Macintosh)"
+msgstr "Italiano (Macintosh)"
+
+#: ../rules/base.xml.in.h:549
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italiano (Teclado EUA com letras italianas)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Georgian (Italy)"
+msgstr "Georgiano (Itália)"
+
+#: ../rules/base.xml.in.h:551
+msgid "Italian (IBM 142)"
+msgstr "Italiano (IBM 142)"
+
+#. Keyboard indicator for Japanese layouts
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
+msgid "Japanese"
+msgstr "Japonês"
+
+#: ../rules/base.xml.in.h:555
+msgid "Japanese (Kana)"
+msgstr "Japonês (Kana)"
+
+#: ../rules/base.xml.in.h:556
+msgid "Japanese (Kana 86)"
+msgstr "Japonês (Kana 86)"
+
+#: ../rules/base.xml.in.h:557
+msgid "Japanese (OADG 109A)"
+msgstr "Japonês (OADG 109A)"
+
+#: ../rules/base.xml.in.h:558
+msgid "Japanese (Macintosh)"
+msgstr "Japonês (Macintosh)"
+
+#: ../rules/base.xml.in.h:559
+msgid "Japanese (Dvorak)"
+msgstr "Japonês (Dvorak)"
+
+#. Keyboard indicator for Kikuyu layouts
+#: ../rules/base.xml.in.h:561
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:562
+msgid "Kyrgyz"
+msgstr "Quirguistão"
+
+#: ../rules/base.xml.in.h:563
+msgid "Kyrgyz (phonetic)"
+msgstr "Quirguiz (fonético)"
+
+#. Keyboard indicator for Khmer layouts
+#: ../rules/base.xml.in.h:565
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:566
+msgid "Khmer (Cambodia)"
+msgstr "Cambojano (Camboja)"
+
+#. Keyboard indicator for Kazakh layouts
+#: ../rules/base.xml.in.h:568
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:569
+msgid "Kazakh"
+msgstr "Cazaque"
+
+#: ../rules/base.xml.in.h:570
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Russo (Cazaquistão, com cazaque)"
+
+#: ../rules/base.xml.in.h:571
+msgid "Kazakh (with Russian)"
+msgstr "Cazaque (com Russo)"
+
+#. Keyboard indicator for Lao layouts
+#: ../rules/base.xml.in.h:573
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:574
+msgid "Lao"
+msgstr "Laociano"
+
+#: ../rules/base.xml.in.h:575
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Laociano (padrão de teclado proposto pela STEA)"
+
+#. Keyboard indicator for Spanish layouts
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:578
+msgid "Spanish (Latin American)"
+msgstr "Espanhol (América Latina)"
+
+#: ../rules/base.xml.in.h:579
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Espanhol (América Latina, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:580
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Espanhol (América Latina, com tecla til)"
+
+#: ../rules/base.xml.in.h:581
+msgid "Spanish (Latin American, Sun dead keys)"
+msgstr "Espanhol (América Latina, teclas mortas da Sun)"
+
+#. Keyboard indicator for Lithuanian layouts
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
+msgid "Lithuanian"
+msgstr "Lituânio"
+
+#: ../rules/base.xml.in.h:585
+msgid "Lithuanian (standard)"
+msgstr "Lituano (padrão)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Lituano (Teclado EUA com letras lituanas)"
+
+#: ../rules/base.xml.in.h:587
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Lituano (IBM LST 1205-92)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Lithuanian (LEKP)"
+msgstr "Lituano (LEKP)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Lithuanian (LEKPa)"
+msgstr "Lituano (LEKPa)"
+
+#. Keyboard indicator for Latvian layouts
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
+msgid "Latvian"
+msgstr "Letão"
+
+#: ../rules/base.xml.in.h:593
+msgid "Latvian (apostrophe variant)"
+msgstr "Letão (variação com apóstrofes)"
+
+#: ../rules/base.xml.in.h:594
+msgid "Latvian (tilde variant)"
+msgstr "Letão (variante com til)"
+
+#: ../rules/base.xml.in.h:595
+msgid "Latvian (F variant)"
+msgstr "Letão (F variante)"
+
+#: ../rules/base.xml.in.h:596
+msgid "Latvian (modern)"
+msgstr "Letão (moderno)"
+
+#: ../rules/base.xml.in.h:597
+msgid "Latvian (ergonomic, ŪGJRMV)"
+msgstr "Letão (ergonômico, ŪGJRMV)"
+
+#: ../rules/base.xml.in.h:598
+msgid "Latvian (adapted)"
+msgstr "Letão (adaptado)"
+
+#. Keyboard indicator for Maori layouts
+#: ../rules/base.xml.in.h:600
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:601
+msgid "Maori"
+msgstr "Maori"
+
+#. Keyboard indicator for Serbian layouts
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:604
+msgid "Montenegrin"
+msgstr "Montenegrino"
+
+#: ../rules/base.xml.in.h:605
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrino (Cirílico)"
+
+#: ../rules/base.xml.in.h:606
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrino (Cirílico, Z and ZHE invertidos)"
+
+#: ../rules/base.xml.in.h:607
+msgid "Montenegrin (Latin Unicode)"
+msgstr "Montenegrino (Unicode latino)"
+
+#: ../rules/base.xml.in.h:608
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrino (qwerty latino)"
+
+#: ../rules/base.xml.in.h:609
+msgid "Montenegrin (Latin Unicode qwerty)"
+msgstr "Montenegrino (Qwerty Unicode latino)"
+
+#: ../rules/base.xml.in.h:610
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrino (Cirílico com aspas angulares)"
+
+#: ../rules/base.xml.in.h:611
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrino (Latino com aspas angulares)"
+
+#. Keyboard indicator for Macedonian layouts
+#: ../rules/base.xml.in.h:613
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:614
+msgid "Macedonian"
+msgstr "Macedônio"
+
+#: ../rules/base.xml.in.h:615
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macedoniano (sem teclas mortas)"
+
+#. Keyboard indicator for Maltese layouts
+#: ../rules/base.xml.in.h:617
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:618
+msgid "Maltese"
+msgstr "Maltês"
+
+#: ../rules/base.xml.in.h:619
+msgid "Maltese (with US layout)"
+msgstr "Maltês (Teclado EUA)"
+
+#. Keyboard indicator for Mongolian layouts
+#: ../rules/base.xml.in.h:621
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:622
+msgid "Mongolian"
+msgstr "Mongol"
+
+#. Keyboard indicator for Norwegian layouts
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
+msgid "Norwegian"
+msgstr "Norueguês"
+
+#: ../rules/base.xml.in.h:626
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norueguês (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:627
+msgid "Norwegian (Dvorak)"
+msgstr "Norueguês (Dvorak)"
+
+#: ../rules/base.xml.in.h:628
+msgid "Northern Saami (Norway)"
+msgstr "Lapão setentrional (Noruega)"
+
+#: ../rules/base.xml.in.h:629
+msgid "Northern Saami (Norway, eliminate dead keys)"
+msgstr "Lapão setentrional (Noruega, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:630
+msgid "Norwegian (Macintosh)"
+msgstr "Norueguês (Macintosh)"
+
+#: ../rules/base.xml.in.h:631
+msgid "Norwegian (Macintosh, eliminate dead keys)"
+msgstr "Norueguês (Macintosh, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:632
+msgid "Norwegian (Colemak)"
+msgstr "Norueguês (Colemak)"
+
+#. Keyboard indicator for Polish layouts
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
+msgid "Polish"
+msgstr "Polonês"
+
+#: ../rules/base.xml.in.h:636
+msgid "Polish (legacy)"
+msgstr "Polonês (legado)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Polish (qwertz)"
+msgstr "Polonês (qwertz)"
+
+#: ../rules/base.xml.in.h:638
+msgid "Polish (Dvorak)"
+msgstr "Polonês (Dvorak)"
+
+#: ../rules/base.xml.in.h:639
+msgid "Polish (Dvorak, Polish quotes on quotemark key)"
+msgstr "Polonês (Dvorak, aspas polonesas na tecla de aspas)"
+
+#: ../rules/base.xml.in.h:640
+msgid "Polish (Dvorak, Polish quotes on key 1)"
+msgstr "Polonês (Dvorak, aspas polonesas na tecla 1)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Kashubian"
+msgstr "Kashubian"
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Russo (Polônia, Dvorak fonético)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Polish (programmer Dvorak)"
+msgstr "Polonês (Dvorak para programador)"
+
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
+msgid "Portuguese"
+msgstr "Português"
+
+#: ../rules/base.xml.in.h:645
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Português (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:646
+msgid "Portuguese (Sun dead keys)"
+msgstr "Português (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:647
+msgid "Portuguese (Macintosh)"
+msgstr "Português (Macintosh)"
+
+#: ../rules/base.xml.in.h:648
+msgid "Portuguese (Macintosh, eliminate dead keys)"
+msgstr "Português (Macintosh, eliminar teclas mortas)"
+
+#: ../rules/base.xml.in.h:649
+msgid "Portuguese (Macintosh, Sun dead keys)"
+msgstr "Português (Macintosh, teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:650
+msgid "Portuguese (Nativo)"
+msgstr "Português (Nativo)"
+
+#: ../rules/base.xml.in.h:651
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Português (Nativo para teclados americanos)"
+
+#: ../rules/base.xml.in.h:652
+msgid "Esperanto (Portugal, Nativo)"
+msgstr "Esperanto (Portugal, Nativo)"
+
+#. Keyboard indicator for Romanian layouts
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
+msgid "Romanian"
+msgstr "Romênio"
+
+#: ../rules/base.xml.in.h:656
+msgid "Romanian (cedilla)"
+msgstr "Romeno (com cedilha)"
+
+#: ../rules/base.xml.in.h:657
+msgid "Romanian (standard)"
+msgstr "Romeno (padrão)"
+
+#: ../rules/base.xml.in.h:658
+msgid "Romanian (standard cedilla)"
+msgstr "Romeno (padrão, com cedilha)"
+
+#: ../rules/base.xml.in.h:659
+msgid "Romanian (WinKeys)"
+msgstr "Romeno (teclas Windows)"
+
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
+msgid "Russian"
+msgstr "Russo"
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr "Russo (fonético)"
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (phonetic WinKeys)"
+msgstr "Russo (fonético com teclas Windows)"
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter)"
+msgstr "Russo (máquina de escrever)"
+
+#: ../rules/base.xml.in.h:664
+msgid "Russian (legacy)"
+msgstr "Russo (legado)"
+
+#: ../rules/base.xml.in.h:665
+msgid "Russian (typewriter, legacy)"
+msgstr "Russo (máquina de escrever, legado)"
+
+#: ../rules/base.xml.in.h:666
+msgid "Tatar"
+msgstr "Tátar"
+
+#: ../rules/base.xml.in.h:667
+msgid "Ossetian (legacy)"
+msgstr "Osseto (legado)"
+
+#: ../rules/base.xml.in.h:668
+msgid "Ossetian (WinKeys)"
+msgstr "Osseto (WinKeys)"
+
+#: ../rules/base.xml.in.h:669
+msgid "Chuvash"
+msgstr "Tchuvache"
+
+#: ../rules/base.xml.in.h:670
+msgid "Chuvash (Latin)"
+msgstr "Tchuvache (Latino)"
+
+#: ../rules/base.xml.in.h:671
+msgid "Udmurt"
+msgstr "Udmurt"
+
+#: ../rules/base.xml.in.h:672
+msgid "Komi"
+msgstr "Komi"
+
+#: ../rules/base.xml.in.h:673
+msgid "Yakut"
+msgstr "Yakut"
+
+#: ../rules/base.xml.in.h:674
+msgid "Kalmyk"
+msgstr "Kalmyk"
+
+#: ../rules/base.xml.in.h:675
+msgid "Russian (DOS)"
+msgstr "Russo (DOS)"
+
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Russo (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
+msgid "Serbian (Russia)"
+msgstr "Sérvio (Rússia)"
+
+#: ../rules/base.xml.in.h:678
+msgid "Bashkirian"
+msgstr "Bashkirian"
+
+#: ../rules/base.xml.in.h:679
+msgid "Mari"
+msgstr "Mari"
+
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
+msgid "Serbian"
+msgstr "Sérvio"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Cyrillic, Z and ZHE swapped)"
+msgstr "Sérvio (Cirílico, Z e ZHE trocados)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin)"
+msgstr "Sérvio (Latino)"
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin Unicode)"
+msgstr "Sérvio (Latino Unicode)"
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Latin qwerty)"
+msgstr "Sérvio (qwerty, Latino)"
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Sérvio (qwerty, Latino Unicode)"
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (Cyrillic with guillemets)"
+msgstr "Sérvio (Cirílico com guillemets)"
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbian (Latin with guillemets)"
+msgstr "Sérvio (Latin com aspas angulares)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Pannonian Rusyn (homophonic)"
+msgstr "Ruteno (homofônico)"
+
+#. Keyboard indicator for Slovenian layouts
+#: ../rules/base.xml.in.h:690
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:691
+msgid "Slovenian"
+msgstr "Esloveno"
+
+#: ../rules/base.xml.in.h:692
+msgid "Slovenian (use guillemets for quotes)"
+msgstr "Esloveno (utilizar aspas para citações)"
+
+#: ../rules/base.xml.in.h:693
+msgid "Slovenian (US keyboard with Slovenian letters)"
+msgstr "Esloveno (teclado US com letras eslovenas)"
+
+#. Keyboard indicator for Slovak layouts
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
+msgid "Slovak"
+msgstr "Eslovaco"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (extended Backslash)"
+msgstr "Eslovaco (barra invertida extendida)"
+
+#: ../rules/base.xml.in.h:698
+msgid "Slovak (qwerty)"
+msgstr "Eslováquio (qwerty)"
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Eslovaco (qwerty, barra invertida extendida)"
+
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
+msgid "Spanish"
+msgstr "Espanhol"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish (eliminate dead keys)"
+msgstr "Espanhol (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (include dead tilde)"
+msgstr "Espanhol (com tecla til)"
+
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Sun dead keys)"
+msgstr "Espanhol (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "Espanhol (Dvorak)"
+
+#: ../rules/base.xml.in.h:705
+msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
+msgstr "Asturiano (Espanha, com ponto inferior no H e ponto inferior no L)"
+
+#: ../rules/base.xml.in.h:706
+msgid "Catalan (Spain, with middle-dot L)"
+msgstr "Catalão (Espanha, com ponto mediano entre o L)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Macintosh)"
+msgstr "Espanhol (Macintosh)"
+
+#. Keyboard indicator for Swedish layouts
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
+msgid "Swedish"
+msgstr "Suéco"
+
+#: ../rules/base.xml.in.h:711
+msgid "Swedish (eliminate dead keys)"
+msgstr "Sueco (sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:712
+msgid "Swedish (Dvorak)"
+msgstr "Sueco (Dvorak)"
+
+#: ../rules/base.xml.in.h:713
+msgid "Russian (Sweden, phonetic)"
+msgstr "Russo (Suécia, fonético)"
+
+#: ../rules/base.xml.in.h:714
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Russo (Suécia, fonético, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:715
+msgid "Northern Saami (Sweden)"
+msgstr "Lapão setentrional (Suécia)"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swedish (Macintosh)"
+msgstr "Sueco (Macintosh)"
+
+#: ../rules/base.xml.in.h:717
+msgid "Swedish (Svdvorak)"
+msgstr "Sueco (Svdvorak)"
+
+#: ../rules/base.xml.in.h:718
+msgid "Swedish Sign Language"
+msgstr "Língua de sinais sueca"
+
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
+msgid "German (Switzerland)"
+msgstr "Alemão (Suíça)"
+
+#: ../rules/base.xml.in.h:720
+msgid "German (Switzerland, legacy)"
+msgstr "Alemão (Suíça, legado)"
+
+#: ../rules/base.xml.in.h:721
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Alemão (Suiça, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:722
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Alemão (Suiça, com teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:723
+msgid "French (Switzerland)"
+msgstr "Francês (Suíça)"
+
+#: ../rules/base.xml.in.h:724
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Francês (Suíça, sem teclas mortas)"
+
+#: ../rules/base.xml.in.h:725
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Francês (Suíça, com teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:726
+msgid "French (Switzerland, Macintosh)"
+msgstr "Francês (Suíça, Macintosh)"
+
+#: ../rules/base.xml.in.h:727
+msgid "German (Switzerland, Macintosh)"
+msgstr "Alemão (Suíça, Macintosh)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Arabic (Syria)"
+msgstr "Árabe (Síria)"
+
+#. Keyboard indicator for Syriac layouts
+#: ../rules/base.xml.in.h:730
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:731
+msgid "Syriac"
+msgstr "Sírio"
+
+#: ../rules/base.xml.in.h:732
+msgid "Syriac (phonetic)"
+msgstr "Sírio (fonético)"
+
+#: ../rules/base.xml.in.h:733
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Curdo (Síria, Q latino)"
+
+#: ../rules/base.xml.in.h:734
+msgid "Kurdish (Syria, F)"
+msgstr "Curdo (Síria, F)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Curdo (Síria, alt-Q latino)"
+
+#. Keyboard indicator for Tajik layouts
+#: ../rules/base.xml.in.h:737
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:738
+msgid "Tajik"
+msgstr "Tadjique"
+
+#: ../rules/base.xml.in.h:739
+msgid "Tajik (legacy)"
+msgstr "Tadjique (legado)"
+
+#. Keyboard indicator for Sinhala layouts
+#: ../rules/base.xml.in.h:741
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:742
+msgid "Sinhala (phonetic)"
+msgstr "Sinhala (fonética)"
+
+#: ../rules/base.xml.in.h:743
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tâmil (Sri Lanka, Unicode)"
+
+#: ../rules/base.xml.in.h:744
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tâmil (Sri Lanka, máquina de escrever TAB)"
+
+#. Keyboard indicator for Thai layouts
+#: ../rules/base.xml.in.h:746
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:747
+msgid "Thai"
+msgstr "Tailandês"
+
+#: ../rules/base.xml.in.h:748
+msgid "Thai (TIS-820.2538)"
+msgstr "Tailandês (TIS-820.2538)"
+
+#: ../rules/base.xml.in.h:749
+msgid "Thai (Pattachote)"
+msgstr "Tailandês (Pattachote)"
+
+#. Keyboard indicator for Turkish layouts
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../rules/base.xml.in.h:753
+msgid "Turkish (F)"
+msgstr "Turco (F)"
+
+#: ../rules/base.xml.in.h:754
+msgid "Turkish (Alt-Q)"
+msgstr "Turco (Alt-Q)"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish (Sun dead keys)"
+msgstr "Turco (Teclas mortas da Sun)"
+
+#: ../rules/base.xml.in.h:756
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Curdo (Turquia, Q latino)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Kurdish (Turkey, F)"
+msgstr "Curdo (Turquia, F)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Curdo (Turquia, alt-Q latino)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (international with dead keys)"
+msgstr "Turco (internacional com teclas mortas)"
+
+#. Keyboard indicator for Crimean Tatar layouts
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
+msgid "crh"
+msgstr "crh"
+
+#: ../rules/base.xml.in.h:762
+msgid "Crimean Tatar (Turkish Q)"
+msgstr "Crimean Tatar (Turkish Q)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Crimean Tatar (Turkish F)"
+msgstr "Crimean Tatar (Turkish F)"
+
+#: ../rules/base.xml.in.h:764
+msgid "Crimean Tatar (Turkish Alt-Q)"
+msgstr "Crimean Tatar (Turkish Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "Taiwanese"
+msgstr "Taiwanês"
+
+#: ../rules/base.xml.in.h:766
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanês (indígena)"
+
+#. Keyboard indicator for Saisiyat layouts
+#: ../rules/base.xml.in.h:768
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:769
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiat (Taiwan)"
+
+#. Keyboard indicator for Ukranian layouts
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (phonetic)"
+msgstr "Ucraniano (fonético)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (typewriter)"
+msgstr "Ucraniano (Máquina de escrever)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (WinKeys)"
+msgstr "Ucraniano (teclas Windows)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ucraniano (legado)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ucraniano (padrão RSTU)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Russian (Ukraine, standard RSTU)"
+msgstr "Russo (Ucrânia, RSTU padrão)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (homophonic)"
+msgstr "Ucraniano (homofônico)"
+
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
+msgid "English (UK)"
+msgstr "Inglês (Reino Unido)"
+
+#: ../rules/base.xml.in.h:781
+msgid "English (UK, extended WinKeys)"
+msgstr "Inglês (Reino Unido, WinKeys estendidas)"
+
+#: ../rules/base.xml.in.h:782
+msgid "English (UK, international with dead keys)"
+msgstr "Inglês (Reino Unido, internacional com teclas mortas)"
+
+#: ../rules/base.xml.in.h:783
+msgid "English (UK, Dvorak)"
+msgstr "Inglês (Reino Unido, Dvorak)"
+
+#: ../rules/base.xml.in.h:784
+msgid "English (UK, Dvorak with UK punctuation)"
+msgstr "Inglês (Reino Unido, Dvorak com pontuação do Reino Unido)"
+
+#: ../rules/base.xml.in.h:785
+msgid "English (UK, Macintosh)"
+msgstr "Inglês (Reino Unido, Macintosh)"
+
+#: ../rules/base.xml.in.h:786
+msgid "English (UK, Macintosh international)"
+msgstr "Inglês (Reino Unido, Macintosh internacional)"
+
+#: ../rules/base.xml.in.h:787
+msgid "English (UK, Colemak)"
+msgstr "Inglês (Reino Unido, Colemak)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Uzbek"
+msgstr "Uzbeque"
+
+#: ../rules/base.xml.in.h:789
+msgid "Uzbek (Latin)"
+msgstr "Uzbeque (Latino)"
+
+#. Keyboard indicator for Vietnamese layouts
+#: ../rules/base.xml.in.h:791
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:792
+msgid "Vietnamese"
+msgstr "Vietnamês"
+
+#. Keyboard indicator for Korean layouts
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
+msgid "Korean"
+msgstr "Coreano"
+
+#: ../rules/base.xml.in.h:796
+msgid "Korean (101/104 key compatible)"
+msgstr "Coreano (compatível com 101/104 teclas)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japonês (PC-98xx Series)"
+
+#. Keyboard indicator for Irish layouts
+#: ../rules/base.xml.in.h:799
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:800
+msgid "Irish"
+msgstr "Irlandês"
+
+#: ../rules/base.xml.in.h:801
+msgid "CloGaelach"
+msgstr "CloGaelach"
+
+#: ../rules/base.xml.in.h:802
+msgid "Irish (UnicodeExpert)"
+msgstr "Irlandês (UnicodeExpert)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Ogham"
+msgstr "Ogam"
+
+#: ../rules/base.xml.in.h:804
+msgid "Ogham (IS434)"
+msgstr "Ogham (IS434)"
+
+#: ../rules/base.xml.in.h:805
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Paquistão)"
+
+#: ../rules/base.xml.in.h:806
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Paquistão, CRULP)"
+
+#: ../rules/base.xml.in.h:807
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Paquistão, NLA)"
+
+#: ../rules/base.xml.in.h:808
+msgid "Arabic (Pakistan)"
+msgstr "Árabe (Paquistão)"
+
+#. Keyboard indicator for Sindhi layouts
+#: ../rules/base.xml.in.h:810
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:811
+msgid "Sindhi"
+msgstr "Síndi"
+
+#. Keyboard indicator for Dhivehi layouts
+#: ../rules/base.xml.in.h:813
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:814
+msgid "Dhivehi"
+msgstr "Dhivehi"
+
+#: ../rules/base.xml.in.h:815
+msgid "English (South Africa)"
+msgstr "Inglês (África do Sul)"
+
+#. Keyboard indicator for Esperanto layouts
+#: ../rules/base.xml.in.h:817
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:818
+msgid "Esperanto"
+msgstr "Esperanto"
+
+#: ../rules/base.xml.in.h:819
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (ponto-e-vírgula e aspas deslocadas, obsoleto)"
+
+#. Keyboard indicator for Nepali layouts
+#: ../rules/base.xml.in.h:821
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:822
+msgid "Nepali"
+msgstr "Nepalês"
+
+#: ../rules/base.xml.in.h:823
+msgid "English (Nigeria)"
+msgstr "Inglês (Nigéria)"
+
+#. Keyboard indicator for Igbo layouts
+#: ../rules/base.xml.in.h:825
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:826
+msgid "Igbo"
+msgstr "igbo"
+
+#. Keyboard indicator for Yoruba layouts
+#: ../rules/base.xml.in.h:828
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:829
+msgid "Yoruba"
+msgstr "Iorubá"
+
+#. Keyboard indicator for Amharic layouts
+#: ../rules/base.xml.in.h:831
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:832
+msgid "Amharic"
+msgstr "Amárico"
+
+#. Keyboard indicator for Wolof layouts
+#: ../rules/base.xml.in.h:834
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:835
+msgid "Wolof"
+msgstr "Wolof"
+
+#. Keyboard indicator for Braille layouts
+#: ../rules/base.xml.in.h:837
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:838
+msgid "Braille"
+msgstr "Braile"
+
+#: ../rules/base.xml.in.h:839
+msgid "Braille (left hand)"
+msgstr "Braille (canhoto)"
+
+#: ../rules/base.xml.in.h:840
+msgid "Braille (right hand)"
+msgstr "Braille (destro)"
+
+#. Keyboard indicator for Turkmen layouts
+#: ../rules/base.xml.in.h:842
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:843
+msgid "Turkmen"
+msgstr "Turcomano"
+
+#: ../rules/base.xml.in.h:844
+msgid "Turkmen (Alt-Q)"
+msgstr "Turcomano (Alt-Q)"
+
+#. Keyboard indicator for Bambara layouts
+#: ../rules/base.xml.in.h:846
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:847
+msgid "Bambara"
+msgstr "Bambara"
+
+#: ../rules/base.xml.in.h:848
+msgid "French (Mali, alternative)"
+msgstr "Francês (Mali, alternativo)"
+
+#: ../rules/base.xml.in.h:849
+msgid "English (Mali, US Macintosh)"
+msgstr "Inglês (Mali, US Macintosh)"
+
+#: ../rules/base.xml.in.h:850
+msgid "English (Mali, US international)"
+msgstr "Inglês (Mali, US internacional)"
+
+#. Keyboard indicator for Swahili layouts
+#: ../rules/base.xml.in.h:852
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:853
+msgid "Swahili (Tanzania)"
+msgstr "Suaíli (Tanzânia)"
+
+#: ../rules/base.xml.in.h:854
+msgid "Swahili (Kenya)"
+msgstr "Suaíli (Quênia)"
+
+#: ../rules/base.xml.in.h:855
+msgid "Kikuyu"
+msgstr "Kikuyu"
+
+#. Keyboard indicator for Tswana layouts
+#: ../rules/base.xml.in.h:857
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:858
+msgid "Tswana"
+msgstr "Tswana"
+
+#. Keyboard indicator for Filipino layouts
+#: ../rules/base.xml.in.h:860
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:861
+msgid "Filipino"
+msgstr "Filipino"
+
+#: ../rules/base.xml.in.h:862
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filipino (QWERTY baybayin)"
+
+#: ../rules/base.xml.in.h:863
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filipino (Capewell-Dvorak latino)"
+
+#: ../rules/base.xml.in.h:864
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filipino (Capewell-Dvorak Baybayin)"
+
+#: ../rules/base.xml.in.h:865
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filipino (Capewell-QWERF 2006 latino)"
+
+#: ../rules/base.xml.in.h:866
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filipino (Capewell-QWERF 2006 baybayin)"
+
+#: ../rules/base.xml.in.h:867
+msgid "Filipino (Colemak Latin)"
+msgstr "Filipino (Colemak latino)"
+
+#: ../rules/base.xml.in.h:868
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filipino (Colemak baybayin)"
+
+#: ../rules/base.xml.in.h:869
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filipino (Dvorak latino)"
+
+#: ../rules/base.xml.in.h:870
+msgid "Filipino (Dvorak Baybayin)"
+msgstr "Filipino (Dvorak Baybayin)"
+
+#: ../rules/base.xml.in.h:871
+msgid "md"
+msgstr "md"
+
+#: ../rules/base.xml.in.h:872
+msgid "Moldavian"
+msgstr "Moldávio"
+
+#: ../rules/base.xml.in.h:873
+msgid "gag"
+msgstr "gag"
+
+#: ../rules/base.xml.in.h:874
+msgid "Moldavian (Gagauz)"
+msgstr "Moldávio (Gagauz)"
+
+#: ../rules/base.xml.in.h:875
+msgid "Key(s) to change layout"
+msgstr "Tecla(s) para mudar layout"
+
+#: ../rules/base.xml.in.h:876
+msgid "Right Alt (while pressed)"
+msgstr "Alt Direito (quando pressionado)"
+
+#: ../rules/base.xml.in.h:877
+msgid "Left Alt (while pressed)"
+msgstr "Alt Esquerdo (quando pressionado)"
+
+#: ../rules/base.xml.in.h:878
+msgid "Left Win (while pressed)"
+msgstr "Win Esquerdo (quando pressionado)"
+
+#: ../rules/base.xml.in.h:879
+msgid "Right Win (while pressed)"
+msgstr "Win Direito (quando pressionado)"
+
+#: ../rules/base.xml.in.h:880
+msgid "Any Win key (while pressed)"
+msgstr "Qualquer tecla Windows (quando pressionada)"
+
+#: ../rules/base.xml.in.h:881
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (quando pressionada), Alt+Caps Lock faz a ação capslock original"
+
+#: ../rules/base.xml.in.h:882
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl Direito (quando pressionado)"
+
+#: ../rules/base.xml.in.h:883
+msgid "Right Alt"
+msgstr "Alt direito"
+
+#: ../rules/base.xml.in.h:884
+msgid "Left Alt"
+msgstr "Alt Esquerdo"
+
+#: ../rules/base.xml.in.h:885
+msgid "Caps Lock"
+msgstr "Caps Lock"
+
+#: ../rules/base.xml.in.h:886
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+#: ../rules/base.xml.in.h:887
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (para a primeira disposição), Shift+Caps Lock (para a última disposição)"
+
+#: ../rules/base.xml.in.h:888
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Win Esquerdo (para primeiro leiaute), Win Direito/Menu (para último leiaute)"
+
+#: ../rules/base.xml.in.h:889
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ctrl Esquerdo (para primeiro leiaute), Ctrl Direito (para último leiaute)"
+
+#: ../rules/base.xml.in.h:890
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
+
+#: ../rules/base.xml.in.h:891
+msgid "Both Shift keys together"
+msgstr "Ambas teclas Shift juntas"
+
+#: ../rules/base.xml.in.h:892
+msgid "Both Alt keys together"
+msgstr "Ambas teclas Alt juntas"
+
+#: ../rules/base.xml.in.h:893
+msgid "Both Ctrl keys together"
+msgstr "Ambas teclas Ctrl juntas"
+
+#: ../rules/base.xml.in.h:894
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+#: ../rules/base.xml.in.h:895
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl Esquerdo+Shift Esquerdo"
+
+#: ../rules/base.xml.in.h:896
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl da Direita+Shift da Direita"
+
+#: ../rules/base.xml.in.h:897
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+#: ../rules/base.xml.in.h:898
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+#: ../rules/base.xml.in.h:899
+msgid "Left Alt+Left Shift"
+msgstr "Alt da esquerda + Shift da esquerda"
+
+#: ../rules/base.xml.in.h:900
+msgid "Alt+Space"
+msgstr "Alt+Espaço"
+
+#: ../rules/base.xml.in.h:901
+msgid "Menu"
+msgstr "Menu"
+
+#: ../rules/base.xml.in.h:902
+msgid "Left Win"
+msgstr "Win Esquerdo"
+
+#: ../rules/base.xml.in.h:903
+msgid "Right Win"
+msgstr "Win Direito"
+
+#: ../rules/base.xml.in.h:904
+msgid "Left Shift"
+msgstr "Shift Esquerdo"
+
+#: ../rules/base.xml.in.h:905
+msgid "Right Shift"
+msgstr "Shift direito"
+
+#: ../rules/base.xml.in.h:906
+msgid "Left Ctrl"
+msgstr "Ctrl Esquerdo"
+
+#: ../rules/base.xml.in.h:907
+msgid "Right Ctrl"
+msgstr "Ctrl Direito"
+
+#: ../rules/base.xml.in.h:908
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#: ../rules/base.xml.in.h:909
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "CtrlEsquerdo+WinEsquerdo (para primeira disposição), CrtlDireito+Menu (para segunda disposição)"
+
+#: ../rules/base.xml.in.h:910
+msgid "Key to choose 3rd level"
+msgstr "Tecla para escolher terceiro nível"
+
+#: ../rules/base.xml.in.h:911
+msgid "Any Win key"
+msgstr "Qualquer tecla Windows"
+
+#: ../rules/base.xml.in.h:912
+msgid "Any Alt key"
+msgstr "Qualquer tecla Alt"
+
+#: ../rules/base.xml.in.h:913
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Alt direito, tecla Shift+Alt direito key é Multi_tecla"
+
+#: ../rules/base.xml.in.h:914
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Tecla Alt Direita nunca escolhe terceiro nível"
+
+#: ../rules/base.xml.in.h:915
+msgid "Enter on keypad"
+msgstr "Enter no teclado numérico"
+
+#: ../rules/base.xml.in.h:916
+msgid "Backslash"
+msgstr "Barra invertida"
+
+#: ../rules/base.xml.in.h:917
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Menor que/Maior que&gt;"
+
+#: ../rules/base.xml.in.h:918
+msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "Caps lock escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionada em conjunto com outra escolha de 3º nível"
+
+#: ../rules/base.xml.in.h:919
+msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "Barra invertida escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionada em conjunto com outra escolha de 3º nível"
+
+#: ../rules/base.xml.in.h:920
+msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "&lt;Less/Greater&gt; escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionadas em conjunto com outra escolha de 3º nível"
+
+#: ../rules/base.xml.in.h:921
+msgid "Ctrl key position"
+msgstr "Posição da tecla Ctrl"
+
+#: ../rules/base.xml.in.h:922
+msgid "Caps Lock as Ctrl"
+msgstr "Caps Lock como Ctrl"
+
+#: ../rules/base.xml.in.h:923
+msgid "Left Ctrl as Meta"
+msgstr "Ctrl da esquerda como Meta"
+
+#: ../rules/base.xml.in.h:924
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Trocar o Ctrl e o Caps Lock"
+
+#: ../rules/base.xml.in.h:925
+msgid "At left of 'A'"
+msgstr "À esquerda de 'A'"
+
+#: ../rules/base.xml.in.h:926
+msgid "At bottom left"
+msgstr "Na parte inferior esquerda"
+
+#: ../rules/base.xml.in.h:927
+msgid "Right Ctrl as Right Alt"
+msgstr "Ctrl Direito como Alt Direito"
+
+#: ../rules/base.xml.in.h:928
+msgid "Menu as Right Ctrl"
+msgstr "Menu como Ctrl da direita"
+
+#: ../rules/base.xml.in.h:929
+msgid "Right Alt as Right Ctrl"
+msgstr "Alt da direita como Ctrl da direita"
+
+#: ../rules/base.xml.in.h:930
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Usar LEDs do teclado para mostrar disposição alternativa"
+
+#: ../rules/base.xml.in.h:931
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: ../rules/base.xml.in.h:932
+msgid "Numeric keypad layout selection"
+msgstr "Seleção do layout do teclado numérico"
+
+#: ../rules/base.xml.in.h:933
+msgid "Legacy"
+msgstr "Legado"
+
+#: ../rules/base.xml.in.h:934
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Adições Unicode (setas e operadores matemáticos)"
+
+#: ../rules/base.xml.in.h:935
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Adições Unicode (setas e operadores matemáticos). Operadores matemáticos no nível padrão"
+
+#: ../rules/base.xml.in.h:936
+msgid "Legacy Wang 724"
+msgstr "Legado Wang 724"
+
+#: ../rules/base.xml.in.h:937
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
+msgstr "Teclado Wang 724 keypad com adições Unicode (setas e operadores matemáticos)"
+
+#: ../rules/base.xml.in.h:938
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Teclado Wang 724 com adições Unicode (setas e operadores matemáticos). Operadores matemáticos no nível padrão"
+
+#: ../rules/base.xml.in.h:939
+msgid "Hexadecimal"
+msgstr "Hexadecimal"
+
+#: ../rules/base.xml.in.h:940
+msgid "ATM/phone-style"
+msgstr "ATM/estilo-telefone"
+
+#: ../rules/base.xml.in.h:941
+msgid "Numeric keypad delete key behaviour"
+msgstr "Teclado numérico elimina comportamento chave"
+
+#: ../rules/base.xml.in.h:942
+msgid "Legacy key with dot"
+msgstr "Legado com tecla ponto"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:944
+msgid "Legacy key with comma"
+msgstr "Legado com tecla vírgula"
+
+#: ../rules/base.xml.in.h:945
+msgid "Four-level key with dot"
+msgstr "Chave de quatro níveis com ponto"
+
+#: ../rules/base.xml.in.h:946
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Tecla de quarto nível com ponto, restrição latin-9"
+
+#: ../rules/base.xml.in.h:947
+msgid "Four-level key with comma"
+msgstr "Chave de quatro níveis com vírgula"
+
+#: ../rules/base.xml.in.h:948
+msgid "Four-level key with momayyez"
+msgstr "Tecla de quarto nível com momayyez"
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:951
+msgid "Four-level key with abstract separators"
+msgstr "Chave de quatro níveis com separadores abstratos"
+
+#: ../rules/base.xml.in.h:952
+msgid "Semi-colon on third level"
+msgstr "Ponto-e-vírgula no terceiro nível"
+
+#: ../rules/base.xml.in.h:953
+msgid "Caps Lock key behavior"
+msgstr "Comportamento da tecla Caps Lock"
+
+#: ../rules/base.xml.in.h:954
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock usa capitalização interna. Shift \"pausa\" o Caps Lock"
+
+#: ../rules/base.xml.in.h:955
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock usa capitalização interna. Shift não afeta o Caps Lock"
+
+#: ../rules/base.xml.in.h:956
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "O Caps Lock funciona como uma trava ao Shift. Shift \"pausa\" o Caps Lock"
+
+#: ../rules/base.xml.in.h:957
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock funciona como Shift com trava. Shift não afeta a tecla Caps Lock"
+
+#: ../rules/base.xml.in.h:958
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock alterna a capitalização normal dos caracteres alfabéticos"
+
+#: ../rules/base.xml.in.h:959
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Fazer do Caps Lock um Num Lock adicional"
+
+#: ../rules/base.xml.in.h:960
+msgid "Swap ESC and Caps Lock"
+msgstr "Trocar o Esc e o Caps Lock"
+
+#: ../rules/base.xml.in.h:961
+msgid "Make Caps Lock an additional ESC"
+msgstr "Fazer do Caps Lock um Esc adicional"
+
+#: ../rules/base.xml.in.h:962
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Fazer do Caps Lock um Backspace adicional"
+
+#: ../rules/base.xml.in.h:963
+msgid "Make Caps Lock an additional Super"
+msgstr "Fazer do Caps Lock um Super adicional"
+
+#: ../rules/base.xml.in.h:964
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Tornar o Caps Lock uma adição à Hyper"
+
+#: ../rules/base.xml.in.h:965
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock alterna Shift então todas as teclas são afetadas"
+
+#: ../rules/base.xml.in.h:966
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock está desabilitada"
+
+#: ../rules/base.xml.in.h:967
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Usar tecla Caps Lock como controle adicional, mas manter o Caps Lock como símbolo da tecla"
+
+#: ../rules/base.xml.in.h:968
+msgid "Alt/Win key behavior"
+msgstr "Comportamento da tecla Alt/Win"
+
+#: ../rules/base.xml.in.h:969
+msgid "Add the standard behavior to Menu key"
+msgstr "Adicionar o comportamento padrão a tecla Menu"
+
+#: ../rules/base.xml.in.h:970
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt e Meta estão nas teclas Alt"
+
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt está mapeado à teclas Win (e as habituais teclas Alt)"
+
+#: ../rules/base.xml.in.h:972
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control está mapeado para teclas Win (e as habituais teclas Ctrl)"
+
+#: ../rules/base.xml.in.h:973
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control está mapeado para teclas Alt, Alt está mapeado para teclas Win"
+
+#: ../rules/base.xml.in.h:974
+msgid "Meta is mapped to Win keys"
+msgstr "Meta está mapeado para teclas Win"
+
+#: ../rules/base.xml.in.h:975
+msgid "Meta is mapped to Left Win"
+msgstr "Meta está mapeado para Win esquerdo"
+
+#: ../rules/base.xml.in.h:976
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper está mapeado para teclas Win"
+
+#: ../rules/base.xml.in.h:977
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt está mapeado para Win Direito, Super para Menu"
+
+#: ../rules/base.xml.in.h:978
+msgid "Alt is swapped with Win"
+msgstr "Alt é trocado por Win"
+
+#: ../rules/base.xml.in.h:979
+msgid "Compose key position"
+msgstr "Posição da tecla de composição."
+
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "Terceiro nível de Win esquerdo"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "Terceiro nível de Win direito"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Terceiro nível de Menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "Terceiro nível de Ctrl esquerdo"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "Terceiro nível de Ctrl direito"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Terceiro nível de Caps Lock"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Terceiro nível de &lt;Menor que/Maior que&gt;"
+
+#: ../rules/base.xml.in.h:987
+msgid "Pause"
+msgstr "Pausa"
+
+#: ../rules/base.xml.in.h:988
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:989
+msgid "Miscellaneous compatibility options"
+msgstr "Opções variadas de compatibilidade"
+
+#: ../rules/base.xml.in.h:990
+msgid "Default numeric keypad keys"
+msgstr "Pré-definição das teclas do teclado numérico"
+
+#: ../rules/base.xml.in.h:991
+msgid "Numeric keypad keys always enter digits (as in Mac OS)"
+msgstr "Teclas do teclado numérico sempre introduzem dígitos (como no Mac OS)"
+
+#: ../rules/base.xml.in.h:992
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Shift com teclas do teclado numérico funciona como no MS Windows"
+
+#: ../rules/base.xml.in.h:993
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift não cancela o Num Lock, mas escolhe o 3º nível"
+
+#: ../rules/base.xml.in.h:994
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Teclas especiais (Ctrl+Alt+&lt;key&gt;) tratadas em um servidor"
+
+#: ../rules/base.xml.in.h:995
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Teclado Apple Aluminium: emular teclas de PC (Print, Scroll Lock, Pause, Num Lock)"
+
+#: ../rules/base.xml.in.h:996
+msgid "Shift cancels Caps Lock"
+msgstr "Shift cancela o Caps Lock"
+
+#: ../rules/base.xml.in.h:997
+msgid "Enable extra typographic characters"
+msgstr "Habilitar caracteres tipográficos extras"
+
+#: ../rules/base.xml.in.h:998
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Shift-teclas juntas alternam o Caps Lock"
+
+#: ../rules/base.xml.in.h:999
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Shift-teclas juntas ativam o Caps Lock, um Shift-tecla desativa"
+
+#: ../rules/base.xml.in.h:1000
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Shift-teclas juntas alternam o Shift Lock"
+
+#: ../rules/base.xml.in.h:1001
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Alternar setas com Shift + NumLock."
+
+#: ../rules/base.xml.in.h:1002
+msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
+msgstr "Permitir ganho de quebra com as ações do teclado (aviso: risco de segurança)"
+
+#: ../rules/base.xml.in.h:1003
+msgid "Adding currency signs to certain keys"
+msgstr "Acrescentar sinal de unidade monetária a certas teclas"
+
+#: ../rules/base.xml.in.h:1004
+msgid "Euro on E"
+msgstr "Euro no E"
+
+#: ../rules/base.xml.in.h:1005
+msgid "Euro on 2"
+msgstr "Euro no 2"
+
+#: ../rules/base.xml.in.h:1006
+msgid "Euro on 4"
+msgstr "Euro no 4"
+
+#: ../rules/base.xml.in.h:1007
+msgid "Euro on 5"
+msgstr "Euro no 5"
+
+#: ../rules/base.xml.in.h:1008
+msgid "Rupee on 4"
+msgstr "Rupia no 4"
+
+#: ../rules/base.xml.in.h:1009
+msgid "Key to choose 5th level"
+msgstr "Tecla para escolher o 5º nível"
+
+#: ../rules/base.xml.in.h:1010
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Menor que/Maior que&gt; escolhe 5º nível, bloqueia quando pressionada junto com outra tecla de 5º nível"
+
+#: ../rules/base.xml.in.h:1011
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Alt direito escolhe quinto nível, bloqueia quando pressionado com outro escolhedor de 5º nível"
+
+#: ../rules/base.xml.in.h:1012
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win esquerdo escolhe 5º nível, bloqueia quando pressionada junto com outro escolhedor de 5º nível"
+
+#: ../rules/base.xml.in.h:1013
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win direito escolhe quinto nível, bloqueia quando pressionado com outro escolhedor de 5º nível"
+
+#: ../rules/base.xml.in.h:1014
+msgid "Using space key to input non-breakable space character"
+msgstr "Usar a tecla de espaco para inserir caractere de espaço sem quebra de linha"
+
+#: ../rules/base.xml.in.h:1015
+msgid "Usual space at any level"
+msgstr "Espaço normal em qualquer nível"
+
+#: ../rules/base.xml.in.h:1016
+msgid "Non-breakable space character at second level"
+msgstr "Caractere de espaço sem quebra de linha no segundo nível."
+
+#: ../rules/base.xml.in.h:1017
+msgid "Non-breakable space character at third level"
+msgstr "Caractere de espaço sem quebra de linha no terceiro nível."
+
+#: ../rules/base.xml.in.h:1018
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Caractere de espaço sem quebra de linha no terceiro nível, nada no quarto nível."
+
+#: ../rules/base.xml.in.h:1019
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Caractere de espaço não quebrável no terceiro nível, caractere de espaço não quebrável fino no quarto nível"
+
+#: ../rules/base.xml.in.h:1020
+msgid "Non-breakable space character at fourth level"
+msgstr "Caractere de espaço sem quebra de linha no quarto nível."
+
+#: ../rules/base.xml.in.h:1021
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Caractere de espaço não quebrável no quarto nível, caractere de espaço não quebrável fino no sexto nível"
+
+#: ../rules/base.xml.in.h:1022
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Caractere de espaço não quebrável no quarto nível, caractere de espaço não quebrável fino no sexto nível (via Ctrl+Shift)"
+
+#: ../rules/base.xml.in.h:1023
+msgid "Zero-width non-joiner character at second level"
+msgstr "Separação de tamanho nulo no segundo nível"
+
+#: ../rules/base.xml.in.h:1024
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Separação de tamanho nulo no segundo nível, união de tamanho nulo no terceiro nível"
+
+#: ../rules/base.xml.in.h:1025
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Separação de tamanho nulo no segundo nível, união de tamanho nulo no terceiro nível, caractere de espaço não quebrável no quarto nível"
+
+#: ../rules/base.xml.in.h:1026
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível"
+
+#: ../rules/base.xml.in.h:1027
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, nada no quarto nível"
+
+#: ../rules/base.xml.in.h:1028
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, união de tamanho nulo no quarto nível"
+
+#: ../rules/base.xml.in.h:1029
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, espaço não quebrável fino no quarto nível"
+
+#: ../rules/base.xml.in.h:1030
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Separação de tamanho nulo no terceiro nível, união de tamanho nulo no quarto nível"
+
+#: ../rules/base.xml.in.h:1031
+msgid "Japanese keyboard options"
+msgstr "Teclado Japonês opcional"
+
+#: ../rules/base.xml.in.h:1032
+msgid "Kana Lock key is locking"
+msgstr "Tecla Kana Lock está bloqueando"
+
+#: ../rules/base.xml.in.h:1033
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F estilo Backspace"
+
+#: ../rules/base.xml.in.h:1034
+msgid "Make Zenkaku Hankaku an additional ESC"
+msgstr "Fazer Zenkaku Hankaku um ESC adicional"
+
+#: ../rules/base.xml.in.h:1035
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Adicionando circunflexos Esperanto (supersigno)"
+
+#: ../rules/base.xml.in.h:1036
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Para a tecla correspondente no teclado Qwerty."
+
+#: ../rules/base.xml.in.h:1037
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Para a tecla correspondente no teclado Dvorak."
+
+#: ../rules/base.xml.in.h:1038
+msgid "Maintain key compatibility with old Solaris keycodes"
+msgstr "Mantém compatibilidade de teclas com antigos código de teclas Solaris"
+
+#: ../rules/base.xml.in.h:1039
+msgid "Sun Key compatibility"
+msgstr "Compatibilidade com teclas Sun"
+
+#: ../rules/base.xml.in.h:1040
+msgid "Key sequence to kill the X server"
+msgstr "Sequência de teclas para matar o servidor X"
+
+#: ../rules/base.xml.in.h:1041
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "apl"
+msgstr "apl"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "APL keyboard symbols"
+msgstr "Símbolos de teclado APL"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Kutenai"
+msgstr "Kutenai"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Multilingual (Canada, Sun Type 6/7)"
+msgstr "Multilíngue (Canadá, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "German (US keyboard with German letters)"
+msgstr "Alemão (teclado US com letras alemãs)"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "German (with Hungarian letters and no dead keys)"
+msgstr "Alemão (com letras húngaras e sem teclas acentuáveis)"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "German (Sun Type 6/7)"
+msgstr "Alemão (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "Avestan"
+msgstr "Avestão"
+
+#: ../rules/base.extras.xml.in.h:20
+msgid "Lithuanian (US Dvorak with Lithuanian letters)"
+msgstr "Lituano (US Dvorak com letras lituanas)"
+
+#: ../rules/base.extras.xml.in.h:21
+msgid "Lithuanian (Sun Type 6/7)"
+msgstr "Lituano (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:24
+msgid "Latvian (US Dvorak)"
+msgstr "Letão (US Dvorak)"
+
+#: ../rules/base.extras.xml.in.h:25
+msgid "Latvian (US Dvorak, Y variant)"
+msgstr "Letão (US Dvorak, variante com Y)"
+
+#: ../rules/base.extras.xml.in.h:26
+msgid "Latvian (US Dvorak, minus variant)"
+msgstr "Letão (US Dvorak, variante com tecla de menos)"
+
+#: ../rules/base.extras.xml.in.h:27
+msgid "Latvian (programmer US Dvorak)"
+msgstr "Letão (US Dvorak de programador)"
+
+#: ../rules/base.extras.xml.in.h:28
+msgid "Latvian (programmer US Dvorak, Y variant)"
+msgstr "Letão (US Dvorak de programador, variante com Y)"
+
+#: ../rules/base.extras.xml.in.h:29
+msgid "Latvian (programmer US Dvorak, minus variant)"
+msgstr "Letão (US Dvorak de programador, variante com a tecla menos)"
+
+#: ../rules/base.extras.xml.in.h:30
+msgid "Latvian (US Colemak)"
+msgstr "Letão (US Colemak)"
+
+#: ../rules/base.extras.xml.in.h:31
+msgid "Latvian (US Colemak, apostrophe variant)"
+msgstr "Letão (US Colemak, variante com apóstrofes)"
+
+#: ../rules/base.extras.xml.in.h:32
+msgid "Latvian (Sun Type 6/7)"
+msgstr "Letão (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:35
+msgid "English (US, international AltGr Unicode combining)"
+msgstr "Inglês (USA, combinação Unicode com AltGr internacional)"
+
+#: ../rules/base.extras.xml.in.h:36
+msgid "English (US, international AltGr Unicode combining, alternative)"
+msgstr "Inglês (USA, combinação Unicode com AltGr internacional, alternativo)"
+
+#: ../rules/base.extras.xml.in.h:37
+msgid "Atsina"
+msgstr "Atsina"
+
+#: ../rules/base.extras.xml.in.h:38
+msgid "Couer D'alene Salish"
+msgstr "Salish de Couer D'alene"
+
+#: ../rules/base.extras.xml.in.h:39
+msgid "English (US, Sun Type 6/7)"
+msgstr "Inglês (EUA, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:42
+msgid "Polish (international with dead keys)"
+msgstr "Polonês (internacional com teclas mortas)"
+
+#: ../rules/base.extras.xml.in.h:43
+msgid "Polish (Colemak)"
+msgstr "Polonês (Colemak)"
+
+#: ../rules/base.extras.xml.in.h:44
+msgid "Polish (Sun Type 6/7)"
+msgstr "Polonês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:48
+msgid "Crimean Tatar (Dobruja Q)"
+msgstr "Tártaro da Crimeia (Dobruja Q)"
+
+#: ../rules/base.extras.xml.in.h:49
+msgid "Romanian (ergonomic Touchtype)"
+msgstr "Romeno (Touchtype ergonômico)"
+
+#: ../rules/base.extras.xml.in.h:50
+msgid "Romanian (Sun Type 6/7)"
+msgstr "Romeno (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:53
+msgid "Serbian (combining accents instead of dead keys)"
+msgstr "Sérvio (acentos de combinação em vez de teclas mortas)"
+
+#: ../rules/base.extras.xml.in.h:56
+msgid "Russian (with Ukrainian-Belorussian layout)"
+msgstr "Russo (com padrão Ucrânia-Bielorrússia)"
+
+#: ../rules/base.extras.xml.in.h:57
+msgid "Russian (Sun Type 6/7)"
+msgstr "Russo (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:60
+msgid "Armenian (OLPC phonetic)"
+msgstr "Armênio (OLPC fonético)"
+
+#: ../rules/base.extras.xml.in.h:63
+msgid "Hebrew (Biblical, SIL phonetic)"
+msgstr "Hebraico (Bíblico, fonética SIL)"
+
+#: ../rules/base.extras.xml.in.h:66
+msgid "Arabic (Sun Type 6/7)"
+msgstr "Árabe (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:69
+msgid "Belgian (Sun Type 6/7)"
+msgstr "Belga (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:72
+msgid "Portuguese (Brazil, Sun Type 6/7)"
+msgstr "Português (Brasil, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:75
+msgid "Czech (Sun Type 6/7)"
+msgstr "Tcheco (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:78
+msgid "Danish (Sun Type 6/7)"
+msgstr "Dinamarquês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:81
+msgid "Dutch (Sun Type 6/7)"
+msgstr "Holandês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:84
+msgid "Estonian (Sun Type 6/7)"
+msgstr "Estoniano (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:87
+msgid "Finnish (Sun Type 6/7)"
+msgstr "Finlandês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:89
+msgid "French (Sun Type 6/7)"
+msgstr "Francês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:92
+msgid "Greek (Sun Type 6/7)"
+msgstr "Grego (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:95
+msgid "Italian (Sun Type 6/7)"
+msgstr "Italiano (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:98
+msgid "Japanese (Sun Type 6)"
+msgstr "Japonês (Sun tipo 6)"
+
+#: ../rules/base.extras.xml.in.h:99
+msgid "Japanese (Sun Type 7 - pc compatible)"
+msgstr "Japonês (Sun tipo 7 - compatível com pc)"
+
+#: ../rules/base.extras.xml.in.h:100
+msgid "Japanese (Sun Type 7 - sun compatible)"
+msgstr "Japonês (Sun tipo 7 - compatível com Sun)"
+
+#: ../rules/base.extras.xml.in.h:103
+msgid "Norwegian (Sun Type 6/7)"
+msgstr "Norueguês (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:105
+msgid "Portuguese (Sun Type 6/7)"
+msgstr "Português (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:108
+msgid "Slovak (Sun Type 6/7)"
+msgstr "Eslovaco (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:111
+msgid "Spanish (Sun Type 6/7)"
+msgstr "Espanhol (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:114
+msgid "Swedish (Sun Type 6/7)"
+msgstr "Sueco (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:116
+msgid "German (Switzerland, Sun Type 6/7)"
+msgstr "Alemão (Suiça, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:117
+msgid "French (Switzerland, Sun Type 6/7)"
+msgstr "Francês (Suíça, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:120
+msgid "Turkish (Sun Type 6/7)"
+msgstr "Turco (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:123
+msgid "Ukrainian (Sun Type 6/7)"
+msgstr "Ucraniano (Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:125
+msgid "English (UK, Sun Type 6/7)"
+msgstr "Inglês (Reino Unido, Sun tipo 6/7)"
+
+#: ../rules/base.extras.xml.in.h:128
+msgid "Korean (Sun Type 6/7)"
+msgstr "Coreano (Sun tipo 6/7)"
+
+#~ msgid ">German (Switzerland)"
+#~ msgstr "Alemão (Suíça)"
+
+#~ msgid "ca"
+#~ msgstr "ca"
+
+#~ msgid "Catalan"
+#~ msgstr "Catalão"
+
+#~ msgid "Serbian (Cyrillic)"
+#~ msgstr "Sérvio (Cirílico)"
diff --git a/xorg-server/xkeyboard-config/po/ru.po b/xorg-server/xkeyboard-config/po/ru.po
index aae53b128..582d23958 100644
--- a/xorg-server/xkeyboard-config/po/ru.po
+++ b/xorg-server/xkeyboard-config/po/ru.po
@@ -11,10 +11,10 @@
# Pavel Maryanov <acid@jack.kiev.ua>, 2011.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.7.99\n"
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-18 18:46+0400\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 19:17+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
"Language: ru\n"
@@ -1834,2014 +1834,2054 @@ msgid "German (eliminate dead keys)"
msgstr "Немецкая (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Немецкая (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Румынская (Германия)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Румынская (Германия, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Немецкая (Дворак)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Немецкая (со спец. клавишами (dead keys) Sun)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Немецкая (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Немецкая (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Немецкая (Macintosh, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Нижнелужицкая"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Нижнелужицкая (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Немецкая (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Русская (Германия, фонетическая)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Греческая"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Греческая (простая)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Греческая (расширенная)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Греческая (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Греческая (полифоническая)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Венгерская"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Венгерская (стандартная)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Венгерская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Венгерская (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Венгерская (101/qwertz/запятая/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Венгерская (101/qwertz/запятая/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Венгерская (101/qwertz/точка/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Венгерская (101/qwertz/точка/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Венгерская (pc101/qwerty/запятая/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Венгерская (pc101/qwerty/запятая/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Венгерская (pc101/qwerty/точка/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Венгерская (pc101/qwerty/точка/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Венгерская (102/qwertz/запятая/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Венгерская (102/qwertz/запятая/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Венгерская (102/qwertz/точка/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Венгерская (102/qwertz/точка/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Венгерская (102/qwerty/запятая/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Венгерская (102/qwerty/запятая/без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Венгерская (102/qwerty/точка/спец. клавиши (dead keys))"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Венгерская (102/qwerty/точка/без спец. клавиш (dead keys))"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Исландская"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Исландская (спец. клавиши (dead keys) Sun)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Исландская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Исландская (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Исландская (Дворак)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Иврит"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Иврит (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Иврит (фонетическая)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Иврит (библейский, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Итальянская"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Итальянская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Итальянская (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Итальянская (клавиатура США с итальянскими буквами)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Грузинская (Италия)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Итальянская (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Японская"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Японская (Кана)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Японская (Кана 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Японская (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Японская (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Японская (Дворак)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Киргизская"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Киргизская (фонетическая)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Кхмерская (Камбоджа)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Казахская"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Русская (Казахстан, с казахской)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Казахская (с русским)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Лаосская"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Лаосская (стандартная раскладка, предложенная STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Испанская (латиноамериканская)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Испанская (латиноамериканская, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Испанская (латиноамериканская, с dead tilde)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Испанская (латиноамериканская, с спец. клавишами (dead keys) Sun)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Литовская"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Литовская (стандартная)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Литовская (клавиатура США с литовскими буквами)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Литовская (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Литовская (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Литовская (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Латышская"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Латышская (вариант с апострофом)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Латышская (вариант с тильдой)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Латышская (вариант с F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Латышская (современная)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Латышская (эргономичная, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Латышская (адаптированная)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Маори"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Черногорская"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Черногорская (кириллица)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Черногорская (кириллица, З и Ж переставлены местами)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Черногорская (латинская юникодная)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Черногорская (латинская qwerty)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Черногорская (латинская юникодная qwerty)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Черногорская (кириллица с кавычками ёлочками)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Черногорская (латинская с кавычками ёлочками)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Македонская"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Македонская (без спец. клавиш (dead keys))"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Мальтийская"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Мальтийская (с раскладкой США)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Монгольская"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Норвежская"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Норвежская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Норвежская (Дворак)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Северная Саамская (Норвегия)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Северная Саамская (Норвегия, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Норвежская (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Норвежская (Macintosh, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Норвежская (Коулмак)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Польская"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Польская (устаревшая)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Польская (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Польская (Дворак)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Польская (Дворак, польские кавычки на клавишах с кавычками)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Польская (Дворак, польские кавычки на клавише 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Кашубская"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Русский (Польша, фонетический Дворак)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Польская (Дворак для программистов)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Португальская"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Португальская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Португальская (спец. клавиши (dead keys) Sun)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Португальская (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Португальская (Macintosh, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Португальская (Macintosh, спец. клавиши (dead keys) Sun)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Португальская (Nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Португальская (Nativo для клавиатур США)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Эсперанто (Португалия, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Румынская"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Румынская (седиль)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Румынская (стандартная)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Румынская (стандартная седиль)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Румынская (клавиши Win)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Русская"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Русская (фонетическая)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Русская (фонетическая с клавишами Win)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Русская (печатная машинка)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Русская (устаревшая)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Русская (печатная машинка, устаревшая)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Татарская"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Осетинская (устаревшая)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Осетинская (с клавишами Win)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Чувашия"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Чувашская (латиница)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Удмуртская"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Коми"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Якутская"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Калмыцкая"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Русская (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Русская (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Сербская (Россия)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Башкирская"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Марийская"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Сербская"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Сербская (кириллица, З и Ж переставлены местами)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Сербская (латинская)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Сербская (латинская юникодная)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Сербская (латинская qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Сербская (латинская юникодная qwerty)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Сербская (кириллица с кавычками ёлочками)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Сербская (латинская с кавычками ёлочками)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Паннонская русинская (омофоническая)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Словенская"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Словенская (используются кавычки ёлочки как кавычки)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Словенская (клавиатура США с словенскими буквами)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Словацкая"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Словацкая (расширенные функции Backslash)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Словацкая (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Словацкая (qwerty, расширенные функции Backslash)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Испанская"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Испанская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Испанская (с dead tilde)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Испанская (с спец. клавишами (dead keys) Sun)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Испанская (Дворак)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Астурлеонская (испанский вариант с нижними точками у H и L)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Каталонская (испанский вариант с точкой в L посередине)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Испанская (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Шведская"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Шведская (без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Шведская (Дворак)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Русская (Швеция, фонетическая)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Русская (Швеция, фонетическая, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Северная Саамская (Швеция)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Шведская (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Шведская (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Шведский язык жестов"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Немецкая (Швейцария)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Немецкая (Швейцария, устаревшая)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Немецкая (Швейцария, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Немецкая (Швейцария, с спец. клавишами (dead keys) Sun)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Французская (Швейцария)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Французская (Швейцария, без спец. клавиш (dead keys))"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Французская (Швейцария, спец. клавиши (dead keys) Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Французская (Швейцария, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Немецкая (Швейцария, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Арабская (Сирия)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Сирийская"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Сирийская (фонетическая)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Курдская (Сирия, латинская Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Курдская (Сирия, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Курдская (Сирия, латинская Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Таджикская"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Таджикская (устаревшая)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Сингальская (фонетическая)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Тамильская (Шри-Ланка, юникодная)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Тамильская (Шри-Ланка, печатная машинка TAB)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Тайская"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Тайская (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Тайская (паттачотская)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Турецкая"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Турецкая (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Турецкая (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Турецкая (со спец. клавишами (dead keys) Sun)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Курдская (Турция, латинская Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Курдская (Турция, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Курдская (Турция, латинская Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Турецкая (международная со спец. клавишами)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Крымско-татарская (турецкая Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Крымско-татарская (турецкая F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Крымско-татарская (турецкая Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Тайваньская"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Тайваньская (туземная)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Сайсьят (Тайвань)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Украинская"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Украинская (фонетическая)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Украинская (печатная машинка)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Украинская (с клавишами Win)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Украинская (устаревшая)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Украинская (стандартная RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Русская (Украина, стандартная RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Украинская (омофоническая)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Английская (Великобритания)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Английская (Великобритания, расширенная клавишами Win)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Английская (Великобритания, международная с спец. клавишами (dead keys))"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Английская (Великобритания, Дворак)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Английская (Великобритания, Дворак с английской пунктуацией)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Английская (Великобритания, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Английская (Великобритания, Macintosh международная)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Английская (Великобритания, Коулмак)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Узбекская"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Узбекская (латинская)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "Вьетнамская"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Корейская"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Корейская (совместимая c 101/104 кнопочной)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Японская (PC-98xx Series)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Ирландская"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Ирландская (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Огхам"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Огхам (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Урдская (Пакистан)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Урдская (Пакистан, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Урдская (Пакистан, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Арабская (Пакистан)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Синдхи"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Дивехи"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Английская (Южная Африка)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Эсперанто"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Эсперанто (смещённые точка с запятой и кавычка, устарела)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Непальская"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Английская (Нигерия)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Игбо"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Йорубская"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Амхарская"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Волофская"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Брайля"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Брайля (под левую руку)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Брайля (под правую руку)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Туркменская"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Туркменская (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Баманская"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Французская (Мали, альтернативная)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Английская (Мали, Macintosh США)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Английская (Мали, международная США)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Суахильская (Танзания)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Суахильская (Кения)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Кикуйу"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Тсванская"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Филиппинская"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Филиппинская (QWERTY байбайинская)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Филиппинская (Кэйпвелл-Дворак латиница)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Филиппинская (Кэйпвелл-Дворак байбайинcкая)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Филиппинская (Кэйпвелл-QWERF 2006 латиница)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Филиппинская (Кэйпвелл-QWERF 2006 байбайинская)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Филиппинская (Коулмак латиница)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Филиппинская (Коулмак байбайинская)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Филиппинская (Дворак латиница)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Филиппинская (Дворак байбайинcкая)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Молдавская"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Молдавская (гагаузская)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Клавиша(и) для смены раскладки"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Правая клавиша Alt (пока нажата)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Левая клавиша Alt (пока нажата)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Левая клавиша Win (пока нажата)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Правая клавиша Win (пока нажата)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Любая клавиша Win (на время нажатия)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (пока нажата), Alt+Caps Lock выполняет первоначальную функцию capslock"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Правая клавиша Ctrl (пока нажата)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Правая клавиша Alt"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Левая клавиша Alt"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (на первую раскладку), Shift+Caps Lock (на последнюю раскладку)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Левая Win (на первую раскладку), Правая Win/Menu (на последнюю раскладку)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Левая Ctrl (на первую раскладку), Правая Ctrl (на последнюю раскладку)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Обе клавиши Shift, нажатые вместе"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Обе клавиши Alt, нажатые вместе"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Обе клавиши Ctrl, нажатые вместе"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Левая Ctrl+Левая Shift"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Правая Ctrl+Правая Shift"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Левая Alt+Левая Shift"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Пробел"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Левая клавиша Win"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Правая клавиша Win"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Левая клавиша Shift"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Правая клавиша Shift"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Левая клавиша Ctrl"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Правая клавиша Ctrl"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Левая-Ctrl+Левая-Win (на первую раскладку), Правая-Ctrl+Menu (на вторую раскладку)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Клавиша для выбора 3-го ряда"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Любая клавиша Win"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Любая клавиша Alt"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Правая клавиша Alt, Shift и правая Alt вместе работают как Multi_Key"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "По правой клавише Alt никогда не выбирается третий ряд"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Enter на цифровой клавиатуре"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Меньше чем/Больше чем&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Backslash выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Меньше чем/Больше чем&gt; выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Положение клавиши Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock как Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Левая клавиша Ctrl как Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Поменять местами клавиши Ctrl и Caps Lock"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Слева от 'A'"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "Снизу слева"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Правая клавиша Ctrl работает как правая клавиша Alt"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menu как правая клавиша Ctrl"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Правая клавиша Alt как правая клавиша Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Использовать клавиатурные индикаторы для отображения дополнительных раскладок"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Выбор раскладки цифровой клавиатуры"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Legacy"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Дополнения юникода (стрелки и математические операторы)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Дополнения юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Старая Wang 724"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Шестнадцатеричная"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "В стиле банкоматной/телефонной"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Функция клавиши Delete на цифровой клавиатуре"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Клавиша Legacy с точкой"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Клавиша Legacy с запятой"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Четырёх-рядная клавиша с точкой"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Четырёх-рядная клавиша с точкой, ограничена latin-9"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Четырёх-рядная клавиша с запятой"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Четырёх-рядная клавиша с momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Четырёх-рядная клавиша с абстрактными разделителями"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Точка с запятой в третьем ряду"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Поведение клавиши Caps Lock"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock включает внутреннюю капитализацию. Shift приостанавливает действие Caps Lock"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Caps Lock включает внутреннюю капитализацию. Shift не влияет на Caps Lock"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock действует как Shift с блокировкой. Shift приостанавливает действие Caps Lock"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Caps Lock действует как Shift с блокировкой. Shift не влияет на Caps Lock"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock переключает обычную капитализацию символов алфавита"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Использовать Caps Lock как дополнительную клавишу Num Lock"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Поменять местами клавиши ESC и Caps Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Использовать Caps Lock как дополнительную клавишу ESC"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Использовать Caps Lock как дополнительную клавишу Backspace"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Использовать Caps Lock как дополнительную клавишу Super"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Использовать Caps Lock как дополнительную клавишу Hyper"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Caps Lock переключает Shift, таким образом что, он действует сразу на все клавиши"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Caps Lock выключен"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Использовать Caps Lock как дополнительную клавишу Control, но сохранить символ клавиши Caps_Lock"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Поведение клавиши Alt/Win"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Добавить обыкновенное поведение на клавишу Menu"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt и Meta на клавишах Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt используется в качестве клавиш Win (и как обычный Alt)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control используется в качестве клавиш Win (и как обычный Control)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control используется в качестве клавиш Alt, Alt используется в качестве клавиш Win"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta соответствует клавишам Win"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta соответствует левой клавише Win"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper соответствует клавишам Win"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt соответствует правой клавише Win, а Super — Menu"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Клавиша Alt поменяна местами с клавишей Win"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Положение клавиши Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "3-й ряд левой Win"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "3-й ряд правой Win"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "3-й ряд Menu"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "3-й ряд левой Ctrl"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "3-й ряд правой Ctrl"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "3-й ряд Caps Lock"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "3-й ряд &lt;Меньше чем/Больше чем&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Разные параметры совместимости"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Клавиши цифровой клавиатуры по умолчанию"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "С клавиш цифровой клавиатуры всегда вводятся цифры (как в Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Клавиша Shift с клавишами цифровой клавиатуры работают также как в MS Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift не отменяет Num Lock, а выбирает третий ряд"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Специальные клавиши (Ctrl+Alt+&lt;клв&gt;) обрабатываются сервером"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Алюминиевая клавиатура Apple: эмуляция клавиш ПК (Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Shift отменяет Caps Lock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Включить дополнительные типографские символы"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Обе клавиши Shift, нажатые вместе, переключают Caps Lock"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Обе клавиши Shift, нажатые вместе, включают Caps Lock, одна клавиша Shift выключает"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Обе клавиши Shift, нажатые вместе, переключают ShiftLock"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Переключать PointerKeys с помощью Shift + NumLock."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Позволить прерывать захват с помощью клавиатуры (предупреждение: угроза безопасности)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Добавление знаков валют к некоторым клавишам"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Символ евро на клавише E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Символ евро на клавише 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Символ евро на клавише 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Символ евро на клавише 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Символ рупии на клавише 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Клавиша для выбора 5-го ряда"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Клавиша пробела используется для ввода символа неразрывного пробела"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Обычный пробел в любом ряду"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Символ неразрывного пробела во втором ряду"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Символ неразрывного пробела в третьем ряду"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Символ неразрывного пробела в третьем ряду, ничего на четвёртом"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Символ неразрывного пробела в третьем ряду, символ тонкого неразрывного пробела в четвёртом ряду"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Символ неразрывного пробела в четвёртом ряду"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду (с помощью Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду, символ неразрывного пробела в четвёртом ряду"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, ничего в четвёртом"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, тонкий неразрывный пробел в четвёртом ряду"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Несвязывающий символ нулевой ширины в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Настройки японской клавиатуры"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Кана блокируется клавишей Lock"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "Backspace в стиле NICOLA-F"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Использовать Zenkaku Hankaku как дополнительную клавишу ESC"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Добавление диакритических знаков эсперанто"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "На соответствующую клавишу на клавиатуре Qwerty."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "На соответствующую клавишу на клавиатуре Дворак."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Сохранить совместимость со старыми кодами клавиш Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Совместимость с клавишами Sun"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Комбинация клавиш для прерывания работы X-сервера"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Backspace"
@@ -4006,7 +4046,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Бельгийская (Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Португальская (Бразилия, Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4073,10 +4113,6 @@ msgstr "Испанская (Sun Type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Шведская (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr ">Немецкая (Швейцария)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Немецкая (Швейцария, Sun Type 6/7)"
@@ -4101,6 +4137,9 @@ msgstr "Английская (Великобритания, Sun Type 6/7)"
msgid "Korean (Sun Type 6/7)"
msgstr "Корейская (Sun Type 6/7)"
+#~ msgid ">German (Switzerland)"
+#~ msgstr ">Немецкая (Швейцария)"
+
#~ msgid "ca"
#~ msgstr "ca"
@@ -4152,9 +4191,6 @@ msgstr "Корейская (Sun Type 6/7)"
#~ msgid "Make Caps Lock an additional Ctrl"
#~ msgstr "Использовать Caps Lock как дополнительную клавишу Ctrl"
-#~ msgid "Meta on Left Ctrl"
-#~ msgstr "Meta на левой клавише Ctrl"
-
#~ msgid "Right Ctrl is mapped to Menu"
#~ msgstr "Правая клавиша Ctrl соответствует клавише Menu"
diff --git a/xorg-server/xkeyboard-config/po/uk.po b/xorg-server/xkeyboard-config/po/uk.po
index acd2dbc02..524f5b2f4 100644
--- a/xorg-server/xkeyboard-config/po/uk.po
+++ b/xorg-server/xkeyboard-config/po/uk.po
@@ -10,10 +10,10 @@
# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.7.99\n"
+"Project-Id-Version: xkeyboard-config-2.8.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-15 23:47+0000\n"
-"PO-Revision-Date: 2013-01-18 15:19+0200\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-16 13:46+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
"Language: uk\n"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.4\n"
+"X-Generator: Lokalize 1.5\n"
#: ../rules/base.xml.in.h:1
msgid "Generic 101-key PC"
@@ -1833,2014 +1833,2054 @@ msgid "German (eliminate dead keys)"
msgstr "Німецька (вимкнути сліпі клавіші)"
#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "Німецька (T3)"
+
+#: ../rules/base.xml.in.h:491
msgid "Romanian (Germany)"
msgstr "Румунська (Німеччина)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Німецька (Німеччина, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:493
msgid "German (Dvorak)"
msgstr "Німецька (Дворак)"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "German (Sun dead keys)"
msgstr "Німецька (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "German (Neo 2)"
msgstr "Німецька (Neo 2)"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "German (Macintosh)"
msgstr "Німецька (Macintosh)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Німецька (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Lower Sorbian"
msgstr "Нижньолужицька"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Lower Sorbian (qwertz)"
msgstr "Нижньолужицька (qwertz)"
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:500
msgid "German (qwerty)"
msgstr "Німецька (qwerty)"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr "Російська (Німеччина, фонетична)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr "Грецька"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr "Грецька (проста)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr "Грецька (розширена)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr "Грецька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr "Грецька (поліфонічна)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr "Угорська"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr "Угорська (стандартна)"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr "Угорська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr "Угорська (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Угорська (101/qwertz/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Угорська (101/qwertz/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Угорська (101/qwerty/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Угорська (101/qwerty/кома/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Угорська (101/qwerty/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Угорська (101/qwerty/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Угорська (102/qwertz/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Угорська (102/qwertz/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Угорська (102/qwerty/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Угорська (102/qwerty/кома/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Угорська (102/qwerty/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Угорська (102/qwerty/крапка/вимкнути сліпі клавіші)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr "Ісландська"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr "Ісландська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr "Ісландська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr "Ісландська (Macintosh)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr "Ісландська (Дворак)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr "Іврит"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr "Іврит (lyx)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr "Іврит (фонетична)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr "Іврит (Біблейська, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr "Італійська"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr "Італійська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr "Італійська (Macintosh)"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr "Італійська (клавіатура США з італійськими літерами)"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr "Грузинська (Італія)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr "Італійська (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr "Японська"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr "Японська (кана)"
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr "Японська (кана 86)"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr "Японська (OADG 109A)"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr "Японська (Macintosh)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr "Японська (Дворак)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr "Киргизька"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr "Киргизька (фонетична)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr "Кхмерська (Камбоджа)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr "Казахська"
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Російська (Казахстан, з казахською)"
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr "Казахська (з російськими)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr "Лаоська"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr "Лаоська (стандартна розкладка, запропонована STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr "Іспанська (латиноамериканська)"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Іспанська (латиноамериканська, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Іспанська (латиноамериканська зі «спеціальною» тильдою)"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Іспанська (латиноамериканська, сліпі клавіші Sun)"
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr "Литовська"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr "Литовська (стандартна)"
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Литовська (клавіатура США, з литовськими літерами)"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Литовська (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr "Литовська (LEKP)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr "Литовська (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr "Латвійська"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr "Латвійська (варіант з апострофом)"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr "Латвійська (варіант з тильдою)"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr "Латвійська (варіант з літерою F)"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr "Латвійська (сучасна)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Латвійська (ергономічна, ŪGJRMV)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr "Латвійська (адаптована)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr "Маорійська"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr "Чорногорська"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr "Чорногорська (кирилиця)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr "Чорногорська (кирилиця, З та Ж поміняні місцями)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr "Чорногорська (латиниця, Unicode)"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr "Чорногорська (латиниця, qwerty)"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Чорногорська (латиниця, Unicode, qwerty)"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Чорногорська (кирилиця з кутовими лапками)"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr "Чорногорська (латиниця з кутовими лапками)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr "Македонська"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr "Македонська (вимкнути сліпі клавіші)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr "Мальтійська"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr "Мальтійська (клавіатура з розкладкою США)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr "Монгольська"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr "Норвезька"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr "Норвезька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr "Норвезька (Дворак)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr "Північно-саамська (Норвегія)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Північно-саамська (Норвегія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr "Норвезька (Macintosh)"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Норвезька (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr "Норвезька (Колемак)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr "Польська"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr "Польська (застаріла)"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr "Польська (qwertz)"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr "Польська (Дворак)"
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Польська (Дворак, польські лапки на знаку лапки)"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Польська (Дворак, польські лапки на клавіші 1)"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr "Кашубська"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Російська (Польща, фонетична Дворака)"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr "Польська (програмістський Дворак)"
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr "Португальська"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr "Португальська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr "Португальська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr "Португальська (Macintosh)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Португальська (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Португальська (Macintosh, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr "Португальська (Nativo)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr "Португальська (nativo для клавіатур у США)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr "Есперанто (португальська, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr "Румунська"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr "Румунська (седиль)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr "Румунська (стандартна)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr "Румунська (стандартна седиль)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr "Румунська (з клавішами Win)"
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr "Російська"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr "Російська (фонетична)"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr "Російська (фонетична з клавішами Win)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr "Російська (машинопис)"
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr "Російська (застаріла)"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr "Російська (машинопис, застаріла)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr "Татарська"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr "Осетинська (застаріла)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr "Осетинська (з клавішами Win)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr "Чуваська"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr "Чуваська (латиниця)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr "Удмуртська"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr "Комі"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr "Якутська"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr "Калмицька"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr "Російська (DOS)"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "Російська (Macintosh)"
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr "Сербська (Росія)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr "Башкирська"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr "Марійська"
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr "Сербська"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr "Сербська (кирилиця, З та Ж поміняні місцями)"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr "Сербська (латиниця)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr "Сербська (латиниця Unicode)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr "Сербська (латиниця, qwerty)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Сербська (латиниця, Unicode qwerty)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Сербська (кирилиця з кутовими лапками)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr "Сербська (латиниця з кутовими лапками)"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr "Паннонська русинська (гомофонна)"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr "Словенська"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr "Словенська (кутові лапки)"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Словенська (клавіатура США із словенськими літерами)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr "Словацька"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr "Словацька (розширені функції Backslash)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr "Словацька (qwerty)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Словацька (qwerty, розширені функції Backslash)"
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr "Іспанська"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr "Іспанська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr "Іспанська (зі «спеціальною» тильдою)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr "Іспанська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr "Іспанська (Дворак)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Астурійська (Іспанія, з H та L з нижньою крапкою)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Іспанська (Іспанія, варіант з L із середньою точкою)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr "Іспанська (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr "Шведська"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr "Шведська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr "Шведська (Дворак)"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr "Російська (шведська, фонетична)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Російська (шведська, фонетична, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr "Північно-саамська (Швеція)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr "Шведська (Macintosh)"
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr "Шведська (Svdvorak)"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr "Шведська мова жестів"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr "Німецька (Швейцарія)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr "Німецька (Швейцарія, застаріла)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Німецька (Швейцарія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr "Німецька (Швейцарія, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr "Французька (Швейцарія)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Французька (Швейцарія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr "Французька (Швейцарія, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr "Французька (Швейцарія, Macintosh)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr "Німецька (Швейцарія, Macintosh)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr "Арабська (Сирія)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr "Сирійська"
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr "Сирійська (фонетична)"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr "Курдська (Сирія, латиниця Q)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr "Курдська (Сирія, F)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Курдська (Сирія, латиниця Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr "Таджицька"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr "Таджицька (застаріла)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr "Сингальська (фонетична)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Тамільська (Шрі-Ланка, Unicode)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Тамільська (Шрі-Ланка, TAB, машинопис)"
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr "Тайська"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr "Тайська (TIS-820.2538)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr "Тайська (паттачот)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr "Турецька"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr "Турецька (F)"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr "Турецька (Alt-Q)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr "Турецька (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Курдська (Туреччина, латиниця Q)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr "Курдська (Туреччина, F)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Курдська (Туреччина, латиниця Alt-Q)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr "Турецька (інтернаціональна зі сліпими клавішами)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr "Кримськотатарська (турецька Q)"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr "Кримськотатарська (турецька F)"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Кримськотатарська (турецька Alt-Q)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr "Тайванська"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr "Тайванська (місцева)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr "Сайсіят (Тайвань)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr "Українська"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr "Українська (фонетична)"
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr "Українська (друкарська машинка)"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr "Українська (з клавішами Win)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr "Українська (застаріла)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr "Українська (стандартна RSTU)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Російська (Україна, стандартна RSTU)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr "Українська (гомофонна)"
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr "Англійська (Великобританія)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr "Англійська (Великобританія, розширена, з клавішами Win)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr "Англійська (Великобританія, інтернаціональна зі сліпими клавішами)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr "Англійська (Великобританія, Дворак)"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Англійська (Великобританія, Дворак з британською пунктуацією)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr "Англійська (Великобританія, Macintosh)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr "Англійська (Великобританія, інтернаціональна Macintosh)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr "Англійська (США, Коулмак)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr "Узбецька"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr "Узбецька (латиниця)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr "В'єтнамська"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr "Корейська"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr "Корейська (сумісна з 101/104 клавішною)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr "Японська (родина PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr "Ірландська"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr "Гаельський шрифт"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr "Ірландська (UnicodeExpert)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr "Огам"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr "Огам (IS434)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr "Урду (Пакистан)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr "Урду (Пакистан, CRULP)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr "Урду (Пакистан, NLA)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr "Арабська (Пакистан)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr "Синдхі"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr "Мальдивська"
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr "Англійська (ПАР)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr "Есперанто"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Есперанто (посунута крапка з комою та лапки, застаріла)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr "Непальська"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr "Англійська (Нігерія)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr "Йоруба"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr "Амхарська"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr "Волоф"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr "Брайля"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr "Брайля (для шульги)"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr "Брайль (для правші)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr "Туркменська"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr "Туркменська (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr "Бамбара"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr "Французька (Малі, альтернативна)"
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr "Англійська (Малі, Macintosh США)"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr "Англійська (Малі, інтернаціональна США)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr "Суахілі (Танзанія)"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr "Суахілі (Кенія)"
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr "Кікуйю"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr "Тсвана"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr "Філіппінська"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr "Філіппінська (QWERTY, байбаїн)"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Філіппінська (Кейпвелл-Дворак, латиниця)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Філіппінська (Кейпвелл-Дворак, байбаїн)"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Філіппінська (Кейпвелл-QWERF 2006, латиниця)"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Філіппінська (Кейпвелл-QWERF 2006, байбаїн)"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr "Філіппінська (Коулмак, латиниця)"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr "Філіппінська (Коулмак, байбаїн)"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr "Філіппінська (Дворак, латиниця)"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr "Філіппінська (Дворат, байбаїн)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr "Молдавська"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr "Молдавська (гагаузька)"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr "Клавіші для зміни розкладки"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr "Права клавіша Alt (поки натиснена)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr "Ліва клавіша Alt (поки натиснена)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr "Ліва клавіша Win (поки натиснута)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr "Права клавіша Win (поки натиснена)"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr "Будь-яка клавіша Win (на час натискання)"
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (поки натиснена), Alt+Caps Lock виконує оригінальну функцію capslock"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr "Права клавіша Ctrl (поки натиснута)"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr "Права клавіша Alt"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr "Ліва клавіша Alt"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (на першу розкладку), Shift+Caps Lock (на останню розкладку)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr "Обидві клавіші Shift разом"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr "Обидві клавіші Alt разом"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr "Обидві клавіші Ctrl разом"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr "Лівий Ctrl+Лівий Shift"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr "Права Ctrl+Права Shift"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr "Лівий Alt+Лівий Shift"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr "Alt+Пробіл"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr "Ліва клавіша Win"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr "Права клавіша Win"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr "Ліва клавіша Shift"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr "Права клавіша Shift"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr "Ліва клавіша Ctrl"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr "Права клавіша Ctrl"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ліва Ctrl+ліва Win (на першу розкладку), правий Ctrl+Menu (на другу розкладку)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr "Клавіша для вибору 3-го ряду"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr "Будь-яка клавіша Win"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr "Будь-яка клавіша Alt"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Вибір 3-го рівня натисненням правої клавіші Alt, Shift+права клавіша Alt діє як Multi_Key"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr "Права клавіша Alt ніколи не обирає 3-й рівень"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr "Enter на цифровій клавіатурі"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr "Зворотна риска"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Менше ніж/Більше ніж&gt;"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Зворотна похила риска вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Менше/Більше&gt; вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr "Розташування клавіші Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock працює як Ctrl"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr "Ліва клавіша Ctrl як Meta"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr "Поміняти місцями клавіші Ctrl та Caps Lock"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr "Ліворуч від 'A'"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr "Знизу ліворуч"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr "Права клавіша Ctrl працює як права клавіша Alt"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr "Menu працює як права клавіша Ctrl"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr "Права клавіша Alt працює як права клавіша Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr "Вибір розкладки цифрової клавіатури"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr "Застаріла"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr "Доповнення Unicode (стрілки та математичні оператори)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Доповнення Unicode (стрілки та математичні оператори). Математичні оператори на типовому рівні."
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr "Стара Wang 724"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори). Математичні операції на типовому рівні"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr "Шістнадцяткова"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr "У стилі банкоматної/телефонної"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr "Вибір поведінки клавіші del на цифровій клавіатурі"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr "Застаріла клавіша з крапкою"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr "Застаріла клавіша з комою"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr "Клавіша четвертого рівня з крапкою"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Клавіша четвертого рівня з крапкою, обмежена latin-9"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr "Клавіша четвертого рівня з комою"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr "Клавіша четвертого рівня з momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr "Клавіша четвертого рівня з абстрактним розділювачем "
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr "Крапка з комою на третьому рівні"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr "Поведінка клавіші Caps Lock"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift призупиняє дію Caps Lock"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift не впливає на Caps Lock"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr "Caps Lock дія як Shift з блокуванням. Shift призупиняє дію Caps Lock"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr "Caps Lock діє як Shift з блокуванням. Shift не впливає на Caps Lock"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock вмикає звичайну капіталізацію символів алфавіту"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr "Caps Lock — додаткова клавіша Num Lock"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr "Поміняти місцями клавіші ESC та Caps Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr "Caps Lock — додаткова клавіша ESC"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr "Caps Lock — додаткова клавіша Backspace"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr "Caps Lock — додаткова клавіша Super"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr "Caps Lock — додаткова клавіша Hyper"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr "Caps Lock вмикає Shift, таким чином, він діє одразу на всі клавіші"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr "Caps Lock вимкнено"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr "Caps Lock — додаткова клавіша Ctrl, але зі збереженням символу клавіші Caps_Lock"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr "Поведінка клавіш Alt/Win"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr "Додати звичайну поведінку на клавішу Menu"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr "Alt та Meta на клавішах Alt"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt використовуються як Win (і як звичайні Alt)"
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control використовується як Win (і як звичайний Control)"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control використовується як клавіші Alt, Alt використовується як Win"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr "Meta відповідає клавішам Win"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr "Meta відповідає лівій клавіші Win"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper відповідає клавішам Win"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu."
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr "Alt міняється з клавішею Win"
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr "Розташування клавіші Compose"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "3-ій рівень лівої Win"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "3-ій рівень правої Win"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "3-ій рівень клавіші меню"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "3-ій рівень лівої Ctrl"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "3-ій рівень правої Ctrl"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "3-ій рівень Caps Lock"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "3-ій рівень &lt;Менше/Більше&gt;"
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr "Різні параметри сумісності"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr "Типові клавіші цифрової клавіатури"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "За допомогою цифрова клавіатура вводяться лише цифри (як у Mac OS)"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift не скасовує Num Lock, а вибирає третій рівень"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Сліпі клавіші (Ctrl+Alt+&lt;key&gt;) обробляються на сервері"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Клавіатура Apple Aluminium (емуляція клавіш ПК: Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr "Shift скасовує Caps Lock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr "Увімкнути додаткові типографські символи"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr "Обидві клавіші Shift разом перемикають стан Caps Lock"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr "Натискання обох клавіш Shift вмикають Caps Lock, одна клавіша Shift — вимикає"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr "Обидві клавіші Shift разом перемикають стан Shift"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr "Вмикати або вимикати PointerKeys за допомогою Shift + NumLock."
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Дозволити скасування захоплення діями з клавіатури (увага: небезпечно)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr "Додавання знаків валюти до деяких клавіш"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr "Євро на E"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr "Євро на 2"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr "Євро на 4"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr "Євро на 5"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr "Символ рупії на 4"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr "Клавіша для вибору 5-го ряду"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr "Клавіша пробіл генерує символ нерозривного пробілу"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr "Звичайний пробіл на будь-якому рівні"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr "Символ нерозривного пробілу на другому рівні"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr "Символ нерозривного пробілу на третьому рівні"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr "Символ нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні (через Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні, символ нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, нічого на четвертому рівні"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, символ нерозривного пробілу на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, вузький нерозривний пробіл на четвертому рівні"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Незв’язувальний символ нульової ширини на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr "Параметри японської клавіатури"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr "Клавіша Kana Lock фіксується"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F style Backspace"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Клавіша повних/половинних форм — додаткова клавіша ESC"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Додавання діакритичних знаків есперанто"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "На відповідну клавішу на клавіатурі Qwerty."
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "На відповідну клавішу на клавіатурі Дворак."
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Підтримувати сумісність клавіш з застарілими кодами клавіш Solaris"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr "Сумісність з кодами клавіш Sun"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr "Комбінація клавіш для переривання роботи X-сервера"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr "Control + Alt + Backspace"
@@ -4005,7 +4045,7 @@ msgid "Belgian (Sun Type 6/7)"
msgstr "Бельгійська (Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:72
-msgid "Portuguese (Brazil,Sun Type 6/7)"
+msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Португальська (Бразилія, Sun Type 6/7)"
#: ../rules/base.extras.xml.in.h:75
@@ -4072,10 +4112,6 @@ msgstr "Іспанська (Sun Type 6/7)"
msgid "Swedish (Sun Type 6/7)"
msgstr "Шведська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:115
-msgid ">German (Switzerland)"
-msgstr "Німецька (Швейцарія)"
-
#: ../rules/base.extras.xml.in.h:116
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Німецька (Швейцарія, Sun Type 6/7)"
@@ -4100,6 +4136,9 @@ msgstr "Англійська (Великобританія, Sun Type 6/7)"
msgid "Korean (Sun Type 6/7)"
msgstr "Корейська (Sun Type 6/7)"
+#~ msgid ">German (Switzerland)"
+#~ msgstr "Німецька (Швейцарія)"
+
#~ msgid "ca"
#~ msgstr "ca"
@@ -4151,9 +4190,6 @@ msgstr "Корейська (Sun Type 6/7)"
#~ msgid "Make Caps Lock an additional Ctrl"
#~ msgstr "Caps Lock — додаткова клавіша Ctrl"
-#~ msgid "Meta on Left Ctrl"
-#~ msgstr "Meta на лівій клавіші Ctrl"
-
#~ msgid "Right Ctrl is mapped to Menu"
#~ msgstr "Права Ctrl відповідає клавіші Menu"
diff --git a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
index 4a5dd4c88..dd5719dc8 100644
--- a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
+++ b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2013-01-29 22:56+0000\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1827,2055 +1827,2095 @@ msgid "German (eliminate dead keys)"
msgstr ""
#: ../rules/base.xml.in.h:490
-msgid "Romanian (Germany)"
+msgid "German (T3)"
msgstr ""
#: ../rules/base.xml.in.h:491
-msgid "Romanian (Germany, eliminate dead keys)"
+msgid "Romanian (Germany)"
msgstr ""
#: ../rules/base.xml.in.h:492
-msgid "German (Dvorak)"
+msgid "Romanian (Germany, eliminate dead keys)"
msgstr ""
#: ../rules/base.xml.in.h:493
-msgid "German (Sun dead keys)"
+msgid "German (Dvorak)"
msgstr ""
#: ../rules/base.xml.in.h:494
-msgid "German (Neo 2)"
+msgid "German (Sun dead keys)"
msgstr ""
#: ../rules/base.xml.in.h:495
-msgid "German (Macintosh)"
+msgid "German (Neo 2)"
msgstr ""
#: ../rules/base.xml.in.h:496
-msgid "German (Macintosh, eliminate dead keys)"
+msgid "German (Macintosh)"
msgstr ""
#: ../rules/base.xml.in.h:497
-msgid "Lower Sorbian"
+msgid "German (Macintosh, eliminate dead keys)"
msgstr ""
#: ../rules/base.xml.in.h:498
-msgid "Lower Sorbian (qwertz)"
+msgid "Lower Sorbian"
msgstr ""
#: ../rules/base.xml.in.h:499
-msgid "German (qwerty)"
+msgid "Lower Sorbian (qwertz)"
msgstr ""
#: ../rules/base.xml.in.h:500
+msgid "German (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:501
msgid "Russian (Germany, phonetic)"
msgstr ""
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:502 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
msgid "gr"
msgstr ""
-#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
msgid "Greek"
msgstr ""
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Greek (simple)"
msgstr ""
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Greek (extended)"
msgstr ""
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "Greek (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "Greek (polytonic)"
msgstr ""
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "hu"
msgstr ""
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "Hungarian"
msgstr ""
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Hungarian (standard)"
msgstr ""
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Hungarian (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "Hungarian (qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:518
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:518
+#: ../rules/base.xml.in.h:519
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:520
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:525
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr ""
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "is"
msgstr ""
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Icelandic"
msgstr ""
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Icelandic (Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Icelandic (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Icelandic (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Icelandic (Dvorak)"
msgstr ""
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:538 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
msgid "he"
msgstr ""
-#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
msgid "Hebrew"
msgstr ""
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hebrew (lyx)"
msgstr ""
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hebrew (phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hebrew (Biblical, Tiro)"
msgstr ""
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:544 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
msgid "it"
msgstr ""
-#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
msgid "Italian"
msgstr ""
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:547
msgid "Italian (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "Italian (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Italian (US keyboard with Italian letters)"
msgstr ""
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Georgian (Italy)"
msgstr ""
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Italian (IBM 142)"
msgstr ""
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:552 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
msgid "ja"
msgstr ""
-#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
msgid "Japanese"
msgstr ""
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:555
msgid "Japanese (Kana)"
msgstr ""
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:556
msgid "Japanese (Kana 86)"
msgstr ""
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:557
msgid "Japanese (OADG 109A)"
msgstr ""
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Japanese (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Japanese (Dvorak)"
msgstr ""
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:560
+#: ../rules/base.xml.in.h:561
msgid "ki"
msgstr ""
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:562
msgid "Kyrgyz"
msgstr ""
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:563
msgid "Kyrgyz (phonetic)"
msgstr ""
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "km"
msgstr ""
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Khmer (Cambodia)"
msgstr ""
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "kk"
msgstr ""
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Kazakh"
msgstr ""
-#: ../rules/base.xml.in.h:569
+#: ../rules/base.xml.in.h:570
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr ""
-#: ../rules/base.xml.in.h:570
+#: ../rules/base.xml.in.h:571
msgid "Kazakh (with Russian)"
msgstr ""
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "lo"
msgstr ""
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Lao"
msgstr ""
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Lao (STEA proposed standard layout)"
msgstr ""
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:576 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
msgid "es"
msgstr ""
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:578
msgid "Spanish (Latin American)"
msgstr ""
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Spanish (Latin American, include dead tilde)"
msgstr ""
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Spanish (Latin American, Sun dead keys)"
msgstr ""
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:582 ../rules/base.extras.xml.in.h:18
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
msgid "lt"
msgstr ""
-#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:19
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
msgid "Lithuanian"
msgstr ""
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:585
msgid "Lithuanian (standard)"
msgstr ""
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr ""
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Lithuanian (IBM LST 1205-92)"
msgstr ""
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Lithuanian (LEKP)"
msgstr ""
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Lithuanian (LEKPa)"
msgstr ""
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:590 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
msgid "lv"
msgstr ""
-#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
msgid "Latvian"
msgstr ""
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Latvian (apostrophe variant)"
msgstr ""
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:594
msgid "Latvian (tilde variant)"
msgstr ""
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:595
msgid "Latvian (F variant)"
msgstr ""
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Latvian (modern)"
msgstr ""
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr ""
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Latvian (adapted)"
msgstr ""
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:600
msgid "mi"
msgstr ""
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:601
msgid "Maori"
msgstr ""
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:51
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
msgid "sr"
msgstr ""
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:604
msgid "Montenegrin"
msgstr ""
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:605
msgid "Montenegrin (Cyrillic)"
msgstr ""
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:606
msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
msgstr ""
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:607
msgid "Montenegrin (Latin Unicode)"
msgstr ""
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:608
msgid "Montenegrin (Latin qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:609
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:610
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr ""
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:611
msgid "Montenegrin (Latin with guillemets)"
msgstr ""
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:613
msgid "mk"
msgstr ""
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:614
msgid "Macedonian"
msgstr ""
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:615
msgid "Macedonian (eliminate dead keys)"
msgstr ""
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:617
msgid "mt"
msgstr ""
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:618
msgid "Maltese"
msgstr ""
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:619
msgid "Maltese (with US layout)"
msgstr ""
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:620
+#: ../rules/base.xml.in.h:621
msgid "mn"
msgstr ""
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:622
msgid "Mongolian"
msgstr ""
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
msgid "no"
msgstr ""
-#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
msgid "Norwegian"
msgstr ""
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:626
msgid "Norwegian (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:627
msgid "Norwegian (Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:628
msgid "Northern Saami (Norway)"
msgstr ""
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:629
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:630
msgid "Norwegian (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:631
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:632
msgid "Norwegian (Colemak)"
msgstr ""
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:40
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
msgid "pl"
msgstr ""
-#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:41
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
msgid "Polish"
msgstr ""
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:636
msgid "Polish (legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:637
msgid "Polish (qwertz)"
msgstr ""
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:638
msgid "Polish (Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:639
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr ""
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:640
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr ""
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:641
msgid "Kashubian"
msgstr ""
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:642
msgid "Russian (Poland, phonetic Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:643
msgid "Polish (programmer Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
msgid "Portuguese"
msgstr ""
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:645
msgid "Portuguese (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:646
msgid "Portuguese (Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:647
msgid "Portuguese (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:648
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:649
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:650
msgid "Portuguese (Nativo)"
msgstr ""
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:651
msgid "Portuguese (Nativo for USA keyboards)"
msgstr ""
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:652
msgid "Esperanto (Portugal, Nativo)"
msgstr ""
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:45
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
msgid "ro"
msgstr ""
-#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
msgid "Romanian"
msgstr ""
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:656
msgid "Romanian (cedilla)"
msgstr ""
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:657
msgid "Romanian (standard)"
msgstr ""
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:658
msgid "Romanian (standard cedilla)"
msgstr ""
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:659
msgid "Romanian (WinKeys)"
msgstr ""
-#: ../rules/base.xml.in.h:659 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
msgid "Russian"
msgstr ""
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:661
msgid "Russian (phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:662
msgid "Russian (phonetic WinKeys)"
msgstr ""
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:663
msgid "Russian (typewriter)"
msgstr ""
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:664
msgid "Russian (legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:665
msgid "Russian (typewriter, legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:666
msgid "Tatar"
msgstr ""
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:667
msgid "Ossetian (legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:668
msgid "Ossetian (WinKeys)"
msgstr ""
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:669
msgid "Chuvash"
msgstr ""
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:670
msgid "Chuvash (Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:671
msgid "Udmurt"
msgstr ""
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:672
msgid "Komi"
msgstr ""
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:673
msgid "Yakut"
msgstr ""
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:674
msgid "Kalmyk"
msgstr ""
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:675
msgid "Russian (DOS)"
msgstr ""
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:677
msgid "Serbian (Russia)"
msgstr ""
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Bashkirian"
msgstr ""
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Mari"
msgstr ""
-#: ../rules/base.xml.in.h:678 ../rules/base.extras.xml.in.h:52
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
msgid "Serbian"
msgstr ""
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:681
msgid "Serbian (Cyrillic, Z and ZHE swapped)"
msgstr ""
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Serbian (Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Serbian (Latin Unicode)"
msgstr ""
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Serbian (Latin qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Serbian (Latin Unicode qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Serbian (Cyrillic with guillemets)"
msgstr ""
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Serbian (Latin with guillemets)"
msgstr ""
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Pannonian Rusyn (homophonic)"
msgstr ""
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "sl"
msgstr ""
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Slovenian"
msgstr ""
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Slovenian (use guillemets for quotes)"
msgstr ""
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr ""
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:693 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
msgid "sk"
msgstr ""
-#: ../rules/base.xml.in.h:694 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
msgid "Slovak"
msgstr ""
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Slovak (extended Backslash)"
msgstr ""
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Slovak (qwerty)"
msgstr ""
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Slovak (qwerty, extended Backslash)"
msgstr ""
-#: ../rules/base.xml.in.h:698 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
msgid "Spanish"
msgstr ""
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Spanish (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Spanish (include dead tilde)"
msgstr ""
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:703
msgid "Spanish (Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Spanish (Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr ""
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Catalan (Spain, with middle-dot L)"
msgstr ""
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Spanish (Macintosh)"
msgstr ""
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:707 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
msgid "sv"
msgstr ""
-#: ../rules/base.xml.in.h:708 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
msgid "Swedish"
msgstr ""
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Swedish (eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:712
msgid "Swedish (Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "Russian (Sweden, phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Northern Saami (Sweden)"
msgstr ""
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Swedish (Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:715
+#: ../rules/base.xml.in.h:717
msgid "Swedish (Svdvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:718
msgid "Swedish Sign Language"
msgstr ""
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:115
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
msgid "German (Switzerland)"
msgstr ""
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "German (Switzerland, legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "German (Switzerland, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "German (Switzerland, Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:723
msgid "French (Switzerland)"
msgstr ""
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "French (Switzerland, eliminate dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "French (Switzerland, Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "French (Switzerland, Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "German (Switzerland, Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Arabic (Syria)"
msgstr ""
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "syc"
msgstr ""
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Syriac"
msgstr ""
-#: ../rules/base.xml.in.h:730
+#: ../rules/base.xml.in.h:732
msgid "Syriac (phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:733
msgid "Kurdish (Syria, Latin Q)"
msgstr ""
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:734
msgid "Kurdish (Syria, F)"
msgstr ""
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr ""
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "tg"
msgstr ""
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Tajik"
msgstr ""
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Tajik (legacy)"
msgstr ""
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "si"
msgstr ""
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Sinhala (phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:743
msgid "Tamil (Sri Lanka, Unicode)"
msgstr ""
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr ""
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "th"
msgstr ""
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "Thai"
msgstr ""
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "Thai (TIS-820.2538)"
msgstr ""
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "Thai (Pattachote)"
msgstr ""
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:749 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
msgid "tr"
msgstr ""
-#: ../rules/base.xml.in.h:750 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
msgid "Turkish"
msgstr ""
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:753
msgid "Turkish (F)"
msgstr ""
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "Turkish (Alt-Q)"
msgstr ""
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Turkish (Sun dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Kurdish (Turkey, Latin Q)"
msgstr ""
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Turkey, F)"
msgstr ""
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr ""
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Turkish (international with dead keys)"
msgstr ""
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:759 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
msgid "crh"
msgstr ""
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Crimean Tatar (Turkish Q)"
msgstr ""
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Crimean Tatar (Turkish F)"
msgstr ""
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:764
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr ""
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "Taiwanese"
msgstr ""
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Taiwanese (indigenous)"
msgstr ""
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "xsy"
msgstr ""
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:769
msgid "Saisiyat (Taiwan)"
msgstr ""
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:769 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
msgid "uk"
msgstr ""
-#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
msgid "Ukrainian"
msgstr ""
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:773
msgid "Ukrainian (phonetic)"
msgstr ""
-#: ../rules/base.xml.in.h:772
+#: ../rules/base.xml.in.h:774
msgid "Ukrainian (typewriter)"
msgstr ""
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:775
msgid "Ukrainian (WinKeys)"
msgstr ""
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:776
msgid "Ukrainian (legacy)"
msgstr ""
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:777
msgid "Ukrainian (standard RSTU)"
msgstr ""
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:778
msgid "Russian (Ukraine, standard RSTU)"
msgstr ""
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:779
msgid "Ukrainian (homophonic)"
msgstr ""
-#: ../rules/base.xml.in.h:778 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
msgid "English (UK)"
msgstr ""
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:781
msgid "English (UK, extended WinKeys)"
msgstr ""
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:782
msgid "English (UK, international with dead keys)"
msgstr ""
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:783
msgid "English (UK, Dvorak)"
msgstr ""
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:784
msgid "English (UK, Dvorak with UK punctuation)"
msgstr ""
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:785
msgid "English (UK, Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:786
msgid "English (UK, Macintosh international)"
msgstr ""
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:787
msgid "English (UK, Colemak)"
msgstr ""
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:788
msgid "Uzbek"
msgstr ""
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:789
msgid "Uzbek (Latin)"
msgstr ""
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:791
msgid "vi"
msgstr ""
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:792
msgid "Vietnamese"
msgstr ""
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
msgid "ko"
msgstr ""
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
msgid "Korean"
msgstr ""
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:796
msgid "Korean (101/104 key compatible)"
msgstr ""
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:797
msgid "Japanese (PC-98xx Series)"
msgstr ""
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:799
msgid "ie"
msgstr ""
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:800
msgid "Irish"
msgstr ""
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:801
msgid "CloGaelach"
msgstr ""
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:802
msgid "Irish (UnicodeExpert)"
msgstr ""
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:803
msgid "Ogham"
msgstr ""
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:804
msgid "Ogham (IS434)"
msgstr ""
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:805
msgid "Urdu (Pakistan)"
msgstr ""
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:806
msgid "Urdu (Pakistan, CRULP)"
msgstr ""
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:807
msgid "Urdu (Pakistan, NLA)"
msgstr ""
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:808
msgid "Arabic (Pakistan)"
msgstr ""
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:810
msgid "sd"
msgstr ""
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:811
msgid "Sindhi"
msgstr ""
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:813
msgid "dv"
msgstr ""
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:814
msgid "Dhivehi"
msgstr ""
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:815
msgid "English (South Africa)"
msgstr ""
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:815
+#: ../rules/base.xml.in.h:817
msgid "eo"
msgstr ""
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:818
msgid "Esperanto"
msgstr ""
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:819
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr ""
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:821
msgid "ne"
msgstr ""
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:822
msgid "Nepali"
msgstr ""
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:823
msgid "English (Nigeria)"
msgstr ""
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:825
msgid "ig"
msgstr ""
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:826
msgid "Igbo"
msgstr ""
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:828
msgid "yo"
msgstr ""
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:829
msgid "Yoruba"
msgstr ""
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:831
msgid "am"
msgstr ""
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:832
msgid "Amharic"
msgstr ""
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:834
msgid "wo"
msgstr ""
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:835
msgid "Wolof"
msgstr ""
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:837
msgid "brl"
msgstr ""
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:838
msgid "Braille"
msgstr ""
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:839
msgid "Braille (left hand)"
msgstr ""
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:840
msgid "Braille (right hand)"
msgstr ""
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:842
msgid "tk"
msgstr ""
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:843
msgid "Turkmen"
msgstr ""
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:844
msgid "Turkmen (Alt-Q)"
msgstr ""
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:846
msgid "bm"
msgstr ""
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:847
msgid "Bambara"
msgstr ""
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:848
msgid "French (Mali, alternative)"
msgstr ""
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:849
msgid "English (Mali, US Macintosh)"
msgstr ""
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:850
msgid "English (Mali, US international)"
msgstr ""
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:852
msgid "sw"
msgstr ""
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:853
msgid "Swahili (Tanzania)"
msgstr ""
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:854
msgid "Swahili (Kenya)"
msgstr ""
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:855
msgid "Kikuyu"
msgstr ""
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:857
msgid "tn"
msgstr ""
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:858
msgid "Tswana"
msgstr ""
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:860
msgid "ph"
msgstr ""
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:861
msgid "Filipino"
msgstr ""
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:862
msgid "Filipino (QWERTY Baybayin)"
msgstr ""
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:863
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:864
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr ""
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:865
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:866
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr ""
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:867
msgid "Filipino (Colemak Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:868
msgid "Filipino (Colemak Baybayin)"
msgstr ""
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:869
msgid "Filipino (Dvorak Latin)"
msgstr ""
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:870
msgid "Filipino (Dvorak Baybayin)"
msgstr ""
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:871
msgid "md"
msgstr ""
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:872
msgid "Moldavian"
msgstr ""
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:873
msgid "gag"
msgstr ""
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:874
msgid "Moldavian (Gagauz)"
msgstr ""
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:875
msgid "Key(s) to change layout"
msgstr ""
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:876
msgid "Right Alt (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:877
msgid "Left Alt (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:878
msgid "Left Win (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:879
msgid "Right Win (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:880
msgid "Any Win key (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:881
msgid ""
"Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr ""
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:882
msgid "Right Ctrl (while pressed)"
msgstr ""
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:883
msgid "Right Alt"
msgstr ""
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:884
msgid "Left Alt"
msgstr ""
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:885
msgid "Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:886
msgid "Shift+Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:887
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr ""
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:888
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr ""
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:889
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr ""
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:890
msgid "Alt+Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:891
msgid "Both Shift keys together"
msgstr ""
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:892
msgid "Both Alt keys together"
msgstr ""
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:893
msgid "Both Ctrl keys together"
msgstr ""
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:894
msgid "Ctrl+Shift"
msgstr ""
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:895
msgid "Left Ctrl+Left Shift"
msgstr ""
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:896
msgid "Right Ctrl+Right Shift"
msgstr ""
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:897
msgid "Alt+Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:898
msgid "Alt+Shift"
msgstr ""
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:899
msgid "Left Alt+Left Shift"
msgstr ""
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:900
msgid "Alt+Space"
msgstr ""
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:901
msgid "Menu"
msgstr ""
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:902
msgid "Left Win"
msgstr ""
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:903
msgid "Right Win"
msgstr ""
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:904
msgid "Left Shift"
msgstr ""
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:905
msgid "Right Shift"
msgstr ""
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:906
msgid "Left Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:908
msgid "Scroll Lock"
msgstr ""
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:909
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr ""
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:910
msgid "Key to choose 3rd level"
msgstr ""
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:911
msgid "Any Win key"
msgstr ""
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:912
msgid "Any Alt key"
msgstr ""
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:913
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr ""
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:914
msgid "Right Alt key never chooses 3rd level"
msgstr ""
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:915
msgid "Enter on keypad"
msgstr ""
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:916
msgid "Backslash"
msgstr ""
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:917
msgid "&lt;Less/Greater&gt;"
msgstr ""
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:918
msgid ""
"Caps Lock chooses 3rd level, acts as onetime lock when pressed together with "
"another 3rd-level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:919
msgid ""
"Backslash chooses 3rd level, acts as onetime lock when pressed together with "
"another 3rd-level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:920
msgid ""
"&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed "
"together with another 3rd-level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:921
msgid "Ctrl key position"
msgstr ""
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:922
msgid "Caps Lock as Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:923
msgid "Left Ctrl as Meta"
msgstr ""
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:924
msgid "Swap Ctrl and Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:925
msgid "At left of 'A'"
msgstr ""
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:926
msgid "At bottom left"
msgstr ""
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:927
msgid "Right Ctrl as Right Alt"
msgstr ""
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:928
msgid "Menu as Right Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:929
msgid "Right Alt as Right Ctrl"
msgstr ""
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:930
msgid "Use keyboard LED to show alternative layout"
msgstr ""
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:931
msgid "Num Lock"
msgstr ""
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:932
msgid "Numeric keypad layout selection"
msgstr ""
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:933
msgid "Legacy"
msgstr ""
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:934
msgid "Unicode additions (arrows and math operators)"
msgstr ""
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:935
msgid ""
"Unicode additions (arrows and math operators). Math operators on default "
"level"
msgstr ""
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:936
msgid "Legacy Wang 724"
msgstr ""
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:937
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr ""
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:938
msgid ""
"Wang 724 keypad with Unicode additions (arrows and math operators). Math "
"operators on default level"
msgstr ""
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:939
msgid "Hexadecimal"
msgstr ""
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:940
msgid "ATM/phone-style"
msgstr ""
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:941
msgid "Numeric keypad delete key behaviour"
msgstr ""
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:942
msgid "Legacy key with dot"
msgstr ""
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:944
msgid "Legacy key with comma"
msgstr ""
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:945
msgid "Four-level key with dot"
msgstr ""
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:946
msgid "Four-level key with dot, latin-9 restriction"
msgstr ""
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:947
msgid "Four-level key with comma"
msgstr ""
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:948
msgid "Four-level key with momayyez"
msgstr ""
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:951
msgid "Four-level key with abstract separators"
msgstr ""
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:952
msgid "Semi-colon on third level"
msgstr ""
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:953
msgid "Caps Lock key behavior"
msgstr ""
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:954
msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:955
msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:956
msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:957
msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:958
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr ""
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:959
msgid "Make Caps Lock an additional Num Lock"
msgstr ""
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:960
msgid "Swap ESC and Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:961
msgid "Make Caps Lock an additional ESC"
msgstr ""
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:962
msgid "Make Caps Lock an additional Backspace"
msgstr ""
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:963
msgid "Make Caps Lock an additional Super"
msgstr ""
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:964
msgid "Make Caps Lock an additional Hyper"
msgstr ""
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:965
msgid "Caps Lock toggles Shift so all keys are affected"
msgstr ""
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:966
msgid "Caps Lock is disabled"
msgstr ""
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:967
msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
msgstr ""
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:968
msgid "Alt/Win key behavior"
msgstr ""
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:969
msgid "Add the standard behavior to Menu key"
msgstr ""
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:970
msgid "Alt and Meta are on Alt keys"
msgstr ""
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:972
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr ""
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:973
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr ""
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Meta is mapped to Win keys"
msgstr ""
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Meta is mapped to Left Win"
msgstr ""
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Hyper is mapped to Win-keys"
msgstr ""
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr ""
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Alt is swapped with Win"
msgstr ""
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:979
msgid "Compose key position"
msgstr ""
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr ""
+
+#: ../rules/base.xml.in.h:987
msgid "Pause"
msgstr ""
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:988
msgid "PrtSc"
msgstr ""
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:989
msgid "Miscellaneous compatibility options"
msgstr ""
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:990
msgid "Default numeric keypad keys"
msgstr ""
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:991
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr ""
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:992
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr ""
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:993
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr ""
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:994
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr ""
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:995
msgid ""
"Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num "
"Lock)"
msgstr ""
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:996
msgid "Shift cancels Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:997
msgid "Enable extra typographic characters"
msgstr ""
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:998
msgid "Both Shift-Keys together toggle Caps Lock"
msgstr ""
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:999
msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
msgstr ""
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:1000
msgid "Both Shift-Keys together toggle ShiftLock"
msgstr ""
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:1001
msgid "Toggle PointerKeys with Shift + NumLock."
msgstr ""
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:1002
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr ""
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:1003
msgid "Adding currency signs to certain keys"
msgstr ""
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:1004
msgid "Euro on E"
msgstr ""
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1005
msgid "Euro on 2"
msgstr ""
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1006
msgid "Euro on 4"
msgstr ""
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1007
msgid "Euro on 5"
msgstr ""
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1008
msgid "Rupee on 4"
msgstr ""
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1009
msgid "Key to choose 5th level"
msgstr ""
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1010
msgid ""
"&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with "
"another 5th-level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1011
msgid ""
"Right Alt chooses 5th level, locks when pressed together with another 5th-"
"level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1012
msgid ""
"Left Win chooses 5th level, locks when pressed together with another 5th-"
"level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1013
msgid ""
"Right Win chooses 5th level, locks when pressed together with another 5th-"
"level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1014
msgid "Using space key to input non-breakable space character"
msgstr ""
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1015
msgid "Usual space at any level"
msgstr ""
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1016
msgid "Non-breakable space character at second level"
msgstr ""
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1017
msgid "Non-breakable space character at third level"
msgstr ""
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1018
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1019
msgid ""
"Non-breakable space character at third level, thin non-breakable space "
"character at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1020
msgid "Non-breakable space character at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1021
msgid ""
"Non-breakable space character at fourth level, thin non-breakable space "
"character at sixth level"
msgstr ""
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1022
msgid ""
"Non-breakable space character at fourth level, thin non-breakable space "
"character at sixth level (via Ctrl+Shift)"
msgstr ""
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1023
msgid "Zero-width non-joiner character at second level"
msgstr ""
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1024
msgid ""
"Zero-width non-joiner character at second level, zero-width joiner character "
"at third level"
msgstr ""
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1025
msgid ""
"Zero-width non-joiner character at second level, zero-width joiner character "
"at third level, non-breakable space character at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1026
msgid ""
"Zero-width non-joiner character at second level, non-breakable space "
"character at third level"
msgstr ""
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1027
msgid ""
"Zero-width non-joiner character at second level, non-breakable space "
"character at third level, nothing at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1028
msgid ""
"Zero-width non-joiner character at second level, non-breakable space "
"character at third level, zero-width joiner at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1029
msgid ""
"Zero-width non-joiner character at second level, non-breakable space "
"character at third level, thin non-breakable space at fourth level"
msgstr ""
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1030
msgid ""
"Zero-width non-joiner character at third level, zero-width joiner at fourth "
"level"
msgstr ""
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1031
msgid "Japanese keyboard options"
msgstr ""
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1032
msgid "Kana Lock key is locking"
msgstr ""
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1033
msgid "NICOLA-F style Backspace"
msgstr ""
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1034
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr ""
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1035
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr ""
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1036
msgid "To the corresponding key in a Qwerty keyboard."
msgstr ""
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1037
msgid "To the corresponding key in a Dvorak keyboard."
msgstr ""
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1038
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr ""
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1039
msgid "Sun Key compatibility"
msgstr ""
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1040
msgid "Key sequence to kill the X server"
msgstr ""
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1041
msgid "Control + Alt + Backspace"
msgstr ""
diff --git a/xorg-server/xkeyboard-config/po/zh_TW.po b/xorg-server/xkeyboard-config/po/zh_TW.po
index 383e01e3f..60e30c15b 100644
--- a/xorg-server/xkeyboard-config/po/zh_TW.po
+++ b/xorg-server/xkeyboard-config/po/zh_TW.po
@@ -1,1671 +1,4132 @@
-# Traditional Chinese Messages for xkeyboard-config
+# Traditional Chinese Messages for xkeyboard-config.
# Copyright (C) 2003, 05 Free Software Foundation, Inc.
-# Funda Wang <fundawang@linux.net.cn>, 2003
-# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2005
+# This file is distributed under the same license as the xkeyboard-config package.
+# Funda Wang <fundawang@linux.net.cn>, 2003.
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2005, 2013.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 0.6\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-08-14 00:39+0100\n"
-"PO-Revision-Date: 2005-09-19 17:19+0800\n"
-"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Project-Id-Version: xkeyboard-config 2.8.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2013-05-15 23:14+0100\n"
+"PO-Revision-Date: 2013-05-24 23:09+0800\n"
+"Last-Translator: Wei-Lun Chao <bluebat@member.fsf.org>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../rules/base.xml.in.h:1
-msgid "\"Standard\""
-msgstr "「標準」"
+msgid "Generic 101-key PC"
+msgstr "一般 101鍵 鍵盤"
#: ../rules/base.xml.in.h:2
-msgid "(F)"
-msgstr "(F)"
+msgid "Generic 102-key (Intl) PC"
+msgstr "一般 102鍵 (國際) 鍵盤"
#: ../rules/base.xml.in.h:3
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/逗點/無用按鍵"
+msgid "Generic 104-key PC"
+msgstr "一般 104鍵 鍵盤"
#: ../rules/base.xml.in.h:4
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/逗點/除去無用按鍵"
+msgid "Generic 105-key (Intl) PC"
+msgstr "一般 105 鍵 (國際) 鍵盤"
#: ../rules/base.xml.in.h:5
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/句點/無用按鍵"
+msgid "Dell 101-key PC"
+msgstr "戴爾 101 鍵 鍵盤"
#: ../rules/base.xml.in.h:6
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/句點/除去無用按鍵"
+msgid "Dell Latitude series laptop"
+msgstr "戴爾 Latitude 系列 laptop"
#: ../rules/base.xml.in.h:7
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/逗點/無用按鍵"
+msgid "Dell Precision M65"
+msgstr "戴爾 Precision M65"
#: ../rules/base.xml.in.h:8
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwerty/逗點/除去無用按鍵"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:9
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/句點/無用按鍵"
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
#: ../rules/base.xml.in.h:10
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/句點/除去無用按鍵"
+msgid "Microsoft Natural"
+msgstr "微軟自然鍵盤"
#: ../rules/base.xml.in.h:11
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/逗點/無用按鍵"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate Omnikey 101"
#: ../rules/base.xml.in.h:12
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/逗點/除去無用按鍵"
+msgid "Winbook Model XP5"
+msgstr "Winbook XP5 鍵盤"
#: ../rules/base.xml.in.h:13
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/句點/無用按鍵"
+msgid "PC-98xx Series"
+msgstr "PC-98xx 系列"
#: ../rules/base.xml.in.h:14
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/句點/除去無用按鍵"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:15
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/逗點/無用按鍵"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:16
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/逗點/除去無用按鍵"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4 Tech 無線桌面 RFKB-23"
#: ../rules/base.xml.in.h:17
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/句點/無用按鍵"
+msgid "Acer AirKey V"
+msgstr "宏碁 AirKey V"
#: ../rules/base.xml.in.h:18
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/句點/除去無用按鍵"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 無線網際鍵盤"
#: ../rules/base.xml.in.h:19
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Advance Scorpius KI"
+msgstr "擴充 Scorpius KI"
#: ../rules/base.xml.in.h:20
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Brother Internet Keyboard"
+msgstr "Brother 網際鍵盤"
#: ../rules/base.xml.in.h:21
-msgid "ACPI Standard"
-msgstr "ACPI 標準"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF 多媒體"
#: ../rules/base.xml.in.h:22
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:23
-msgid "Acer TravelMate 800"
-msgstr "Acer TravelMate 800"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:24
-msgid "Add the EuroSign to the 2 key."
-msgstr "將歐元符號加到 2 鍵之上"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:25
-msgid "Add the EuroSign to the 5 key."
-msgstr "將歐元符號加到 5 鍵之上"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:26
-msgid "Add the EuroSign to the E key."
-msgstr "將歐元符號加到 E 鍵之上"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:27
-msgid "Add the standard behavior to Menu key."
-msgstr "增加標準功能至 Menu 鍵。"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:28
-msgid "Adding the EuroSign to certain keys"
-msgstr "將歐元符號加到特定鍵之上"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:29
-msgid "Advance Scorpius KI"
-msgstr "進階 Scorpius KI"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U 迷你無線網際網路和遊戲"
#: ../rules/base.xml.in.h:30
-msgid "Alb"
-msgstr "Alb"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:31
-msgid "Albania"
-msgstr "阿爾巴尼亞"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:32
-msgid "Alt and Meta are on the Alt keys (default)."
-msgstr "Alt 與 Meta 配置於 Alt 鍵(預設值)。"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (替代選項)"
#: ../rules/base.xml.in.h:33
-msgid "Alt is mapped to the right Win-key and Super to Menu."
-msgstr "Alt 配置到右邊的 Win-key 並優先於 Menu。"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:34
-msgid "Alt+Control changes group."
-msgstr "以 Alt+Control 改變群組。"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion 專家"
#: ../rules/base.xml.in.h:35
-msgid "Alt+Shift changes group."
-msgstr "以 Alt+Shift 改變群組。"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:36
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony 網際網路鍵盤"
#: ../rules/base.xml.in.h:37
-msgid "Alt/Win key behavior"
-msgstr "Alt/Win 鍵功能"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:38
-msgid "Alternative"
-msgstr "替代選擇"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:39
-msgid "Alternative international (former us_intl)"
-msgstr "替代國際化 (之前為 us_intl)"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:40
-msgid "Alternative, Sun dead keys"
-msgstr "替代選擇,Sun 的無用按鍵"
+msgid "Compaq Easy Access Keyboard"
+msgstr "康柏輕鬆存取鍵盤"
#: ../rules/base.xml.in.h:41
-msgid "Alternative, eliminate dead keys"
-msgstr "替代選擇,除去無用按鍵"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "康柏網際鍵盤(7鍵)"
#: ../rules/base.xml.in.h:42
-msgid "Apostrophe (') variant"
-msgstr "撇號 (') 變型"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "康柏網際鍵盤(13鍵)"
#: ../rules/base.xml.in.h:43
-msgid "Ara"
-msgstr "Ara"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "康柏網際鍵盤(18鍵)"
#: ../rules/base.xml.in.h:44
-msgid "Arabic"
-msgstr "阿拉伯文"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:45
-msgid "Arm"
-msgstr "Arm"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "可攜式/筆記型 康柏 (如 Armada) 可攜式鍵盤"
#: ../rules/base.xml.in.h:46
-msgid "Armenia"
-msgstr "亞美尼亞"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "可攜式/筆記型 康柏 (如 Presario) 網際鍵盤"
#: ../rules/base.xml.in.h:47
-msgid "Aze"
-msgstr "Aze"
+msgid "Compaq iPaq Keyboard"
+msgstr "康柏 iPaq 鍵盤"
#: ../rules/base.xml.in.h:48
-msgid "Azerbaijan"
-msgstr "亞塞拜然"
+msgid "Dell"
+msgstr "戴爾"
#: ../rules/base.xml.in.h:49
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 無線網際鍵盤"
+msgid "Dell SK-8125"
+msgstr "戴爾 SK-8125"
#: ../rules/base.xml.in.h:50
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Dell SK-8135"
+msgstr "戴爾 SK-8135"
#: ../rules/base.xml.in.h:51
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF 多媒體"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "戴爾 USB 多媒體鍵盤"
#: ../rules/base.xml.in.h:52
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "戴爾 Laptop/notebook Inspiron 6 xxx/8 xxx"
#: ../rules/base.xml.in.h:53
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "戴爾 Laptop/notebook Precision M 系列"
#: ../rules/base.xml.in.h:54
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa 無線桌面鍵盤"
#: ../rules/base.xml.in.h:55
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801 / 9802 系列"
#: ../rules/base.xml.in.h:56
-msgid "Ban"
-msgstr "Ban"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:57
-msgid "Bangladesh"
-msgstr "孟加拉"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:58
-msgid "Bel"
-msgstr "Bel"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "富士通-西門子 Computers AMILO laptop"
#: ../rules/base.xml.in.h:59
-msgid "Belarus"
-msgstr "白俄"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "昆盈 Comfy KB-16M / 昆盈 MM 鍵盤 KWD-910"
#: ../rules/base.xml.in.h:60
-msgid "Belgium"
-msgstr "比利時"
+msgid "Genius Comfy KB-12e"
+msgstr "昆盈 Comfy KB-12e"
#: ../rules/base.xml.in.h:61
-msgid "Bengali"
-msgstr "孟加拉文"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "昆盈 Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:62
-msgid "Bengali Probhat"
-msgstr "孟加拉 Probhat 文"
+msgid "Genius KB-19e NB"
+msgstr "昆盈 KB-19e NB"
#: ../rules/base.xml.in.h:63
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Genius KKB-2050HS"
+msgstr "昆盈 KKB-2050HS"
#: ../rules/base.xml.in.h:64
-msgid "Bhu"
-msgstr "Bhu"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:65
-msgid "Bhutan"
-msgstr "不丹"
+msgid "HTC Dream"
+msgstr "宏達電夢幻"
#: ../rules/base.xml.in.h:66
-msgid "Bih"
-msgstr "Bih"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:67
-msgid "Blr"
-msgstr "Blr"
+msgid "Logitech Generic Keyboard"
+msgstr "羅技通用鍵盤"
#: ../rules/base.xml.in.h:68
-msgid "Bosnia and Herzegovina"
-msgstr "波士尼亞及赫塞哥維那"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "羅技 G15 extra keys via G15daemon"
#: ../rules/base.xml.in.h:69
-msgid "Both Alt keys together change group."
-msgstr "同時以兩個 Alt 鍵改變群組。"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "惠普網際鍵盤"
#: ../rules/base.xml.in.h:70
-msgid "Both Ctrl keys together change group."
-msgstr "同時以兩個 Ctrl 鍵改變群組。"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "惠普 SK-250x 多媒體鍵盤"
#: ../rules/base.xml.in.h:71
-msgid "Both Shift keys together change group."
-msgstr "同時以兩個 Shift 鍵改變群組。"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "惠普 Omnibook XE3 GC"
#: ../rules/base.xml.in.h:72
-msgid "Both Win-keys switch group while pressed."
-msgstr "當按下兩個 Win-key 時切換群組。"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "惠普 Omnibook XE3 CF"
#: ../rules/base.xml.in.h:73
-msgid "Bra"
-msgstr "Bra"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "惠普 Omnibook XT1000"
#: ../rules/base.xml.in.h:74
-msgid "Brazil"
-msgstr "巴西"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "惠普 Pavilion dv5"
#: ../rules/base.xml.in.h:75
-msgid "Brazilian ABNT2"
-msgstr "巴西 ABNT2 鍵盤"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "惠普 Pavilion ZT11xx"
#: ../rules/base.xml.in.h:76
-msgid "Brother Internet Keyboard"
-msgstr "Brother 網際鍵盤"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "惠普 Omnibook 500 FA"
#: ../rules/base.xml.in.h:77
-msgid "Bulgaria"
-msgstr "保加利亞"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "惠普 Omnibook 5xx"
#: ../rules/base.xml.in.h:78
-msgid "Can"
-msgstr "Can"
+msgid "Hewlett-Packard nx9020"
+msgstr "惠普 nx9020"
#: ../rules/base.xml.in.h:79
-msgid "Canada"
-msgstr "加拿大"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "惠普 Omnibook 6000/6100"
#: ../rules/base.xml.in.h:80
-msgid "CapsLock LED shows alternative group."
-msgstr "以 CapsLock 燈號來顯示替代的群組。"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell 歐洲鍵盤"
#: ../rules/base.xml.in.h:81
-msgid "CapsLock acts as Shift with locking. Shift cancels CapsLock."
-msgstr "Caps Lock 充當鎖定的 Shift。可以按 Shift 取消之。"
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "惠普 迷你 110 筆記型電腦"
#: ../rules/base.xml.in.h:82
-msgid "CapsLock acts as Shift with locking. Shift doesn't cancel CapsLock."
-msgstr "Caps Lock 充當鎖定的 Shift。無法以按 Shift 取消之。"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:83
-msgid "CapsLock just locks the Shift modifier."
-msgstr "Caps Lock 只用於鎖定 Shift 變更鍵。"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:84
-msgid "CapsLock key behavior"
-msgstr "Caps Lock 鍵功能"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:85
-msgid "CapsLock key changes group."
-msgstr "以 Caps Lock 鍵改變群組"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:86
-msgid "CapsLock toggles Shift so all keys are affected."
-msgstr "以 Caps Lock 切換 Shift 狀態而影響到所有按鍵。"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:87
-msgid "CapsLock toggles normal capitalization of alphabetic characters."
-msgstr "以 Caps Lock 切換正常的字母字元大寫功能。"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:88
-msgid "CapsLock uses internal capitalization. Shift cancels CapsLock."
-msgstr "Caps Lock 使用內建的大寫功能。可以 Shift 取消之。"
+msgid "Logitech Access Keyboard"
+msgstr "羅技 Access 鍵盤"
#: ../rules/base.xml.in.h:89
-msgid "CapsLock uses internal capitalization. Shift doesn't cancel CapsLock."
-msgstr "Caps Lock 使用內建的大寫功能。無法以 Shift 取消之。"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "羅技 Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:90
-msgid "Che"
-msgstr "Che"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "羅技 網際網路 350 鍵盤"
#: ../rules/base.xml.in.h:91
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Logitech Media Elite Keyboard"
+msgstr "羅技 媒體 Elite 鍵盤"
#: ../rules/base.xml.in.h:92
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (替代選項)"
+msgid "Logitech Cordless Desktop"
+msgstr "羅技無影手"
#: ../rules/base.xml.in.h:93
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "羅技網際無影手"
#: ../rules/base.xml.in.h:94
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony 網際網路鍵盤"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "羅技無影手桌面導航器"
#: ../rules/base.xml.in.h:95
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "羅技無影手光學組合"
#: ../rules/base.xml.in.h:96
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "羅技 Cordless Desktop (替代選項)"
#: ../rules/base.xml.in.h:97
-msgid "Compaq Easy Access Keyboard"
-msgstr "康柏輕鬆存取鍵盤"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "羅技 Cordless 桌面 Pro (替代選項 2)"
#: ../rules/base.xml.in.h:98
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "康柏網際鍵盤(13鍵)"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "羅技極光無影手組合/桌面導航器"
#: ../rules/base.xml.in.h:99
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "康柏網際鍵盤(18鍵)"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "羅技 iTouch 無影手鍵盤(型號 Y-RB6)"
#: ../rules/base.xml.in.h:100
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "康柏網際鍵盤(7鍵)"
+msgid "Logitech Internet Keyboard"
+msgstr "羅技網際鍵盤"
#: ../rules/base.xml.in.h:101
-msgid "Compaq iPaq Keyboard"
-msgstr "康柏 iPaq 鍵盤"
+msgid "Logitech iTouch"
+msgstr "羅技 iTouch"
#: ../rules/base.xml.in.h:102
-msgid "Compose key position"
-msgstr "Compose 鍵的位置"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "羅技網際導航鍵盤"
#: ../rules/base.xml.in.h:103
-msgid "Control key at bottom left"
-msgstr "Control 鍵在左下方"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "羅技 Cordless Desktop EX110"
#: ../rules/base.xml.in.h:104
-msgid "Control key at left of 'A'"
-msgstr "Control 鍵在“A”的左邊"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "羅技 iTouch 網際網路導航鍵盤 SE"
#: ../rules/base.xml.in.h:105
-msgid "Control key position"
-msgstr "Control 鍵的位置"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "羅技 iTouch 網際網路導航鍵盤 SE (USB)"
#: ../rules/base.xml.in.h:106
-msgid "Control+Shift changes group."
-msgstr "以 Control+Shift 鍵改變群組。"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "羅技銀幻手鍵盤"
#: ../rules/base.xml.in.h:107
-msgid "Croatia"
-msgstr "克羅埃西亞"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "羅技 Ultra-X Cordless 媒體桌面鍵盤"
#: ../rules/base.xml.in.h:108
-msgid "Cyrillic"
-msgstr "斯拉夫文"
+msgid "Logitech diNovo Keyboard"
+msgstr "羅技 diNovo 鍵盤"
#: ../rules/base.xml.in.h:109
-msgid "Cze"
-msgstr "Cze"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "羅技 diNovo Edge 鍵盤"
#: ../rules/base.xml.in.h:110
-msgid "Czechia"
-msgstr "捷克文"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:111
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access 鍵盤"
#: ../rules/base.xml.in.h:112
-msgid "Dead acute"
-msgstr "Dead acute"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:113
-msgid "Dead grave acute"
-msgstr "Dead grave acute"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "微軟自然 Wireless Ergonomic 鍵盤 4000"
#: ../rules/base.xml.in.h:114
-msgid "Dell"
-msgstr "戴爾"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "微軟自然 Wireless Ergonomic 鍵盤 7000"
#: ../rules/base.xml.in.h:115
-msgid "Dell 101-key PC"
-msgstr "戴爾 101 鍵 鍵盤"
+msgid "Microsoft Internet Keyboard"
+msgstr "微軟網際鍵盤"
#: ../rules/base.xml.in.h:116
-msgid "Denmark"
-msgstr "丹麥"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "微軟自然鍵盤增強版 / 微軟網際鍵盤增強版"
#: ../rules/base.xml.in.h:117
-msgid "Deu"
-msgstr "Deu"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "微軟自然鍵盤增強版 USB / 微軟網際鍵盤增強版"
#: ../rules/base.xml.in.h:118
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa 無線桌面鍵盤"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "微軟自然鍵盤增強版 OEM"
#: ../rules/base.xml.in.h:119
-msgid "Dhivehi"
-msgstr "迪貝喜文"
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 網際網路鍵盤"
#: ../rules/base.xml.in.h:120
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802 系列"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "微軟網際鍵盤增強版,瑞典"
#: ../rules/base.xml.in.h:121
-msgid "Div"
-msgstr "Div"
+msgid "Microsoft Office Keyboard"
+msgstr "微軟辦公室鍵盤"
#: ../rules/base.xml.in.h:122
-msgid "Dnk"
-msgstr "Dnk"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "微軟無線多媒體鍵盤 1.0A"
#: ../rules/base.xml.in.h:123
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "微軟 Natural Keyboard Elite"
#: ../rules/base.xml.in.h:124
-msgid "Dvorak, Polish quotes on key \"1/!\""
-msgstr "Dvorak,波蘭式引號置於「1/!」按鍵"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "微軟舒適曲線鍵盤 2000"
#: ../rules/base.xml.in.h:125
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak,波蘭式引號置於「1/!」按鍵"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/網際網路鍵盤"
#: ../rules/base.xml.in.h:126
-msgid "Eliminate dead keys"
-msgstr "除去無用按鍵"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:127
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:128
-msgid "Esp"
-msgstr "Esp"
+msgid "Samsung SDM 4500P"
+msgstr "三星 SDM 4500P"
#: ../rules/base.xml.in.h:129
-msgid "Est"
-msgstr "Est"
+msgid "Samsung SDM 4510P"
+msgstr "三星 SDM 4510P"
#: ../rules/base.xml.in.h:130
-msgid "Estonia"
-msgstr "愛沙尼亞"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:131
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:132
-msgid "Extended"
-msgstr "延伸的"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:133
-msgid "Extended Backslash"
-msgstr "延伸的反斜線"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:134
-msgid "F-letter (F) variant"
-msgstr "F 字母變化"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:135
-msgid "Fao"
-msgstr "Fao"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power 多媒體鍵盤"
#: ../rules/base.xml.in.h:136
-msgid "Faroe Islands"
-msgstr "法羅群島"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:137
-msgid "Fin"
-msgstr "Fin"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:138
-msgid "Finland"
-msgstr "芬蘭"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (平板電腦)"
#: ../rules/base.xml.in.h:139
-msgid "Fra"
-msgstr "Fra"
+msgid "Toshiba Satellite S3000"
+msgstr "東芝 Satellite S3000"
#: ../rules/base.xml.in.h:140
-msgid "France"
-msgstr "法國"
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust 無線經典鍵盤"
#: ../rules/base.xml.in.h:141
-msgid "French"
-msgstr "法文"
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access 鍵盤"
#: ../rules/base.xml.in.h:142
-msgid "French (legacy)"
-msgstr "法文 (傳統)"
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:143
-msgid "French Dvorak"
-msgstr "法文 Dvorak"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:144
-msgid "French, Sun dead keys"
-msgstr "法文,Sun 的無用按鍵"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:145
-msgid "French, eliminate dead keys"
-msgstr "法文,除去無用按鍵"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
#: ../rules/base.xml.in.h:146
-msgid "GBr"
-msgstr "GBr"
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU 模式)"
#: ../rules/base.xml.in.h:147
-msgid "Generic 101-key PC"
-msgstr "一般 101鍵 鍵盤"
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP 模式)"
#: ../rules/base.xml.in.h:148
-msgid "Generic 102-key (Intl) PC"
-msgstr "一般 102鍵 (國際) 鍵盤"
+msgid "Yahoo! Internet Keyboard"
+msgstr "雅虎網際鍵盤"
#: ../rules/base.xml.in.h:149
-msgid "Generic 104-key PC"
-msgstr "一般 104鍵 鍵盤"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:150
-msgid "Generic 105-key (Intl) PC"
-msgstr "一般 105 鍵 (國際) 鍵盤"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:151
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "昆盈 Comfy KB-16M / 昆盈 MM 鍵盤 KWD-910"
+msgid "Macintosh"
+msgstr "麥金塔"
#: ../rules/base.xml.in.h:152
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "昆盈 Comfy KB-21e-Scroll"
+msgid "Macintosh Old"
+msgstr "舊式麥金塔"
#: ../rules/base.xml.in.h:153
-msgid "Geo"
-msgstr "Geo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "快樂黑作鍵盤 for Mac"
#: ../rules/base.xml.in.h:154
-msgid "Georgia"
-msgstr "喬治亞"
+msgid "Acer C300"
+msgstr "宏碁 C300"
#: ../rules/base.xml.in.h:155
-msgid "German, Sun dead keys"
-msgstr "德文,Sun 的無用按鍵"
+msgid "Acer Ferrari 4000"
+msgstr "宏碁 Ferrari 4000"
#: ../rules/base.xml.in.h:156
-msgid "German, eliminate dead keys"
-msgstr "德文,除去無用按鍵"
+msgid "Acer Laptop"
+msgstr "宏碁 Laptop"
#: ../rules/base.xml.in.h:157
-msgid "Germany"
-msgstr "德國"
+msgid "Asus Laptop"
+msgstr "華碩 Laptop"
#: ../rules/base.xml.in.h:158
-msgid "Gre"
-msgstr "Gre"
+msgid "Apple"
+msgstr "蘋果"
#: ../rules/base.xml.in.h:159
-msgid "Greece"
-msgstr "希臘"
+msgid "Apple Laptop"
+msgstr "蘋果 Laptop"
#: ../rules/base.xml.in.h:160
-msgid "Group Shift/Lock behavior"
-msgstr "群組 Shift/Lock 功能"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "蘋果鋁製鍵盤 (ANSI)"
#: ../rules/base.xml.in.h:161
-msgid "Gujarati"
-msgstr "古吉拉特文(印度)"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "蘋果鋁製鍵盤 (ISO)"
#: ../rules/base.xml.in.h:162
-msgid "Gurmukhi"
-msgstr "古爾穆希文"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "蘋果鋁製鍵盤 (JIS)"
#: ../rules/base.xml.in.h:163
-msgid "Gyration"
-msgstr "回轉"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST 多媒體無線鍵盤"
#: ../rules/base.xml.in.h:164
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "惠普網際鍵盤"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Laptop/notebook eMachines m68 xx"
#: ../rules/base.xml.in.h:165
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "惠普 Omnibook 500 FA"
+msgid "BenQ X-Touch"
+msgstr "明基 X-Touch"
#: ../rules/base.xml.in.h:166
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "惠普 Omnibook 5xx"
+msgid "BenQ X-Touch 730"
+msgstr "明基 X-Touch 730"
#: ../rules/base.xml.in.h:167
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "惠普 Omnibook 6000/6100"
+msgid "BenQ X-Touch 800"
+msgstr "明基 X-Touch 800"
#: ../rules/base.xml.in.h:168
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "惠普 Omnibook XE3 GC"
+msgid "Happy Hacking Keyboard"
+msgstr "快樂黑作鍵盤"
#: ../rules/base.xml.in.h:169
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "惠普 Omnibook XE3 CF"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:170
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "惠普 Omnibook XT1000"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:171
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "惠普 Pavilion ZT11xx"
+msgid "Sun Type 7 USB"
+msgstr "昇陽 Type 7 USB"
#: ../rules/base.xml.in.h:172
-msgid "Hewlett-Packard SK-2501 Multimedia Keyboard"
-msgstr "惠普 SK-2501 多媒體鍵盤"
+msgid "Sun Type 7 USB (European layout)"
+msgstr "昇陽 Type 7 USB (歐洲的配置)"
#: ../rules/base.xml.in.h:173
-msgid "Hewlett-Packard SK-2505 Internet Keyboard"
-msgstr "惠普 SK-2505 網際鍵盤"
+msgid "Sun Type 7 USB (Unix layout)"
+msgstr "昇陽 Type 7 USB (Unix 配置)"
#: ../rules/base.xml.in.h:174
-msgid "Honeywell Euroboard"
-msgstr "Honeywell 歐洲鍵盤"
+msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key"
+msgstr "昇陽 Type 7 USB (日語配置) / 日語 106-key"
#: ../rules/base.xml.in.h:175
-msgid "Hrv"
-msgstr "Hrv"
+msgid "Sun Type 6/7 USB"
+msgstr "昇陽 Type 6/7 USB"
#: ../rules/base.xml.in.h:176
-msgid "Hun"
-msgstr "Hun"
+msgid "Sun Type 6/7 USB (European layout)"
+msgstr "昇陽 Type 6/7 USB (歐洲配置)"
#: ../rules/base.xml.in.h:177
-msgid "Hungary"
-msgstr "匈牙利"
+msgid "Sun Type 6 USB (Unix layout)"
+msgstr "昇陽 Type 6 USB (Unix 配置)"
#: ../rules/base.xml.in.h:178
-msgid "Hyper is mapped to the Win-keys."
-msgstr "Hyper 配置到兩個 Win-key。"
+msgid "Sun Type 6 USB (Japanese layout)"
+msgstr "昇陽 Type 6 USB (日語配置)"
#: ../rules/base.xml.in.h:179
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Sun Type 6 (Japanese layout)"
+msgstr "昇陽 Type 6 (日語配置)"
#: ../rules/base.xml.in.h:180
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:181
-msgid "IBM Rapid Access II (alternate option)"
-msgstr "IBM Rapid Access II(替代選項)"
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
#: ../rules/base.xml.in.h:182
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:183
-msgid "ISO Alternate"
-msgstr "ISO 替代"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative 桌面無線 7000"
#: ../rules/base.xml.in.h:184
-msgid "Iceland"
-msgstr "冰島"
-
-#: ../rules/base.xml.in.h:185
-msgid "Ind"
-msgstr "Ind"
+msgid "Htc Dream phone"
+msgstr "宏達電夢幻電話"
-#: ../rules/base.xml.in.h:186
-msgid "India"
-msgstr "印度"
+#. Keyboard indicator for English layouts
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:33
+msgid "en"
+msgstr "en"
-#: ../rules/base.xml.in.h:187
-msgid "International (with dead keys)"
-msgstr "國際鍵盤 (附無用按鍵)"
-
-#: ../rules/base.xml.in.h:188
-msgid "Inuktitut"
-msgstr "伊努伊特鍵盤"
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34
+msgid "English (US)"
+msgstr "英語 (美式)"
+#. Keyboard indicator for Cherokee layouts
#: ../rules/base.xml.in.h:189
-msgid "Iran"
-msgstr "伊朗"
+msgid "chr"
+msgstr "chr"
#: ../rules/base.xml.in.h:190
-msgid "Ireland"
-msgstr "愛爾蘭"
+msgid "Cherokee"
+msgstr "卻洛奇語"
#: ../rules/base.xml.in.h:191
-msgid "Irl"
-msgstr "Irl"
+msgid "English (US, with euro on 5)"
+msgstr "英語 (美式附歐元於按鍵 5)"
#: ../rules/base.xml.in.h:192
-msgid "Irn"
-msgstr "Irn"
+msgid "English (US, international with dead keys)"
+msgstr "英語 (美式國際版有廢鍵)"
#: ../rules/base.xml.in.h:193
-msgid "Isl"
-msgstr "Isl"
+msgid "English (US, alternative international)"
+msgstr "英語 (美式替代國際版)"
#: ../rules/base.xml.in.h:194
-msgid "Isr"
-msgstr "Isr"
+msgid "English (Colemak)"
+msgstr "英語 (Colemak 配置)"
#: ../rules/base.xml.in.h:195
-msgid "Israel"
-msgstr "以色列"
+msgid "English (Dvorak)"
+msgstr "英語 (Dvorak 配置)"
#: ../rules/base.xml.in.h:196
-msgid "Ita"
-msgstr "Ita"
+msgid "English (Dvorak, international with dead keys)"
+msgstr "英語 (Dvorak 配置國際版有廢鍵)"
#: ../rules/base.xml.in.h:197
-msgid "Italy"
-msgstr "意大利"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "英語 (Dvorak 替代國際版無廢鍵)"
#: ../rules/base.xml.in.h:198
-msgid "Japan"
-msgstr "日本"
+msgid "English (left handed Dvorak)"
+msgstr "英語 (慣用左手的 Dvorak 配置)"
#: ../rules/base.xml.in.h:199
-msgid "Japanese 106-key"
-msgstr "日文 106鍵 鍵盤"
+msgid "English (right handed Dvorak)"
+msgstr "英語 (慣用右手的 Dvorak 配置)"
#: ../rules/base.xml.in.h:200
-msgid "Jpn"
-msgstr "Jpn"
+msgid "English (classic Dvorak)"
+msgstr "英語 (傳統型 Dvorak 配置)"
#: ../rules/base.xml.in.h:201
-msgid "Kannada"
-msgstr "印度卡納達文"
-
-#: ../rules/base.xml.in.h:202
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "English (programmer Dvorak)"
+msgstr "英語 (程式員 Dvorak 配置)"
-#: ../rules/base.xml.in.h:203
-msgid "Kyr"
-msgstr "Kyr"
+#. Keyboard indicator for Russian layouts
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54
+msgid "ru"
+msgstr "ru"
#: ../rules/base.xml.in.h:204
-msgid "Kyrgyzstan"
-msgstr "吉爾吉斯"
+msgid "Russian (US, phonetic)"
+msgstr "俄語 (美式音標)"
#: ../rules/base.xml.in.h:205
-msgid "LAm"
-msgstr "LAm"
+msgid "English (Macintosh)"
+msgstr "英語 (麥金塔)"
#: ../rules/base.xml.in.h:206
-msgid "Lao"
-msgstr "Lao"
+msgid "English (international AltGr dead keys)"
+msgstr "英語 (國際版 AltGr 廢鍵)"
#: ../rules/base.xml.in.h:207
-msgid "Laos"
-msgstr "寮國"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "英語 (配置切換利用乘/除鍵)"
#: ../rules/base.xml.in.h:208
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "可攜式/筆記型 康柏 (如 Armada) 可攜式鍵盤"
+msgid "Serbo-Croatian (US)"
+msgstr "塞爾維亞克羅埃西亞語 (美式)"
#: ../rules/base.xml.in.h:209
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "可攜式/筆記型 康柏 (如 Presario) 網際鍵盤"
+msgid "English (Workman)"
+msgstr "英語 (Workman 配置)"
#: ../rules/base.xml.in.h:210
-msgid "Laptop/notebook Dell Inspiron 8xxx"
-msgstr "可攜式/筆記型 戴爾 Inspiron 8xxx"
-
-#: ../rules/base.xml.in.h:211
-msgid "Latin"
-msgstr "拉丁文"
+msgid "English (Workman, international with dead keys)"
+msgstr "英語 (Workman 鍵盤國際版附廢鍵)"
-#: ../rules/base.xml.in.h:212
-msgid "Latin American"
-msgstr "拉丁美洲"
+#. Keyboard indicator for Persian layouts
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:15
+msgid "fa"
+msgstr "fa"
#: ../rules/base.xml.in.h:213
-msgid "Latin Unicode"
-msgstr "拉丁文統一碼"
-
-#: ../rules/base.xml.in.h:214
-msgid "Latin Unicode qwerty"
-msgstr "拉丁文統一碼 qwerty"
+msgid "Afghani"
+msgstr "阿富汗尼"
+#. Keyboard indicator for Pashto layouts
#: ../rules/base.xml.in.h:215
-msgid "Latin qwerty"
-msgstr "拉丁文 qwerty"
+msgid "ps"
+msgstr "ps"
#: ../rules/base.xml.in.h:216
-msgid "Latin with guillemots"
-msgstr "拉丁文附海鳩符號"
-
-#: ../rules/base.xml.in.h:217
-msgid "Latvia"
-msgstr "拉脫維亞"
+msgid "Pashto"
+msgstr "普什圖語"
+#. Keyboard indicator for Uzbek layouts
#: ../rules/base.xml.in.h:218
-msgid "Left Alt key changes group."
-msgstr "以左邊的 Alt 鍵改變群組。"
+msgid "uz"
+msgstr "uz"
#: ../rules/base.xml.in.h:219
-msgid "Left Alt key switches group while pressed."
-msgstr "當按下左邊的 Alt 鍵時切換群組。"
+msgid "Uzbek (Afghanistan)"
+msgstr "烏茲別克語 (阿富汗)"
#: ../rules/base.xml.in.h:220
-msgid "Left Ctrl key changes group."
-msgstr "以左邊的 Ctrl 鍵改變群組。"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "普什圖語 (阿富汗,OLPC)"
#: ../rules/base.xml.in.h:221
-msgid "Left Shift key changes group."
-msgstr "以左邊的 Shift 鍵改變群組。"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "波斯語 (阿富汗,Dari OLPC)"
#: ../rules/base.xml.in.h:222
-msgid "Left Win-key changes group."
-msgstr "以左邊的 Win-key 改變群組。"
-
-#: ../rules/base.xml.in.h:223
-msgid "Left Win-key switches group while pressed."
-msgstr "當按下左邊的 Win-key 時切換群組。"
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "烏茲別克語 (阿富汗,OLPC)"
-#: ../rules/base.xml.in.h:224
-msgid "Lithuania"
-msgstr "立陶宛"
+#. Keyboard indicator for Arabic layouts
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64
+msgid "ar"
+msgstr "ar"
-#: ../rules/base.xml.in.h:225
-msgid "Logitech Access Keyboard"
-msgstr "羅技 Access 鍵盤"
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65
+msgid "Arabic"
+msgstr "阿拉伯語"
#: ../rules/base.xml.in.h:226
-msgid "Logitech Cordless Desktop"
-msgstr "羅技無影手"
+msgid "Arabic (azerty)"
+msgstr "阿拉伯語 (azerty 配置)"
#: ../rules/base.xml.in.h:227
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "羅技無影手桌面導航器"
+msgid "Arabic (azerty/digits)"
+msgstr "阿拉伯語 (azerty/數字 配置)"
#: ../rules/base.xml.in.h:228
-msgid "Logitech Cordless Desktop Optical"
-msgstr "羅技無影手光學組合"
+msgid "Arabic (digits)"
+msgstr "阿拉伯語 (數字鍵盤)"
#: ../rules/base.xml.in.h:229
-msgid "Logitech Cordless Desktop Pro"
-msgstr "羅技無影手進階版"
+msgid "Arabic (qwerty)"
+msgstr "阿拉伯語 (qwerty 配置)"
#: ../rules/base.xml.in.h:230
-msgid "Logitech Cordless Desktop Pro (alternate option)"
-msgstr "羅技無影手進階版(替代選項)"
+msgid "Arabic (qwerty/digits)"
+msgstr "阿拉伯語 (qwerty/數字鍵盤)"
#: ../rules/base.xml.in.h:231
-msgid "Logitech Cordless Desktop Pro (alternate option2)"
-msgstr "羅技無影手進階版(替代選項)"
-
-#: ../rules/base.xml.in.h:232
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "羅技網際無影手"
+msgid "Arabic (Buckwalter)"
+msgstr "阿拉伯語 (Buckwalter 配置)"
+#. Keyboard indicator for Albanian layouts
#: ../rules/base.xml.in.h:233
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "羅技極光無影手組合/桌面導航器"
+msgid "sq"
+msgstr "sq"
#: ../rules/base.xml.in.h:234
-msgid "Logitech Deluxe Access Keyboard"
-msgstr "羅技強手鍵盤"
+msgid "Albanian"
+msgstr "阿爾巴尼亞語"
-#: ../rules/base.xml.in.h:235
-msgid "Logitech Internet Keyboard"
-msgstr "羅技網際鍵盤"
+#. Keyboard indicator for Armenian layouts
+#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58
+msgid "hy"
+msgstr "hy"
-#: ../rules/base.xml.in.h:236
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "羅技網際導航鍵盤"
-
-#: ../rules/base.xml.in.h:237
-msgid "Logitech Ultra-X Keyboard"
-msgstr "羅技銀幻手鍵盤"
+#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59
+msgid "Armenian"
+msgstr "亞美尼亞語"
#: ../rules/base.xml.in.h:238
-msgid "Logitech iTouch"
-msgstr "羅技 iTouch"
+msgid "Armenian (phonetic)"
+msgstr "亞美尼亞語 (音標)"
#: ../rules/base.xml.in.h:239
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "羅技 iTouch 無影手鍵盤(型號 Y-RB6)"
+msgid "Armenian (alternative phonetic)"
+msgstr "亞美尼亞語 (替代音標)"
#: ../rules/base.xml.in.h:240
-msgid "Logitech iTouch keyboard Internet Navigator"
-msgstr "羅技 iTouch 鍵盤網際導航器"
+msgid "Armenian (eastern)"
+msgstr "亞美尼亞語 (東部)"
#: ../rules/base.xml.in.h:241
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Armenian (western)"
+msgstr "亞美尼亞語 (西部)"
#: ../rules/base.xml.in.h:242
-msgid "Lva"
-msgstr "Lva"
+msgid "Armenian (alternative eastern)"
+msgstr "亞美尼亞語 (替代東部)"
-#: ../rules/base.xml.in.h:243
-msgid "Macedonian"
-msgstr "馬其頓文"
-
-#: ../rules/base.xml.in.h:244
-msgid "Macintosh"
-msgstr "Macintosh"
+#. Keyboard indicator for German layouts
+#: ../rules/base.xml.in.h:244 ../rules/base.extras.xml.in.h:10
+msgid "de"
+msgstr "de"
#: ../rules/base.xml.in.h:245
-msgid "Macintosh Old"
-msgstr "Macintosh 舊產品"
+msgid "German (Austria)"
+msgstr "德語 (奧地利)"
#: ../rules/base.xml.in.h:246
-msgid "Make CapsLock an additional Control."
-msgstr "以 Caps Lock 做為附加的控制鍵。"
+msgid "German (legacy)"
+msgstr "德語 (舊式)"
#: ../rules/base.xml.in.h:247
-msgid "Malayalam"
-msgstr "(印度)馬來雅拉姆文字"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "德語 (奧地利,消除廢鍵)"
#: ../rules/base.xml.in.h:248
-msgid "Malta"
-msgstr "馬爾它"
+msgid "German (Austria, Sun dead keys)"
+msgstr "德語 (奧地利,昇陽廢鍵)"
#: ../rules/base.xml.in.h:249
-msgid "Mao"
-msgstr "Mao"
-
-#: ../rules/base.xml.in.h:250
-msgid "Maori"
-msgstr "毛利"
+msgid "German (Austria, Macintosh)"
+msgstr "德語 (奧地利,麥金塔)"
+#. Keyboard indicator for Azerbaijani layouts
#: ../rules/base.xml.in.h:251
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "az"
+msgstr "az"
#: ../rules/base.xml.in.h:252
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access 鍵盤"
+msgid "Azerbaijani"
+msgstr "亞塞拜然語"
#: ../rules/base.xml.in.h:253
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
-
-#: ../rules/base.xml.in.h:254
-msgid "Menu is Compose."
-msgstr "Menu 為組合鍵。"
+msgid "Azerbaijani (Cyrillic)"
+msgstr "亞塞拜然語 (斯拉夫字母)"
+#. Keyboard indicator for Belarusian layouts
#: ../rules/base.xml.in.h:255
-msgid "Menu key changes group."
-msgstr "以 Menu 鍵改變群組。"
+msgid "by"
+msgstr "by"
#: ../rules/base.xml.in.h:256
-msgid "Meta is mapped to the Win-keys."
-msgstr "Meta 配置到兩個 Win-key。"
+msgid "Belarusian"
+msgstr "白俄羅斯語"
#: ../rules/base.xml.in.h:257
-msgid "Meta is mapped to the left Win-key."
-msgstr "Meta 配置到左邊的 Win-key。"
+msgid "Belarusian (legacy)"
+msgstr "白俄羅斯語 (舊式)"
#: ../rules/base.xml.in.h:258
-msgid "Microsoft Internet Keyboard"
-msgstr "微軟網際鍵盤"
+msgid "Belarusian (Latin)"
+msgstr "白俄羅斯語 (拉丁字母)"
-#: ../rules/base.xml.in.h:259
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "微軟網際鍵盤增強版,瑞典"
-
-#: ../rules/base.xml.in.h:260
-msgid "Microsoft Natural"
-msgstr "微軟自然鍵盤"
+#. Keyboard indicator for Belgian layouts
+#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:67
+msgid "be"
+msgstr "be"
-#: ../rules/base.xml.in.h:261
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "微軟原生鍵盤增強版/微軟網際鍵盤增強版"
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:68
+msgid "Belgian"
+msgstr "比利時語"
#: ../rules/base.xml.in.h:262
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "微軟原生鍵盤增強版 OEM"
+msgid "Belgian (alternative)"
+msgstr "比利時語 (替代)"
#: ../rules/base.xml.in.h:263
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "微軟自然鍵盤增強版 USB/微軟網際鍵盤增強版"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "比利時語 (替代,只有 latin-9)"
#: ../rules/base.xml.in.h:264
-msgid "Microsoft Office Keyboard"
-msgstr "微軟 Office 鍵盤"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "比利時語 (替代,昇陽廢鍵)"
#: ../rules/base.xml.in.h:265
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "微軟無線多媒體鍵盤 1.0A"
+msgid "Belgian (ISO alternate)"
+msgstr "比利時語 (ISO 替代)"
#: ../rules/base.xml.in.h:266
-msgid "Miscellaneous compatibility options"
-msgstr "其它相容選項"
+msgid "Belgian (eliminate dead keys)"
+msgstr "比利時語 (消除廢鍵)"
#: ../rules/base.xml.in.h:267
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Belgian (Sun dead keys)"
+msgstr "比利時語 (昇陽廢鍵)"
#: ../rules/base.xml.in.h:268
-msgid "Mlt"
-msgstr "Mlt"
-
-#: ../rules/base.xml.in.h:269
-msgid "Mmr"
-msgstr "Mmr"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "比利時語 (Wang 式樣 724 azerty 配置)"
+#. Keyboard indicator for Bengali layouts
#: ../rules/base.xml.in.h:270
-msgid "Mng"
-msgstr "Mng"
+msgid "bn"
+msgstr "bn"
#: ../rules/base.xml.in.h:271
-msgid "Mongolia"
-msgstr "蒙古"
+msgid "Bengali"
+msgstr "孟加拉語"
#: ../rules/base.xml.in.h:272
-msgid "Multilingual"
-msgstr "多語言"
-
-#: ../rules/base.xml.in.h:273
-msgid "Multilingual, second part"
-msgstr "多語言,第二部份"
+msgid "Bengali (Probhat)"
+msgstr "孟加拉語 (Probhat)"
+#. Keyboard indicator for Indian layouts
#: ../rules/base.xml.in.h:274
-msgid "Myanmar"
-msgstr "緬甸"
+msgid "in"
+msgstr "in"
#: ../rules/base.xml.in.h:275
-msgid "Netherlands"
-msgstr "荷蘭"
+msgid "Indian"
+msgstr "印度語"
#: ../rules/base.xml.in.h:276
-msgid "Nld"
-msgstr "Nld"
+msgid "Bengali (India)"
+msgstr "孟加拉語 (印度)"
#: ../rules/base.xml.in.h:277
-msgid "Nor"
-msgstr "Nor"
+msgid "Bengali (India, Probhat)"
+msgstr "孟加拉語 (印度,Probhat)"
#: ../rules/base.xml.in.h:278
-msgid "Northern Saami"
-msgstr "北部沙米文"
+msgid "Bengali (India, Baishakhi)"
+msgstr "孟加拉語 (印度,Baishakhi)"
#: ../rules/base.xml.in.h:279
-msgid "Northern Saami, eliminate dead keys"
-msgstr "北部沙米文,除去無用按鍵"
+msgid "Bengali (India, Bornona)"
+msgstr "孟加拉語 (印度,Bornona)"
#: ../rules/base.xml.in.h:280
-msgid "Northgate OmniKey 101"
-msgstr "Northgate Omnikey 101"
+msgid "Bengali (India, Uni Gitanjali)"
+msgstr "孟加拉語 (印度,Uni Gitanjali)"
#: ../rules/base.xml.in.h:281
-msgid "Norway"
-msgstr "挪威"
-
-#: ../rules/base.xml.in.h:282
-msgid "NumLock LED shows alternative group."
-msgstr "以 Num Lock 燈號來顯示替代的群組。"
+msgid "Bengali (India, Baishakhi Inscript)"
+msgstr "孟加拉語 (印度,Baishakhi Inscript)"
+#. Keyboard indicator for Gujarati layouts
#: ../rules/base.xml.in.h:283
-msgid "Ogham"
-msgstr "(古愛爾蘭)歐甘文字"
+msgid "gu"
+msgstr "gu"
#: ../rules/base.xml.in.h:284
-msgid "Ogham IS434"
-msgstr "歐甘文字 IS434"
-
-#: ../rules/base.xml.in.h:285
-msgid "Oretec MCK-800 MM/Internet keyboard"
-msgstr "Oretec MCK-800 MM/網際鍵盤"
+msgid "Gujarati"
+msgstr "印度語 (古吉拉特文)"
+#. Keyboard indicator for Punjabi layouts
#: ../rules/base.xml.in.h:286
-msgid "Oriya"
-msgstr "(印度)奧里雅族文字"
+msgid "pa"
+msgstr "pa"
#: ../rules/base.xml.in.h:287
-msgid "PC-98xx Series"
-msgstr "PC-98xx 系列"
+msgid "Punjabi (Gurmukhi)"
+msgstr "旁遮普語 (果魯穆其)"
#: ../rules/base.xml.in.h:288
-msgid "Pak"
-msgstr "Pak"
-
-#: ../rules/base.xml.in.h:289
-msgid "Pakistan"
-msgstr "巴基斯坦"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "旁遮普語 (Gurmukhi Jhelum)"
+#. Keyboard indicator for Kannada layouts
#: ../rules/base.xml.in.h:290
-msgid "Pattachote"
-msgstr "泰文"
+msgid "kn"
+msgstr "kn"
#: ../rules/base.xml.in.h:291
-msgid "Phonetic"
-msgstr "音標"
-
-#: ../rules/base.xml.in.h:292
-msgid "Pol"
-msgstr "Pol"
+msgid "Kannada"
+msgstr "印度卡納達語"
+#. Keyboard indicator for Malayalam layouts
#: ../rules/base.xml.in.h:293
-msgid "Poland"
-msgstr "波蘭"
+msgid "ml"
+msgstr "ml"
#: ../rules/base.xml.in.h:294
-msgid "Polytonic"
-msgstr "多音字母"
+msgid "Malayalam"
+msgstr "馬來雅拉姆語"
#: ../rules/base.xml.in.h:295
-msgid "Portugal"
-msgstr "葡萄牙"
+msgid "Malayalam (Lalitha)"
+msgstr "馬來亞拉姆語 (Lalitha)"
#: ../rules/base.xml.in.h:296
-msgid "PowerPC PS/2"
-msgstr "PowerPC PS/2"
-
-#: ../rules/base.xml.in.h:297
-msgid "Press Left Alt key to choose 3rd level."
-msgstr "按下左邊的 Alt 鍵以選擇第三級。"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "馬來亞拉姆語 (擴充的印度文附盧比符號)"
+#. Keyboard indicator for Oriya layouts
#: ../rules/base.xml.in.h:298
-msgid "Press Left Win-key to choose 3rd level."
-msgstr "按下左邊的 Win-key 以選擇第三級。"
+msgid "or"
+msgstr "or"
#: ../rules/base.xml.in.h:299
-msgid "Press Menu key to choose 3rd level."
-msgstr "按下 Menu 鍵以選擇第三級。"
-
-#: ../rules/base.xml.in.h:300
-msgid "Press Right Alt key to choose 3rd level."
-msgstr "按下右邊的 Alt 鍵以選擇第三級。"
+msgid "Oriya"
+msgstr "奧里雅族語"
+#. Keyboard indicator for Tamil layouts
#: ../rules/base.xml.in.h:301
-msgid "Press Right Control to choose 3rd level."
-msgstr "按下右邊的 Control 以選擇第三級。"
+msgid "ta"
+msgstr "ta"
#: ../rules/base.xml.in.h:302
-msgid "Press Right Win-key to choose 3rd level."
-msgstr "按下右邊的 Win-key 以選擇第三級。"
+msgid "Tamil (Unicode)"
+msgstr "坦米爾語 (萬國碼)"
#: ../rules/base.xml.in.h:303
-msgid "Press any of Alt keys to choose 3rd level."
-msgstr "按下任一 Alt 鍵以選擇第三級。"
+msgid "Tamil (keyboard with numerals)"
+msgstr "坦米爾語 (鍵盤附數字)"
#: ../rules/base.xml.in.h:304
-msgid "Press any of Win-keys to choose 3rd level."
-msgstr "按下任一 Win-key 以選擇第三級。"
+msgid "Tamil (TAB typewriter)"
+msgstr "坦米爾語 (跳格打字機)"
#: ../rules/base.xml.in.h:305
-msgid "Probhat"
-msgstr "孟加拉 Probhat"
+msgid "Tamil (TSCII typewriter)"
+msgstr "坦米爾語 (TSCII 打字機)"
#: ../rules/base.xml.in.h:306
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
-
-#: ../rules/base.xml.in.h:307
-msgid "Prt"
-msgstr "Prt"
+msgid "Tamil"
+msgstr "坦米爾語"
+#. Keyboard indicator for Telugu layouts
#: ../rules/base.xml.in.h:308
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "te"
+msgstr "te"
#: ../rules/base.xml.in.h:309
-msgid "R-Alt switches group while pressed."
-msgstr "當按下右邊 Alt 時切換群組。"
-
-#: ../rules/base.xml.in.h:310
-msgid "Right Alt is Compose."
-msgstr "右邊的 Alt 為組合鍵。"
+msgid "Telugu"
+msgstr "泰盧固語"
+#. Keyboard indicator for Urdu layouts
#: ../rules/base.xml.in.h:311
-msgid "Right Alt key changes group."
-msgstr "以右邊的 Alt 鍵改變群組。"
+msgid "ur"
+msgstr "ur"
#: ../rules/base.xml.in.h:312
-msgid "Right Control key works as Right Alt."
-msgstr "右邊 Ctrl 鍵等同於右邊 Alt。"
+msgid "Urdu (phonetic)"
+msgstr "烏爾都語 (音標)"
#: ../rules/base.xml.in.h:313
-msgid "Right Ctrl is Compose."
-msgstr "右邊的 Ctrl 為組合鍵。"
+msgid "Urdu (alternative phonetic)"
+msgstr "烏爾都語 (替代音標)"
#: ../rules/base.xml.in.h:314
-msgid "Right Ctrl key changes group."
-msgstr "以右邊的 Ctrl 鍵改變群組。"
-
-#: ../rules/base.xml.in.h:315
-msgid "Right Ctrl key switches group while pressed."
-msgstr "當按下右邊的 Ctrl 鍵時切換群組。"
+msgid "Urdu (WinKeys)"
+msgstr "烏爾都語 (WinKeys)"
+#. Keyboard indicator for Hindi layouts
#: ../rules/base.xml.in.h:316
-msgid "Right Shift key changes group."
-msgstr "以右邊的 Shift 鍵改變群組。"
+msgid "hi"
+msgstr "hi"
#: ../rules/base.xml.in.h:317
-msgid "Right Win-key changes group."
-msgstr "以右邊的 Win-key 改變群組。"
+msgid "Hindi (Bolnagri)"
+msgstr "北印度語 (Bolnagri)"
#: ../rules/base.xml.in.h:318
-msgid "Right Win-key is Compose."
-msgstr "右邊的 Win-key 為組合鍵。"
+msgid "Hindi (Wx)"
+msgstr "北印度語 (Wx)"
#: ../rules/base.xml.in.h:319
-msgid "Right Win-key switches group while pressed."
-msgstr "當按下右邊的 Win-key 時切換群組。"
-
-#: ../rules/base.xml.in.h:320
-msgid "Romania"
-msgstr "羅馬尼亞"
+msgid "English (India, with RupeeSign)"
+msgstr "英語 (印度附盧比符號)"
+#. Keyboard indicator for Bosnian layouts
#: ../rules/base.xml.in.h:321
-msgid "Romanian keyboard with German letters"
-msgstr "羅馬尼亞鍵盤附德文字母"
+msgid "bs"
+msgstr "bs"
#: ../rules/base.xml.in.h:322
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "羅馬尼亞鍵盤附德文字母,除去無用按鍵"
+msgid "Bosnian"
+msgstr "波士尼亞語"
#: ../rules/base.xml.in.h:323
-msgid "Rou"
-msgstr "Rou"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "波士尼亞語 (書名號做為引號)"
#: ../rules/base.xml.in.h:324
-msgid "Rus"
-msgstr "Rus"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "波士尼亞語 (使用波士尼亞語雙併詞)"
#: ../rules/base.xml.in.h:325
-msgid "Russia"
-msgstr "俄羅斯"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "波士尼亞語 (美式鍵盤附波士尼亞語雙併詞)"
#: ../rules/base.xml.in.h:326
-msgid "Russian"
-msgstr "俄文"
-
-#: ../rules/base.xml.in.h:327
-msgid "Russian phonetic"
-msgstr "俄文音標"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "波士尼亞語 (美式鍵盤附波士尼亞語字母)"
-#: ../rules/base.xml.in.h:328
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "俄文音標,除去無用按鍵"
+#. Keyboard indicator for Portuguese layouts
+#: ../rules/base.xml.in.h:328 ../rules/base.extras.xml.in.h:70
+msgid "pt"
+msgstr "pt"
-#: ../rules/base.xml.in.h:329
-msgid "SK-1300"
-msgstr "SK-1300"
+#: ../rules/base.xml.in.h:329 ../rules/base.extras.xml.in.h:71
+msgid "Portuguese (Brazil)"
+msgstr "葡萄牙 (巴西)"
#: ../rules/base.xml.in.h:330
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "葡萄牙 (巴西,消除廢鍵)"
#: ../rules/base.xml.in.h:331
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "葡萄牙 (巴西,Dvorak 配置)"
#: ../rules/base.xml.in.h:332
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "葡萄牙 (巴西,nativo 配置)"
#: ../rules/base.xml.in.h:333
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "葡萄牙 (巴西,nativo 配置用於美式鍵盤)"
#: ../rules/base.xml.in.h:334
-msgid "Samsung SDM 4500P"
-msgstr "三星 SDM 4500P"
-
-#: ../rules/base.xml.in.h:335
-msgid "Samsung SDM 4510P"
-msgstr "三星 SDM 4510P"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "葡萄牙 (巴西,nativo 配置用於世界語)"
+#. Keyboard indicator for Bulgarian layouts
#: ../rules/base.xml.in.h:336
-msgid "ScrollLock LED shows alternative group."
-msgstr "以 Scroll Lock 燈號來顯示替代的群組。"
+msgid "bg"
+msgstr "bg"
#: ../rules/base.xml.in.h:337
-msgid "Serbian"
-msgstr "塞爾維亞文"
+msgid "Bulgarian"
+msgstr "保加利亞語"
#: ../rules/base.xml.in.h:338
-msgid "Shift with numpad keys works as in MS Windows."
-msgstr "Shift+數字鍵盤的功能等同於在 MS Windows 之中。"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "保加利亞語 (傳統音標)"
#: ../rules/base.xml.in.h:339
-msgid "Shift+CapsLock changes group."
-msgstr "以 Shift+Caps Lock 鍵改變群組。"
+msgid "Bulgarian (new phonetic)"
+msgstr "保加利亞語 (新式音標)"
#: ../rules/base.xml.in.h:340
-msgid "Slovakia"
-msgstr "斯洛伐克"
+msgid "Arabic (Morocco)"
+msgstr "阿拉伯語 (摩洛哥)"
-#: ../rules/base.xml.in.h:341
-msgid "Slovenia"
-msgstr "斯洛凡尼亞"
-
-#: ../rules/base.xml.in.h:342
-msgid "Spain"
-msgstr "西班牙"
+#. Keyboard indicator for French layouts
+#: ../rules/base.xml.in.h:342 ../rules/base.extras.xml.in.h:3
+msgid "fr"
+msgstr "fr"
#: ../rules/base.xml.in.h:343
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server."
-msgstr "伺服器處理的特殊鍵 (Ctrl+Alt+&lt;key&gt;)。"
-
-#: ../rules/base.xml.in.h:344
-msgid "SrL"
-msgstr "SrL"
+msgid "French (Morocco)"
+msgstr "法語 (摩洛哥)"
+#. Keyboard indicator for Berber layouts
#: ../rules/base.xml.in.h:345
-msgid "Sri Lanka"
-msgstr "斯里蘭卡"
+msgid "ber"
+msgstr "ber"
#: ../rules/base.xml.in.h:346
-msgid "Srp"
-msgstr "Srp"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "柏柏爾語 (摩洛哥,提非納字母)"
#: ../rules/base.xml.in.h:347
-msgid "Standard"
-msgstr "標準"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "柏柏爾語 (摩洛哥,替代提非納字母)"
+
+#: ../rules/base.xml.in.h:348
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "柏柏爾語 (摩洛哥,提非納字母替代音標)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:349
-msgid "Standard RSTU"
-msgstr "標準 RSTU"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "柏柏爾語 (摩洛哥,提非納字母擴充)"
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:351
-msgid "Standard RSTU on Russian layout"
-msgstr "俄文排列上的標準 RSTU"
+#: ../rules/base.xml.in.h:350
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "柏柏爾語 (摩洛哥,提非納字母音標)"
-#: ../rules/base.xml.in.h:352
-msgid "Sun dead keys"
-msgstr "Sun 無用按鍵"
+#: ../rules/base.xml.in.h:351
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "柏柏爾語 (摩洛哥,提非納字母擴充音標)"
+#. Keyboard indicator for Cameroon layouts
#: ../rules/base.xml.in.h:353
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power 多媒體鍵盤"
+msgid "cm"
+msgstr "cm"
#: ../rules/base.xml.in.h:354
-msgid "Super is mapped to the Win-keys (default)."
-msgstr "Super 配置到兩個 Win-key (預設值)。"
+msgid "English (Cameroon)"
+msgstr "英語 (喀麥隆)"
#: ../rules/base.xml.in.h:355
-msgid "Svk"
-msgstr "Svk"
+msgid "French (Cameroon)"
+msgstr "法語 (喀麥隆)"
#: ../rules/base.xml.in.h:356
-msgid "Svn"
-msgstr "Svn"
+msgid "Cameroon Multilingual (qwerty)"
+msgstr "喀麥隆多語言 (qwerty 配置)"
#: ../rules/base.xml.in.h:357
-msgid "Swap Control and CapsLock."
-msgstr "Control 與 Caps Lock 鍵互換。"
+msgid "Cameroon Multilingual (azerty)"
+msgstr "喀麥隆多語言 (azerty 配置)"
#: ../rules/base.xml.in.h:358
-msgid "Swe"
-msgstr "Swe"
-
-#: ../rules/base.xml.in.h:359
-msgid "Sweden"
-msgstr "瑞典"
+msgid "Cameroon Multilingual (Dvorak)"
+msgstr "喀麥隆多語言 (Dvorak 配置)"
+#. Keyboard indicator for Burmese layouts
#: ../rules/base.xml.in.h:360
-msgid "Switzerland"
-msgstr "瑞士"
+msgid "my"
+msgstr "my"
#: ../rules/base.xml.in.h:361
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (平板電腦)"
+msgid "Burmese"
+msgstr "緬甸語"
-#: ../rules/base.xml.in.h:362
-msgid "Syr"
-msgstr "Syr"
+#: ../rules/base.xml.in.h:362 ../rules/base.extras.xml.in.h:4
+msgid "French (Canada)"
+msgstr "法語 (加拿大)"
#: ../rules/base.xml.in.h:363
-msgid "Syria"
-msgstr "敘利亞"
+msgid "French (Canada, Dvorak)"
+msgstr "法語 (加拿大,Dvorak 配置)"
#: ../rules/base.xml.in.h:364
-msgid "Syriac"
-msgstr "敘利亞語"
+msgid "French (Canada, legacy)"
+msgstr "法語 (加拿大,舊式)"
#: ../rules/base.xml.in.h:365
-msgid "Syriac phonetic"
-msgstr "敘利亞音標"
+msgid "Canadian Multilingual"
+msgstr "加拿大多語言"
#: ../rules/base.xml.in.h:366
-msgid "TIS-820.2538"
-msgstr "泰語(TIS-820.2538)"
+msgid "Canadian Multilingual (first part)"
+msgstr "加拿大多語言 (第一部分)"
#: ../rules/base.xml.in.h:367
-msgid "Tajikistan"
-msgstr "塔吉克"
-
-#: ../rules/base.xml.in.h:368
-msgid "Tamil"
-msgstr "坦米爾文"
+msgid "Canadian Multilingual (second part)"
+msgstr "加拿大多語言 (第二部分)"
+#. Keyboard indicator for Inuktikut layouts
#: ../rules/base.xml.in.h:369
-msgid "Tamil INSCRIPT"
-msgstr "坦米爾文 INSCRIPT"
+msgid "ike"
+msgstr "ike"
#: ../rules/base.xml.in.h:370
-msgid "Tamil TAB Typewriter"
-msgstr "坦米爾文 TAB 打字機"
+msgid "Inuktitut"
+msgstr "伊努伊特鍵盤"
#: ../rules/base.xml.in.h:371
-msgid "Tamil TSCII Typewriter"
-msgstr "坦米爾文 TSCII 打字機"
+msgid "English (Canada)"
+msgstr "英語 (加拿大)"
#: ../rules/base.xml.in.h:372
-msgid "Tamil Unicode"
-msgstr "坦米爾文統一碼"
-
-#: ../rules/base.xml.in.h:373
-msgid "Telugu"
-msgstr "泰盧固語"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "法語 (剛果民主共和國)"
+#. Keyboard indicator for Taiwanese layouts
#: ../rules/base.xml.in.h:374
-msgid "Tha"
-msgstr "Tha"
+msgid "zh"
+msgstr "zh"
#: ../rules/base.xml.in.h:375
-msgid "Thailand"
-msgstr "泰國"
+msgid "Chinese"
+msgstr "漢語"
#: ../rules/base.xml.in.h:376
-msgid "Third level choosers"
-msgstr "第三級選擇器"
+msgid "Tibetan"
+msgstr "藏語"
#: ../rules/base.xml.in.h:377
-msgid "Tilde (~) variant"
-msgstr "波折號 (~) 變化"
+msgid "Tibetan (with ASCII numerals)"
+msgstr "藏語 (附 ASCII 數字)"
#: ../rules/base.xml.in.h:378
-msgid "Tjk"
-msgstr "Tjk"
-
-#: ../rules/base.xml.in.h:379
-msgid "Toshiba Satellite S3000"
-msgstr "東芝 Satellite S3000"
+msgid "Uyghur"
+msgstr "維吾爾語"
+#. Keyboard indicator for Croatian layouts
#: ../rules/base.xml.in.h:380
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access 鍵盤"
+msgid "hr"
+msgstr "hr"
#: ../rules/base.xml.in.h:381
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust 無線經典鍵盤"
+msgid "Croatian"
+msgstr "克羅埃西亞語"
#: ../rules/base.xml.in.h:382
-msgid "Tur"
-msgstr "Tur"
+msgid "Croatian (use guillemets for quotes)"
+msgstr "克羅埃西亞語 (書名號做為引號)"
#: ../rules/base.xml.in.h:383
-msgid "Turkish"
-msgstr "土耳其文"
+msgid "Croatian (use Croatian digraphs)"
+msgstr "克羅埃西亞語 (使用克羅埃西亞語雙併詞)"
#: ../rules/base.xml.in.h:384
-msgid "Typewriter"
-msgstr "打字機"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "克羅埃西亞語 (美式鍵盤附克羅埃西亞語雙併詞)"
#: ../rules/base.xml.in.h:385
-msgid "U.S. English"
-msgstr "美式英文"
-
-#: ../rules/base.xml.in.h:386
-msgid "US keyboard with Croatian letters"
-msgstr "美國鍵盤附克羅埃西亞字母"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "克羅埃西亞語 (美式鍵盤附克羅埃西亞語字母)"
-#: ../rules/base.xml.in.h:387
-msgid "US keyboard with Lithuanian letters"
-msgstr "美國鍵盤附立陶宛字母"
+#. Keyboard indicator for Chech layouts
+#: ../rules/base.xml.in.h:387 ../rules/base.extras.xml.in.h:73
+msgid "cs"
+msgstr "cs"
-#: ../rules/base.xml.in.h:388
-msgid "US keyboard with Maltian letters"
-msgstr "美國鍵盤附馬爾它字母"
+#: ../rules/base.xml.in.h:388 ../rules/base.extras.xml.in.h:74
+msgid "Czech"
+msgstr "捷克語"
#: ../rules/base.xml.in.h:389
-msgid "US keyboard with Romanian letters"
-msgstr "美國鍵盤附羅馬尼亞字母"
+msgid "Czech (with &lt;\\|&gt; key)"
+msgstr "捷克語 (附 &lt;\\|&gt; 鍵)"
#: ../rules/base.xml.in.h:390
-msgid "USA"
-msgstr "USA"
+msgid "Czech (qwerty)"
+msgstr "捷克語 (qwerty 配置)"
#: ../rules/base.xml.in.h:391
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "捷克語 (qwerty 配置,擴充的反斜線)"
#: ../rules/base.xml.in.h:392
-msgid "Ukraine"
-msgstr "烏克蘭"
+msgid "Czech (UCW layout, accented letters only)"
+msgstr "捷克語 (UCW 配置,只有揚音字母)"
#: ../rules/base.xml.in.h:393
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "捷克語 (美式 Dvorak 配置附 CZ UCW 支援)"
-#: ../rules/base.xml.in.h:394
-msgid "United Kingdom"
-msgstr "英國"
+#. Keyboard indicator for Danish layouts
+#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:76
+msgid "da"
+msgstr "da"
-#: ../rules/base.xml.in.h:395
-msgid "Urdu"
-msgstr "烏都文"
-
-#: ../rules/base.xml.in.h:396
-msgid "Use keyboard LED to show alternative group."
-msgstr "使用鍵盤燈號來顯示替代的群組。"
+#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:77
+msgid "Danish"
+msgstr "丹麥語"
#: ../rules/base.xml.in.h:397
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Danish (eliminate dead keys)"
+msgstr "丹麥語 (消除廢鍵)"
#: ../rules/base.xml.in.h:398
-msgid "Uzbekistan"
-msgstr "烏茲別克"
+msgid "Danish (Macintosh)"
+msgstr "丹麥語 (麥金塔)"
#: ../rules/base.xml.in.h:399
-msgid "Vietnam"
-msgstr "越南"
+msgid "Danish (Macintosh, eliminate dead keys)"
+msgstr "丹麥語 (麥金塔,消除廢鍵)"
#: ../rules/base.xml.in.h:400
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Danish (Dvorak)"
+msgstr "丹麥語 (Dvorak 配置)"
-#: ../rules/base.xml.in.h:401
-msgid "Winbook Model XP5"
-msgstr "Winbook XP5 鍵盤"
-
-#: ../rules/base.xml.in.h:402
-msgid "Winkeys"
-msgstr "Winkeys"
+#. Keyboard indicator for Dutch layouts
+#: ../rules/base.xml.in.h:402 ../rules/base.extras.xml.in.h:79
+msgid "nl"
+msgstr "nl"
-#: ../rules/base.xml.in.h:403
-msgid "With &lt;\\|&gt; key"
-msgstr "附帶 &lt;\\|&gt; 鍵"
+#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:80
+msgid "Dutch"
+msgstr "荷蘭語"
#: ../rules/base.xml.in.h:404
-msgid "With guillemots"
-msgstr "附帶海鳩符號"
+msgid "Dutch (Sun dead keys)"
+msgstr "荷蘭語 (昇陽廢鍵)"
#: ../rules/base.xml.in.h:405
-msgid "Yahoo! Internet Keyboard"
-msgstr "雅虎網際鍵盤"
+msgid "Dutch (Macintosh)"
+msgstr "荷蘭語 (麥金塔)"
#: ../rules/base.xml.in.h:406
-msgid "Z and ZHE swapped"
-msgstr "已交換 Z 與 ZHE"
-
-#: ../rules/base.xml.in.h:407
-msgid "azerty"
-msgstr "azerty"
+msgid "Dutch (standard)"
+msgstr "荷蘭語 (標準)"
+#. Keyboard indicator for Dzongkha layouts
#: ../rules/base.xml.in.h:408
-msgid "azerty/digits"
-msgstr "azerty/數字"
+msgid "dz"
+msgstr "dz"
#: ../rules/base.xml.in.h:409
-msgid "digits"
-msgstr "數字"
-
-#: ../rules/base.xml.in.h:410
-msgid "lyx"
-msgstr "lyx"
+msgid "Dzongkha"
+msgstr "宗卡語"
-#: ../rules/base.xml.in.h:411
-msgid "qwerty"
-msgstr "qwerty"
+#. Keyboard indicator for Estonian layouts
+#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:82
+msgid "et"
+msgstr "et"
-#: ../rules/base.xml.in.h:412
-msgid "qwerty, extended Backslash"
-msgstr "qwerty,延伸的反斜線"
+#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:83
+msgid "Estonian"
+msgstr "愛沙尼亞語"
#: ../rules/base.xml.in.h:413
-msgid "qwerty/digits"
-msgstr "qwerty/數字"
+msgid "Estonian (eliminate dead keys)"
+msgstr "愛沙尼亞語 (消除廢鍵)"
#: ../rules/base.xml.in.h:414
-msgid "qwertz"
-msgstr "qwertz"
+msgid "Estonian (Dvorak)"
+msgstr "愛沙尼亞語 (Dvorak 配置)"
#: ../rules/base.xml.in.h:415
-msgid "si1452"
-msgstr "si1452"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "愛沙尼亞語 (美式鍵盤附愛沙尼亞語字母)"
+
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:16
+msgid "Persian"
+msgstr "波斯語"
+
+#: ../rules/base.xml.in.h:417
+msgid "Persian (with Persian Keypad)"
+msgstr "波斯語 (附波斯語數字鍵臺)"
+
+#. Keyboard indicator for Kurdish layouts
+#: ../rules/base.xml.in.h:419
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:420
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "庫德語 (伊朗,拉丁字母 Q)"
+
+#: ../rules/base.xml.in.h:421
+msgid "Kurdish (Iran, F)"
+msgstr "庫德語 (伊朗,F)"
+
+#: ../rules/base.xml.in.h:422
+msgid "Kurdish (Iran, Latin Alt-Q)"
+msgstr "庫德語 (伊朗,拉丁字母 Alt-Q)"
+
+#: ../rules/base.xml.in.h:423
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "庫德語 (伊朗,阿拉伯-拉丁字母)"
+
+#: ../rules/base.xml.in.h:424
+msgid "Iraqi"
+msgstr "伊拉克"
+
+#: ../rules/base.xml.in.h:425
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "庫德語 (伊拉克,拉丁字母 Q)"
+
+#: ../rules/base.xml.in.h:426
+msgid "Kurdish (Iraq, F)"
+msgstr "庫德語 (伊拉克,F)"
+
+#: ../rules/base.xml.in.h:427
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "庫德語 (伊拉克,拉丁字母 Alt-Q)"
+
+#: ../rules/base.xml.in.h:428
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "庫德語 (伊拉克,阿拉伯-拉丁字母)"
+
+#. Keyboard indicator for Faroese layouts
+#: ../rules/base.xml.in.h:430
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:431
+msgid "Faroese"
+msgstr "法羅群島語"
+
+#: ../rules/base.xml.in.h:432
+msgid "Faroese (eliminate dead keys)"
+msgstr "法羅群島語 (消除廢鍵)"
+
+#. Keyboard indicator for Finnish layouts
+#: ../rules/base.xml.in.h:434 ../rules/base.extras.xml.in.h:85
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:435 ../rules/base.extras.xml.in.h:86
+msgid "Finnish"
+msgstr "芬蘭語"
+
+#: ../rules/base.xml.in.h:436
+msgid "Finnish (classic)"
+msgstr "芬蘭語 (傳統型)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "芬蘭語 (傳統型,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:438
+msgid "Northern Saami (Finland)"
+msgstr "北方薩米語 (芬蘭)"
+
+#: ../rules/base.xml.in.h:439
+msgid "Finnish (Macintosh)"
+msgstr "芬蘭語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:440 ../rules/base.extras.xml.in.h:88
+msgid "French"
+msgstr "法語"
+
+#: ../rules/base.xml.in.h:441
+msgid "French (eliminate dead keys)"
+msgstr "法語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:442
+msgid "French (Sun dead keys)"
+msgstr "法語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:443
+msgid "French (alternative)"
+msgstr "法語 (替代)"
+
+#: ../rules/base.xml.in.h:444
+msgid "French (alternative, latin-9 only)"
+msgstr "法語 (替代,只有 latin-9)"
+
+#: ../rules/base.xml.in.h:445
+msgid "French (alternative, eliminate dead keys)"
+msgstr "法語 (替代,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:446
+msgid "French (alternative, Sun dead keys)"
+msgstr "法語 (替代,昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:447
+msgid "French (legacy, alternative)"
+msgstr "法語 (舊式,替代)"
+
+#: ../rules/base.xml.in.h:448
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "法語 (舊式,替代,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:449
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "法語 (舊式,替代,昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:450
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "法語 (Bepo,人體工學,Dvorak 方式)"
+
+#: ../rules/base.xml.in.h:451
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "法語 (Bepo,人體工學,Dvorak 方式,只有 latin-9)"
+
+#: ../rules/base.xml.in.h:452
+msgid "French (Dvorak)"
+msgstr "法語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:453
+msgid "French (Macintosh)"
+msgstr "法語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:454
+msgid "French (Breton)"
+msgstr "法語 (布里敦語)"
+
+#: ../rules/base.xml.in.h:455
+msgid "Occitan"
+msgstr "奧克西坦語"
+
+#: ../rules/base.xml.in.h:456
+msgid "Georgian (France, AZERTY Tskapo)"
+msgstr "喬治亞語 (法國,AZERTY Tskapo)"
+
+#: ../rules/base.xml.in.h:457
+msgid "English (Ghana)"
+msgstr "英語 (迦納)"
+
+#: ../rules/base.xml.in.h:458
+msgid "English (Ghana, multilingual)"
+msgstr "英語 (迦納,多語言)"
+
+#. Keyboard indicator for Akan layouts
+#: ../rules/base.xml.in.h:460
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:461
+msgid "Akan"
+msgstr "迦納語"
+
+#. Keyboard indicator for Ewe layouts
+#: ../rules/base.xml.in.h:463
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:464
+msgid "Ewe"
+msgstr "埃維語"
+
+#. Keyboard indicator for Fula layouts
+#: ../rules/base.xml.in.h:466
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:467
+msgid "Fula"
+msgstr "富拉語"
+
+#. Keyboard indicator for Ga layouts
+#: ../rules/base.xml.in.h:469
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:470
+msgid "Ga"
+msgstr "格語"
+
+#. Keyboard indicator for Hausa layouts
+#: ../rules/base.xml.in.h:472
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:473
+msgid "Hausa"
+msgstr "豪撒語(蘇丹)"
+
+#. Keyboard indicator for Avatime layouts
+#: ../rules/base.xml.in.h:475
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:476
+msgid "Avatime"
+msgstr "阿瓦蒂梅語"
+
+#: ../rules/base.xml.in.h:477
+msgid "English (Ghana, GILLBT)"
+msgstr "英語 (迦納,GILLBT)"
+
+#: ../rules/base.xml.in.h:478
+msgid "French (Guinea)"
+msgstr "法語 (幾內亞)"
+
+#. Keyboard indicator for Georgian layouts
+#: ../rules/base.xml.in.h:480
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:481
+msgid "Georgian"
+msgstr "喬治亞語"
+
+#: ../rules/base.xml.in.h:482
+msgid "Georgian (ergonomic)"
+msgstr "喬治亞語 (人體工學)"
+
+#: ../rules/base.xml.in.h:483
+msgid "Georgian (MESS)"
+msgstr "喬治亞語 (MESS)"
+
+#: ../rules/base.xml.in.h:484
+msgid "Russian (Georgia)"
+msgstr "俄語 (喬治亞)"
+
+#: ../rules/base.xml.in.h:485
+msgid "Ossetian (Georgia)"
+msgstr "奧塞提語 (喬治亞)"
+
+#: ../rules/base.xml.in.h:486 ../rules/base.extras.xml.in.h:11
+msgid "German"
+msgstr "德語"
+
+#: ../rules/base.xml.in.h:487
+msgid "German (dead acute)"
+msgstr "德語 (廢銳音)"
+
+#: ../rules/base.xml.in.h:488
+msgid "German (dead grave acute)"
+msgstr "德語 (廢抑銳音)"
+
+#: ../rules/base.xml.in.h:489
+msgid "German (eliminate dead keys)"
+msgstr "德語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:490
+msgid "German (T3)"
+msgstr "德語 (T3)"
+
+#: ../rules/base.xml.in.h:491
+msgid "Romanian (Germany)"
+msgstr "羅馬尼亞語 (德國)"
+
+#: ../rules/base.xml.in.h:492
+msgid "Romanian (Germany, eliminate dead keys)"
+msgstr "羅馬尼亞語 (德國,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:493
+msgid "German (Dvorak)"
+msgstr "德語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:494
+msgid "German (Sun dead keys)"
+msgstr "德語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:495
+msgid "German (Neo 2)"
+msgstr "德語 (Neo 2)"
+
+#: ../rules/base.xml.in.h:496
+msgid "German (Macintosh)"
+msgstr "德語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:497
+msgid "German (Macintosh, eliminate dead keys)"
+msgstr "德語 (麥金塔,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:498
+msgid "Lower Sorbian"
+msgstr "低地文德語"
+
+#: ../rules/base.xml.in.h:499
+msgid "Lower Sorbian (qwertz)"
+msgstr "低地文德語 (qwertz 配置)"
+
+#: ../rules/base.xml.in.h:500
+msgid "German (qwerty)"
+msgstr "德語 (qwerty 配置)"
+
+#: ../rules/base.xml.in.h:501
+msgid "Russian (Germany, phonetic)"
+msgstr "俄語 (德國,音標)"
+
+#. Keyboard indicator for Greek layouts
+#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91
+msgid "Greek"
+msgstr "希臘語"
+
+#: ../rules/base.xml.in.h:505
+msgid "Greek (simple)"
+msgstr "希臘語 (簡單)"
+
+#: ../rules/base.xml.in.h:506
+msgid "Greek (extended)"
+msgstr "希臘語 (擴充)"
+
+#: ../rules/base.xml.in.h:507
+msgid "Greek (eliminate dead keys)"
+msgstr "希臘語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:508
+msgid "Greek (polytonic)"
+msgstr "希臘語 (多音調)"
+
+#. Keyboard indicator for Hungarian layouts
+#: ../rules/base.xml.in.h:510
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:511
+msgid "Hungarian"
+msgstr "匈牙利語"
+
+#: ../rules/base.xml.in.h:512
+msgid "Hungarian (standard)"
+msgstr "匈牙利語 (標準)"
+
+#: ../rules/base.xml.in.h:513
+msgid "Hungarian (eliminate dead keys)"
+msgstr "匈牙利語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:514
+msgid "Hungarian (qwerty)"
+msgstr "匈牙利語 (qwerty 配置)"
+
+#: ../rules/base.xml.in.h:515
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "匈牙利語 (101/qwertz 配置/逗號/廢鍵)"
+
+#: ../rules/base.xml.in.h:516
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "匈牙利語 (101/qwertz 配置/逗號/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:517
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "匈牙利語 (101/qwertz 配置/句點/廢鍵)"
+
+#: ../rules/base.xml.in.h:518
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "匈牙利語 (101/qwertz 配置句/句點/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:519
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "匈牙利語 (101/qwerty 配置/逗號/廢鍵)"
+
+#: ../rules/base.xml.in.h:520
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "匈牙利語 (101/qwerty 配置/逗號/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:521
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "匈牙利語 (101/qwerty 配置/句點/廢鍵)"
+
+#: ../rules/base.xml.in.h:522
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "匈牙利語 (101/qwerty 配置/句點/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:523
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "匈牙利語 (102/qwertz 配置/逗號/廢鍵)"
+
+#: ../rules/base.xml.in.h:524
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "匈牙利語 (102/qwertz 配置/逗號/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:525
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "匈牙利語 (102/qwertz 配置/句點/廢鍵)"
+
+#: ../rules/base.xml.in.h:526
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "匈牙利語 (102/qwertz 配置/句點/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:527
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "匈牙利語 (102/qwerty 配置/逗號/廢鍵)"
+
+#: ../rules/base.xml.in.h:528
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "匈牙利語 (102/qwerty 配置/逗號/消除廢鍵)"
+
+#: ../rules/base.xml.in.h:529
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "匈牙利語 (102/qwerty 配置/句點/廢鍵)"
+
+#: ../rules/base.xml.in.h:530
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "匈牙利語 (102/qwerty 配置/句點/消除廢鍵)"
+
+#. Keyboard indicator for Icelandic layouts
+#: ../rules/base.xml.in.h:532
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:533
+msgid "Icelandic"
+msgstr "冰島語"
+
+#: ../rules/base.xml.in.h:534
+msgid "Icelandic (Sun dead keys)"
+msgstr "冰島語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:535
+msgid "Icelandic (eliminate dead keys)"
+msgstr "冰島語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:536
+msgid "Icelandic (Macintosh)"
+msgstr "冰島語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:537
+msgid "Icelandic (Dvorak)"
+msgstr "冰島語 (Dvorak 配置)"
+
+#. Keyboard indicator for Hebrew layouts
+#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62
+msgid "Hebrew"
+msgstr "希伯來語"
+
+#: ../rules/base.xml.in.h:541
+msgid "Hebrew (lyx)"
+msgstr "希伯來語 (lyx)"
+
+#: ../rules/base.xml.in.h:542
+msgid "Hebrew (phonetic)"
+msgstr "希伯來語 (音標)"
+
+#: ../rules/base.xml.in.h:543
+msgid "Hebrew (Biblical, Tiro)"
+msgstr "希伯來語 (Biblical,Tiro)"
+
+#. Keyboard indicator for Italian layouts
+#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94
+msgid "Italian"
+msgstr "義大利語"
+
+#: ../rules/base.xml.in.h:547
+msgid "Italian (eliminate dead keys)"
+msgstr "義大利語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:548
+msgid "Italian (Macintosh)"
+msgstr "義大利語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:549
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "義大利語 (美式鍵盤附義大利語字母)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Georgian (Italy)"
+msgstr "喬治亞語 (義大利)"
+
+#: ../rules/base.xml.in.h:551
+msgid "Italian (IBM 142)"
+msgstr "義大利語 (IBM 142)"
+
+#. Keyboard indicator for Japanese layouts
+#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97
+msgid "Japanese"
+msgstr "日語"
+
+#: ../rules/base.xml.in.h:555
+msgid "Japanese (Kana)"
+msgstr "日語 (假名)"
+
+#: ../rules/base.xml.in.h:556
+msgid "Japanese (Kana 86)"
+msgstr "日語 (假名 86)"
+
+#: ../rules/base.xml.in.h:557
+msgid "Japanese (OADG 109A)"
+msgstr "日語 (OADG 109A)"
+
+#: ../rules/base.xml.in.h:558
+msgid "Japanese (Macintosh)"
+msgstr "日語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:559
+msgid "Japanese (Dvorak)"
+msgstr "日語 (Dvorak 配置)"
+
+#. Keyboard indicator for Kikuyu layouts
+#: ../rules/base.xml.in.h:561
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:562
+msgid "Kyrgyz"
+msgstr "吉爾吉斯語"
+
+#: ../rules/base.xml.in.h:563
+msgid "Kyrgyz (phonetic)"
+msgstr "吉爾吉斯 (音標)"
+
+#. Keyboard indicator for Khmer layouts
+#: ../rules/base.xml.in.h:565
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:566
+msgid "Khmer (Cambodia)"
+msgstr "高棉語 (柬埔寨)"
+
+#. Keyboard indicator for Kazakh layouts
+#: ../rules/base.xml.in.h:568
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:569
+msgid "Kazakh"
+msgstr "哈薩克語"
+
+#: ../rules/base.xml.in.h:570
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "俄語 (哈薩克,附哈薩克語)"
+
+#: ../rules/base.xml.in.h:571
+msgid "Kazakh (with Russian)"
+msgstr "哈薩克語 (附俄語)"
+
+#. Keyboard indicator for Lao layouts
+#: ../rules/base.xml.in.h:573
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:574
+msgid "Lao"
+msgstr "老撾語"
+
+#: ../rules/base.xml.in.h:575
+msgid "Lao (STEA proposed standard layout)"
+msgstr "老撾語 (STEA 建議的標準配置)"
+
+#. Keyboard indicator for Spanish layouts
+#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:578
+msgid "Spanish (Latin American)"
+msgstr "西班牙語 (拉丁美洲)"
+
+#: ../rules/base.xml.in.h:579
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "西班牙語 (拉丁美洲,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:580
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "西班牙語 (拉丁美洲,包含廢波折號)"
+
+#: ../rules/base.xml.in.h:581
+msgid "Spanish (Latin American, Sun dead keys)"
+msgstr "西班牙語 (拉丁美洲,昇陽廢鍵)"
+
+#. Keyboard indicator for Lithuanian layouts
+#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19
+msgid "Lithuanian"
+msgstr "立陶宛語"
+
+#: ../rules/base.xml.in.h:585
+msgid "Lithuanian (standard)"
+msgstr "立陶宛語 (標準)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "立陶宛語 (美式鍵盤附立陶宛語字母)"
+
+#: ../rules/base.xml.in.h:587
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "立陶宛語 (IBM LST 1205-92)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Lithuanian (LEKP)"
+msgstr "立陶宛語 (LEKP)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Lithuanian (LEKPa)"
+msgstr "立陶宛語 (LEKPa)"
+
+#. Keyboard indicator for Latvian layouts
+#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23
+msgid "Latvian"
+msgstr "拉脫維亞語"
+
+#: ../rules/base.xml.in.h:593
+msgid "Latvian (apostrophe variant)"
+msgstr "拉脫維亞語 (單引號變體)"
+
+#: ../rules/base.xml.in.h:594
+msgid "Latvian (tilde variant)"
+msgstr "拉脫維亞語 (波折號變體)"
+
+#: ../rules/base.xml.in.h:595
+msgid "Latvian (F variant)"
+msgstr "拉脫維亞語 (F 變體)"
+
+#: ../rules/base.xml.in.h:596
+msgid "Latvian (modern)"
+msgstr "拉脫維亞語 (現代型)"
+
+#: ../rules/base.xml.in.h:597
+msgid "Latvian (ergonomic, ŪGJRMV)"
+msgstr "拉脫維亞語 (人體工學,ŪGJRMV)"
+
+#: ../rules/base.xml.in.h:598
+msgid "Latvian (adapted)"
+msgstr "拉脫維亞語 (調整)"
+
+#. Keyboard indicator for Maori layouts
+#: ../rules/base.xml.in.h:600
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:601
+msgid "Maori"
+msgstr "毛利語"
+
+#. Keyboard indicator for Serbian layouts
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:604
+msgid "Montenegrin"
+msgstr "蒙特內哥羅語"
+
+#: ../rules/base.xml.in.h:605
+msgid "Montenegrin (Cyrillic)"
+msgstr "蒙特內哥羅語 (斯拉夫字母)"
+
+#: ../rules/base.xml.in.h:606
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "蒙特內哥羅語 (斯拉夫字母,Z 和 ZHE 交換)"
+
+#: ../rules/base.xml.in.h:607
+msgid "Montenegrin (Latin Unicode)"
+msgstr "蒙特內哥羅語 (拉丁字母萬國碼)"
+
+#: ../rules/base.xml.in.h:608
+msgid "Montenegrin (Latin qwerty)"
+msgstr "蒙特內哥羅語 (拉丁字母 qwerty 配置)"
+
+#: ../rules/base.xml.in.h:609
+msgid "Montenegrin (Latin Unicode qwerty)"
+msgstr "蒙特內哥羅語 (拉丁字母萬國碼 qwerty 配置)"
+
+#: ../rules/base.xml.in.h:610
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "蒙特內哥羅語 (斯拉夫字母附書名號)"
+
+#: ../rules/base.xml.in.h:611
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "蒙特內哥羅語 (拉丁字母附書名號)"
+
+#. Keyboard indicator for Macedonian layouts
+#: ../rules/base.xml.in.h:613
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:614
+msgid "Macedonian"
+msgstr "馬其頓語"
+
+#: ../rules/base.xml.in.h:615
+msgid "Macedonian (eliminate dead keys)"
+msgstr "馬其頓語 (消除廢鍵)"
+
+#. Keyboard indicator for Maltese layouts
+#: ../rules/base.xml.in.h:617
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:618
+msgid "Maltese"
+msgstr "馬爾他語"
+
+#: ../rules/base.xml.in.h:619
+msgid "Maltese (with US layout)"
+msgstr "馬爾他語 (附美式配置)"
+
+#. Keyboard indicator for Mongolian layouts
+#: ../rules/base.xml.in.h:621
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:622
+msgid "Mongolian"
+msgstr "蒙古語"
+
+#. Keyboard indicator for Norwegian layouts
+#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102
+msgid "Norwegian"
+msgstr "挪威語"
+
+#: ../rules/base.xml.in.h:626
+msgid "Norwegian (eliminate dead keys)"
+msgstr "挪威語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:627
+msgid "Norwegian (Dvorak)"
+msgstr "挪威語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:628
+msgid "Northern Saami (Norway)"
+msgstr "北方薩米語 (挪威)"
+
+#: ../rules/base.xml.in.h:629
+msgid "Northern Saami (Norway, eliminate dead keys)"
+msgstr "北方薩米語 (挪威,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:630
+msgid "Norwegian (Macintosh)"
+msgstr "挪威語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:631
+msgid "Norwegian (Macintosh, eliminate dead keys)"
+msgstr "挪威語 (麥金塔,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:632
+msgid "Norwegian (Colemak)"
+msgstr "挪威語 (Colemak 配置)"
+
+#. Keyboard indicator for Polish layouts
+#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41
+msgid "Polish"
+msgstr "波蘭語"
+
+#: ../rules/base.xml.in.h:636
+msgid "Polish (legacy)"
+msgstr "波蘭語 (舊式)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Polish (qwertz)"
+msgstr "波蘭語 (qwertz 配置)"
+
+#: ../rules/base.xml.in.h:638
+msgid "Polish (Dvorak)"
+msgstr "波蘭語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:639
+msgid "Polish (Dvorak, Polish quotes on quotemark key)"
+msgstr "波蘭語 (Dvorak 配置,波蘭語引號於引號鍵)"
+
+#: ../rules/base.xml.in.h:640
+msgid "Polish (Dvorak, Polish quotes on key 1)"
+msgstr "波蘭語 (Dvorak,波蘭語引號於數字鍵 1)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Kashubian"
+msgstr "卡舒比語"
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "俄語 (波蘭,音標 Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Polish (programmer Dvorak)"
+msgstr "波蘭語 (程式員 Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104
+msgid "Portuguese"
+msgstr "葡萄牙語"
+
+#: ../rules/base.xml.in.h:645
+msgid "Portuguese (eliminate dead keys)"
+msgstr "葡萄牙語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:646
+msgid "Portuguese (Sun dead keys)"
+msgstr "葡萄牙語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:647
+msgid "Portuguese (Macintosh)"
+msgstr "葡萄牙語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:648
+msgid "Portuguese (Macintosh, eliminate dead keys)"
+msgstr "葡萄牙語 (麥金塔,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:649
+msgid "Portuguese (Macintosh, Sun dead keys)"
+msgstr "葡萄牙語 (麥金塔,昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:650
+msgid "Portuguese (Nativo)"
+msgstr "葡萄牙語 (Nativo)"
+
+#: ../rules/base.xml.in.h:651
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "葡萄牙語 (Nativo 用於美式鍵盤)"
+
+#: ../rules/base.xml.in.h:652
+msgid "Esperanto (Portugal, Nativo)"
+msgstr "世界語 (葡萄牙,Nativo)"
+
+#. Keyboard indicator for Romanian layouts
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46
+msgid "Romanian"
+msgstr "羅馬尼亞語"
+
+#: ../rules/base.xml.in.h:656
+msgid "Romanian (cedilla)"
+msgstr "羅馬尼亞語 (尾形符號)"
+
+#: ../rules/base.xml.in.h:657
+msgid "Romanian (standard)"
+msgstr "羅馬尼亞語 (標準)"
+
+#: ../rules/base.xml.in.h:658
+msgid "Romanian (standard cedilla)"
+msgstr "羅馬尼亞語 (標準尾形符號)"
+
+#: ../rules/base.xml.in.h:659
+msgid "Romanian (WinKeys)"
+msgstr "羅馬尼亞語 (WinKeys)"
+
+#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55
+msgid "Russian"
+msgstr "俄語"
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr "俄語 (音標)"
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (phonetic WinKeys)"
+msgstr "俄語 (音標 WinKeys)"
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter)"
+msgstr "俄語 (打字機)"
+
+#: ../rules/base.xml.in.h:664
+msgid "Russian (legacy)"
+msgstr "俄語 (舊式)"
+
+#: ../rules/base.xml.in.h:665
+msgid "Russian (typewriter, legacy)"
+msgstr "俄語 (打字機,舊式)"
+
+#: ../rules/base.xml.in.h:666
+msgid "Tatar"
+msgstr "韃靼語"
+
+#: ../rules/base.xml.in.h:667
+msgid "Ossetian (legacy)"
+msgstr "奧塞提語 (舊式)"
+
+#: ../rules/base.xml.in.h:668
+msgid "Ossetian (WinKeys)"
+msgstr "奧塞提語 (WinKeys)"
+
+#: ../rules/base.xml.in.h:669
+msgid "Chuvash"
+msgstr "楚瓦什語"
+
+#: ../rules/base.xml.in.h:670
+msgid "Chuvash (Latin)"
+msgstr "楚瓦什語 (拉丁字母)"
+
+#: ../rules/base.xml.in.h:671
+msgid "Udmurt"
+msgstr "烏德穆爾特語"
+
+#: ../rules/base.xml.in.h:672
+msgid "Komi"
+msgstr "科米語"
+
+#: ../rules/base.xml.in.h:673
+msgid "Yakut"
+msgstr "雅庫特語"
+
+#: ../rules/base.xml.in.h:674
+msgid "Kalmyk"
+msgstr "卡爾梅克語"
+
+#: ../rules/base.xml.in.h:675
+msgid "Russian (DOS)"
+msgstr "俄語 (DOS)"
+
+#: ../rules/base.xml.in.h:676
+msgid "Russian (Macintosh)"
+msgstr "俄語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:677
+msgid "Serbian (Russia)"
+msgstr "塞爾維亞語 (俄羅斯)"
+
+#: ../rules/base.xml.in.h:678
+msgid "Bashkirian"
+msgstr "巴什喀爾語"
+
+#: ../rules/base.xml.in.h:679
+msgid "Mari"
+msgstr "馬里語"
+
+#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52
+msgid "Serbian"
+msgstr "塞爾維亞語"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Cyrillic, Z and ZHE swapped)"
+msgstr "塞爾維亞語 (斯拉夫字母,Z 和 ZHE 交換)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin)"
+msgstr "塞爾維亞語 (拉丁字母)"
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin Unicode)"
+msgstr "塞爾維亞語 (拉丁字母萬國碼)"
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Latin qwerty)"
+msgstr "塞爾維亞語 (拉丁字母 qwerty 配置)"
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "塞爾維亞語 (拉丁字母萬國碼 qwerty 配置)"
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (Cyrillic with guillemets)"
+msgstr "塞爾維亞語 (斯拉夫字母附書名號)"
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbian (Latin with guillemets)"
+msgstr "塞爾維亞語 (拉丁字母附書名號)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Pannonian Rusyn (homophonic)"
+msgstr "潘諾尼亞盧森尼亞語 (諧音)"
+
+#. Keyboard indicator for Slovenian layouts
+#: ../rules/base.xml.in.h:690
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:691
+msgid "Slovenian"
+msgstr "斯洛維尼亞語"
+
+#: ../rules/base.xml.in.h:692
+msgid "Slovenian (use guillemets for quotes)"
+msgstr "斯洛維尼亞語 (書名號做為引號)"
+
+#: ../rules/base.xml.in.h:693
+msgid "Slovenian (US keyboard with Slovenian letters)"
+msgstr "斯洛維尼亞語 (美式鍵盤附斯洛維尼亞字母)"
+
+#. Keyboard indicator for Slovak layouts
+#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107
+msgid "Slovak"
+msgstr "斯洛伐克"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (extended Backslash)"
+msgstr "斯洛伐克 (擴充反斜線)"
+
+#: ../rules/base.xml.in.h:698
+msgid "Slovak (qwerty)"
+msgstr "斯洛伐克 (qwerty 配置)"
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "斯洛伐克 (qwerty 配置,擴充反斜線)"
+
+#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110
+msgid "Spanish"
+msgstr "西班牙語"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish (eliminate dead keys)"
+msgstr "西班牙語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (include dead tilde)"
+msgstr "西班牙語 (包含廢波折號)"
+
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Sun dead keys)"
+msgstr "西班牙語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "西班牙語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:705
+msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
+msgstr "阿斯圖里亞斯語 (西班牙,附底點 H 和底點 L)"
+
+#: ../rules/base.xml.in.h:706
+msgid "Catalan (Spain, with middle-dot L)"
+msgstr "加泰羅尼亞語 (西班牙,附中點 L)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Macintosh)"
+msgstr "西班牙語 (麥金塔)"
+
+#. Keyboard indicator for Swedish layouts
+#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113
+msgid "Swedish"
+msgstr "瑞典語"
+
+#: ../rules/base.xml.in.h:711
+msgid "Swedish (eliminate dead keys)"
+msgstr "瑞典語 (消除廢鍵)"
+
+#: ../rules/base.xml.in.h:712
+msgid "Swedish (Dvorak)"
+msgstr "瑞典語 (Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:713
+msgid "Russian (Sweden, phonetic)"
+msgstr "俄語 (瑞典,音標)"
+
+#: ../rules/base.xml.in.h:714
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "俄語 (瑞典,音標,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:715
+msgid "Northern Saami (Sweden)"
+msgstr "北方薩米語 (瑞典)"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swedish (Macintosh)"
+msgstr "瑞典語 (麥金塔)"
+
+#: ../rules/base.xml.in.h:717
+msgid "Swedish (Svdvorak)"
+msgstr "瑞典語 (Svdvorak)"
+
+#: ../rules/base.xml.in.h:718
+msgid "Swedish Sign Language"
+msgstr "瑞典手語"
+
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115
+msgid "German (Switzerland)"
+msgstr "德語 (瑞士)"
+
+#: ../rules/base.xml.in.h:720
+msgid "German (Switzerland, legacy)"
+msgstr "德語 (瑞士,舊式)"
+
+#: ../rules/base.xml.in.h:721
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "德語 (瑞士,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:722
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "德語 (瑞士,昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:723
+msgid "French (Switzerland)"
+msgstr "法語 (瑞士)"
+
+#: ../rules/base.xml.in.h:724
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "法語 (瑞士,消除廢鍵)"
+
+#: ../rules/base.xml.in.h:725
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "法語 (瑞士,昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:726
+msgid "French (Switzerland, Macintosh)"
+msgstr "法語 (瑞士,麥金塔)"
+
+#: ../rules/base.xml.in.h:727
+msgid "German (Switzerland, Macintosh)"
+msgstr "德語 (瑞士,麥金塔)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Arabic (Syria)"
+msgstr "阿拉伯語 (敘利亞)"
+
+#. Keyboard indicator for Syriac layouts
+#: ../rules/base.xml.in.h:730
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:731
+msgid "Syriac"
+msgstr "敘利亞語"
+
+#: ../rules/base.xml.in.h:732
+msgid "Syriac (phonetic)"
+msgstr "敘利亞語 (音標)"
+
+#: ../rules/base.xml.in.h:733
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "庫德語 (敘利亞,拉丁字母 Q)"
+
+#: ../rules/base.xml.in.h:734
+msgid "Kurdish (Syria, F)"
+msgstr "庫德語 (敘利亞,F)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "庫德語 (敘利亞,拉丁字母 Alt-Q)"
+
+#. Keyboard indicator for Tajik layouts
+#: ../rules/base.xml.in.h:737
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:738
+msgid "Tajik"
+msgstr "塔吉克語"
+
+#: ../rules/base.xml.in.h:739
+msgid "Tajik (legacy)"
+msgstr "塔吉克語 (舊式)"
+
+#. Keyboard indicator for Sinhala layouts
+#: ../rules/base.xml.in.h:741
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:742
+msgid "Sinhala (phonetic)"
+msgstr "錫蘭僧加羅語 (音標)"
+
+#: ../rules/base.xml.in.h:743
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "坦米爾語 (斯里蘭卡,萬國碼)"
+
+#: ../rules/base.xml.in.h:744
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "坦米爾語 (斯里蘭卡,跳格打字機)"
+
+#. Keyboard indicator for Thai layouts
+#: ../rules/base.xml.in.h:746
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:747
+msgid "Thai"
+msgstr "泰語"
+
+#: ../rules/base.xml.in.h:748
+msgid "Thai (TIS-820.2538)"
+msgstr "泰語 (TIS-820.2538)"
+
+#: ../rules/base.xml.in.h:749
+msgid "Thai (Pattachote)"
+msgstr "泰語 (Pattachote)"
+
+#. Keyboard indicator for Turkish layouts
+#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119
+msgid "Turkish"
+msgstr "土耳其語"
+
+#: ../rules/base.xml.in.h:753
+msgid "Turkish (F)"
+msgstr "土耳其語 (F)"
+
+#: ../rules/base.xml.in.h:754
+msgid "Turkish (Alt-Q)"
+msgstr "土耳其語 (Alt-Q)"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish (Sun dead keys)"
+msgstr "土耳其語 (昇陽廢鍵)"
+
+#: ../rules/base.xml.in.h:756
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "庫德語 (土耳其,拉丁字母 Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Kurdish (Turkey, F)"
+msgstr "庫德語 (土耳其,F)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "庫德語 (土耳其,拉丁字母 Alt-Q)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (international with dead keys)"
+msgstr "土耳其語 (國際版附廢鍵)"
+
+#. Keyboard indicator for Crimean Tatar layouts
+#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47
+msgid "crh"
+msgstr "crh"
+
+#: ../rules/base.xml.in.h:762
+msgid "Crimean Tatar (Turkish Q)"
+msgstr "克里米亞韃靼語 (土耳其語 Q)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Crimean Tatar (Turkish F)"
+msgstr "克里米亞韃靼語 (土耳其語 F)"
+
+#: ../rules/base.xml.in.h:764
+msgid "Crimean Tatar (Turkish Alt-Q)"
+msgstr "克里米亞韃靼語 (土耳其語 Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "Taiwanese"
+msgstr "臺灣語"
+
+#: ../rules/base.xml.in.h:766
+msgid "Taiwanese (indigenous)"
+msgstr "臺灣語 (原住民)"
+
+#. Keyboard indicator for Saisiyat layouts
+#: ../rules/base.xml.in.h:768
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:769
+msgid "Saisiyat (Taiwan)"
+msgstr "賽夏族語 (臺灣)"
+
+#. Keyboard indicator for Ukranian layouts
+#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122
+msgid "Ukrainian"
+msgstr "烏克蘭語"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (phonetic)"
+msgstr "烏克蘭語 (音標)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (typewriter)"
+msgstr "烏克蘭語 (打字機)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (WinKeys)"
+msgstr "烏克蘭語 (WinKeys)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "烏克蘭語 (舊式)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (standard RSTU)"
+msgstr "烏克蘭語 (標準 RSTU)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Russian (Ukraine, standard RSTU)"
+msgstr "俄語 (烏克蘭,標準 RSTU)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (homophonic)"
+msgstr "烏克蘭語 (homophonic)"
+
+#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124
+msgid "English (UK)"
+msgstr "英語 (英式)"
+
+#: ../rules/base.xml.in.h:781
+msgid "English (UK, extended WinKeys)"
+msgstr "英語 (英式,擴充 WinKeys)"
+
+#: ../rules/base.xml.in.h:782
+msgid "English (UK, international with dead keys)"
+msgstr "英語 (英式,國際版附廢鍵)"
+
+#: ../rules/base.xml.in.h:783
+msgid "English (UK, Dvorak)"
+msgstr "英語 (英式,Dvorak 配置)"
+
+#: ../rules/base.xml.in.h:784
+msgid "English (UK, Dvorak with UK punctuation)"
+msgstr "英語 (英式,Dvorak 配置附 UK 標點符號)"
+
+#: ../rules/base.xml.in.h:785
+msgid "English (UK, Macintosh)"
+msgstr "英語 (英式,麥金塔)"
+
+#: ../rules/base.xml.in.h:786
+msgid "English (UK, Macintosh international)"
+msgstr "英語 (英式,麥金塔國際版)"
+
+#: ../rules/base.xml.in.h:787
+msgid "English (UK, Colemak)"
+msgstr "英語 (英式,Colemak 配置)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Uzbek"
+msgstr "烏茲別克語"
+
+#: ../rules/base.xml.in.h:789
+msgid "Uzbek (Latin)"
+msgstr "烏茲別克語 (拉丁字母)"
+
+#. Keyboard indicator for Vietnamese layouts
+#: ../rules/base.xml.in.h:791
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:792
+msgid "Vietnamese"
+msgstr "越南語"
+
+#. Keyboard indicator for Korean layouts
+#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127
+msgid "Korean"
+msgstr "韓語"
+
+#: ../rules/base.xml.in.h:796
+msgid "Korean (101/104 key compatible)"
+msgstr "韓語 (101/104 鍵相容)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Japanese (PC-98xx Series)"
+msgstr "日語 (PC-98 xx 系列)"
+
+#. Keyboard indicator for Irish layouts
+#: ../rules/base.xml.in.h:799
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:800
+msgid "Irish"
+msgstr "愛爾蘭語"
+
+#: ../rules/base.xml.in.h:801
+msgid "CloGaelach"
+msgstr "CloGaelach"
+
+#: ../rules/base.xml.in.h:802
+msgid "Irish (UnicodeExpert)"
+msgstr "愛爾蘭語 (萬國碼專家)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Ogham"
+msgstr "歐甘語 (古愛爾蘭)"
+
+#: ../rules/base.xml.in.h:804
+msgid "Ogham (IS434)"
+msgstr "歐甘語 (IS434)"
+
+#: ../rules/base.xml.in.h:805
+msgid "Urdu (Pakistan)"
+msgstr "烏爾都語 (巴基斯坦)"
+
+#: ../rules/base.xml.in.h:806
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "烏爾都語 (巴基斯坦,CRULP)"
+
+#: ../rules/base.xml.in.h:807
+msgid "Urdu (Pakistan, NLA)"
+msgstr "烏爾都語 (巴基斯坦,NLA)"
+
+#: ../rules/base.xml.in.h:808
+msgid "Arabic (Pakistan)"
+msgstr "阿拉伯語 (巴基斯坦)"
+
+#. Keyboard indicator for Sindhi layouts
+#: ../rules/base.xml.in.h:810
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:811
+msgid "Sindhi"
+msgstr "信德語"
+
+#. Keyboard indicator for Dhivehi layouts
+#: ../rules/base.xml.in.h:813
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:814
+msgid "Dhivehi"
+msgstr "迪貝喜語"
+
+#: ../rules/base.xml.in.h:815
+msgid "English (South Africa)"
+msgstr "英語 (南非)"
+
+#. Keyboard indicator for Esperanto layouts
+#: ../rules/base.xml.in.h:817
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:818
+msgid "Esperanto"
+msgstr "世界語"
+
+#: ../rules/base.xml.in.h:819
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "世界語 (替換的分號和引號,已淘汰)"
+
+#. Keyboard indicator for Nepali layouts
+#: ../rules/base.xml.in.h:821
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:822
+msgid "Nepali"
+msgstr "尼泊爾語"
+
+#: ../rules/base.xml.in.h:823
+msgid "English (Nigeria)"
+msgstr "英語 (奈及利亞)"
+
+#. Keyboard indicator for Igbo layouts
+#: ../rules/base.xml.in.h:825
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:826
+msgid "Igbo"
+msgstr "伊布語"
+
+#. Keyboard indicator for Yoruba layouts
+#: ../rules/base.xml.in.h:828
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:829
+msgid "Yoruba"
+msgstr "約魯巴語"
+
+#. Keyboard indicator for Amharic layouts
+#: ../rules/base.xml.in.h:831
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:832
+msgid "Amharic"
+msgstr "阿姆哈拉語"
+
+#. Keyboard indicator for Wolof layouts
+#: ../rules/base.xml.in.h:834
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:835
+msgid "Wolof"
+msgstr "渥魯夫語"
+
+#. Keyboard indicator for Braille layouts
+#: ../rules/base.xml.in.h:837
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:838
+msgid "Braille"
+msgstr "盲人點字符號"
+
+#: ../rules/base.xml.in.h:839
+msgid "Braille (left hand)"
+msgstr "盲人點字符號 (左手)"
+
+#: ../rules/base.xml.in.h:840
+msgid "Braille (right hand)"
+msgstr "盲人點字符號 (右手)"
+
+#. Keyboard indicator for Turkmen layouts
+#: ../rules/base.xml.in.h:842
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:843
+msgid "Turkmen"
+msgstr "土庫曼語"
+
+#: ../rules/base.xml.in.h:844
+msgid "Turkmen (Alt-Q)"
+msgstr "土庫曼語 (Alt-Q)"
+
+#. Keyboard indicator for Bambara layouts
+#: ../rules/base.xml.in.h:846
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:847
+msgid "Bambara"
+msgstr "班巴拉語"
+
+#: ../rules/base.xml.in.h:848
+msgid "French (Mali, alternative)"
+msgstr "法語 (馬利,替代)"
+
+#: ../rules/base.xml.in.h:849
+msgid "English (Mali, US Macintosh)"
+msgstr "英語 (馬利,美式麥金塔)"
+
+#: ../rules/base.xml.in.h:850
+msgid "English (Mali, US international)"
+msgstr "英語 (馬利,美式國際版)"
+
+#. Keyboard indicator for Swahili layouts
+#: ../rules/base.xml.in.h:852
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:853
+msgid "Swahili (Tanzania)"
+msgstr "史瓦西里語 (坦尚尼亞)"
+
+#: ../rules/base.xml.in.h:854
+msgid "Swahili (Kenya)"
+msgstr "史瓦西里語 (肯亞)"
+
+#: ../rules/base.xml.in.h:855
+msgid "Kikuyu"
+msgstr "基庫尤語"
+
+#. Keyboard indicator for Tswana layouts
+#: ../rules/base.xml.in.h:857
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:858
+msgid "Tswana"
+msgstr "茨瓦納語"
+
+#. Keyboard indicator for Filipino layouts
+#: ../rules/base.xml.in.h:860
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:861
+msgid "Filipino"
+msgstr "菲律賓語"
+
+#: ../rules/base.xml.in.h:862
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "菲律賓語 (QWERTY 配置貝貝因字母)"
+
+#: ../rules/base.xml.in.h:863
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "菲律賓語 (Capewell-Dvorak 配置拉丁字母)"
+
+#: ../rules/base.xml.in.h:864
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "菲律賓語 (Capewell-Dvorak 配置貝貝因字母)"
+
+#: ../rules/base.xml.in.h:865
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "菲律賓語 (Capewell-QWERF 配置 2006 拉丁字母)"
+
+#: ../rules/base.xml.in.h:866
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "菲律賓語 (Capewell-QWERF 配置 2006 貝貝因字母)"
+
+#: ../rules/base.xml.in.h:867
+msgid "Filipino (Colemak Latin)"
+msgstr "菲律賓語 (Colemak 配置拉丁字母)"
+
+#: ../rules/base.xml.in.h:868
+msgid "Filipino (Colemak Baybayin)"
+msgstr "菲律賓語 (Colemak 配置貝貝因字母)"
+
+#: ../rules/base.xml.in.h:869
+msgid "Filipino (Dvorak Latin)"
+msgstr "菲律賓語 (Dvorak 配置拉丁字母)"
+
+#: ../rules/base.xml.in.h:870
+msgid "Filipino (Dvorak Baybayin)"
+msgstr "菲律賓語 (Dvorak 配置貝貝因字母)"
+
+#: ../rules/base.xml.in.h:871
+msgid "md"
+msgstr "md"
+
+#: ../rules/base.xml.in.h:872
+msgid "Moldavian"
+msgstr "摩爾達維亞語"
+
+#: ../rules/base.xml.in.h:873
+msgid "gag"
+msgstr "gag"
+
+#: ../rules/base.xml.in.h:874
+msgid "Moldavian (Gagauz)"
+msgstr "摩爾達維亞語 (加告茲)"
+
+#: ../rules/base.xml.in.h:875
+msgid "Key(s) to change layout"
+msgstr "變更配置的按鍵"
+
+#: ../rules/base.xml.in.h:876
+msgid "Right Alt (while pressed)"
+msgstr "右側 Alt (按下時)"
+
+#: ../rules/base.xml.in.h:877
+msgid "Left Alt (while pressed)"
+msgstr "左側 Alt (按下時)"
+
+#: ../rules/base.xml.in.h:878
+msgid "Left Win (while pressed)"
+msgstr "左側 Win (按下時)"
+
+#: ../rules/base.xml.in.h:879
+msgid "Right Win (while pressed)"
+msgstr "右側 Win (按下時)"
+
+#: ../rules/base.xml.in.h:880
+msgid "Any Win key (while pressed)"
+msgstr "任何 Win 鍵 (按下時)"
+
+#: ../rules/base.xml.in.h:881
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "大寫鍵 (按下時),Alt+大寫鍵做原來的 capslock 動作"
+
+#: ../rules/base.xml.in.h:882
+msgid "Right Ctrl (while pressed)"
+msgstr "右側 Ctrl (按下時)"
+
+#: ../rules/base.xml.in.h:883
+msgid "Right Alt"
+msgstr "右側 Alt"
+
+#: ../rules/base.xml.in.h:884
+msgid "Left Alt"
+msgstr "左側 Alt"
+
+#: ../rules/base.xml.in.h:885
+msgid "Caps Lock"
+msgstr "大寫鍵"
+
+#: ../rules/base.xml.in.h:886
+msgid "Shift+Caps Lock"
+msgstr "Shift+大寫鍵"
+
+#: ../rules/base.xml.in.h:887
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "大寫鍵 (第一配置),Shift+大寫鍵 (最後配置)"
+
+#: ../rules/base.xml.in.h:888
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "左側 Win (第一配置),右側 Win/Menu (最後配置)"
+
+#: ../rules/base.xml.in.h:889
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "左側 Ctrl (第一配置),右側 Ctrl (最後配置)"
+
+#: ../rules/base.xml.in.h:890
+msgid "Alt+Caps Lock"
+msgstr "Alt+大寫鍵"
+
+#: ../rules/base.xml.in.h:891
+msgid "Both Shift keys together"
+msgstr "兩個 Shift 鍵一起"
+
+#: ../rules/base.xml.in.h:892
+msgid "Both Alt keys together"
+msgstr "兩個 Alt 鍵一起"
+
+#: ../rules/base.xml.in.h:893
+msgid "Both Ctrl keys together"
+msgstr "兩個 Ctrl 鍵一起"
+
+#: ../rules/base.xml.in.h:894
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+#: ../rules/base.xml.in.h:895
+msgid "Left Ctrl+Left Shift"
+msgstr "左側 Ctrl+左側 Shift"
+
+#: ../rules/base.xml.in.h:896
+msgid "Right Ctrl+Right Shift"
+msgstr "右側 Ctrl+右側 Shift"
+
+#: ../rules/base.xml.in.h:897
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+#: ../rules/base.xml.in.h:898
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+#: ../rules/base.xml.in.h:899
+msgid "Left Alt+Left Shift"
+msgstr "左側 Alt+左側 Shift"
+
+#: ../rules/base.xml.in.h:900
+msgid "Alt+Space"
+msgstr "Alt+空白"
+
+#: ../rules/base.xml.in.h:901
+msgid "Menu"
+msgstr "Menu"
+
+#: ../rules/base.xml.in.h:902
+msgid "Left Win"
+msgstr "左側 Win"
+
+#: ../rules/base.xml.in.h:903
+msgid "Right Win"
+msgstr "右側 Win"
+
+#: ../rules/base.xml.in.h:904
+msgid "Left Shift"
+msgstr "左側 Shift"
+
+#: ../rules/base.xml.in.h:905
+msgid "Right Shift"
+msgstr "右側 Shift"
+
+#: ../rules/base.xml.in.h:906
+msgid "Left Ctrl"
+msgstr "左側 Ctrl"
+
+#: ../rules/base.xml.in.h:907
+msgid "Right Ctrl"
+msgstr "右側 Ctrl"
+
+#: ../rules/base.xml.in.h:908
+msgid "Scroll Lock"
+msgstr "捲動鎖定"
+
+#: ../rules/base.xml.in.h:909
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "左側 Ctrl+左側 Win (第一配置),右側 Ctrl+Menu (第二配置)"
+
+#: ../rules/base.xml.in.h:910
+msgid "Key to choose 3rd level"
+msgstr "鍵到選擇第三等級"
+
+#: ../rules/base.xml.in.h:911
+msgid "Any Win key"
+msgstr "任何 Win 鍵"
+
+#: ../rules/base.xml.in.h:912
+msgid "Any Alt key"
+msgstr "任何 Alt 鍵"
+
+#: ../rules/base.xml.in.h:913
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "右側 Alt,Shift+右側 Alt 鍵是 Multi_Key"
+
+#: ../rules/base.xml.in.h:914
+msgid "Right Alt key never chooses 3rd level"
+msgstr "右側 Alt 鍵永不選擇第三等級"
+
+#: ../rules/base.xml.in.h:915
+msgid "Enter on keypad"
+msgstr "輸入於數字鍵臺"
+
+#: ../rules/base.xml.in.h:916
+msgid "Backslash"
+msgstr "反斜線"
+
+#: ../rules/base.xml.in.h:917
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;小於/大於&gt;"
+
+#: ../rules/base.xml.in.h:918
+msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "大寫鍵選擇第三等級,當與另外的第三等級選擇鍵一起按時,做為一次鎖定"
+
+#: ../rules/base.xml.in.h:919
+msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "反斜線選擇第三等級,當與另外的第三等級選擇鍵一起按時,做為一次鎖定"
+
+#: ../rules/base.xml.in.h:920
+msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "&lt;小於/大於&gt;選擇第三等級,當與另外的第三等級選擇鍵一起按時,做為一次鎖定"
+
+#: ../rules/base.xml.in.h:921
+msgid "Ctrl key position"
+msgstr "Ctrl 鍵位置"
+
+#: ../rules/base.xml.in.h:922
+msgid "Caps Lock as Ctrl"
+msgstr "大寫鍵做為 Ctrl"
+
+#: ../rules/base.xml.in.h:923
+msgid "Left Ctrl as Meta"
+msgstr "左側 Ctrl 做為 Meta"
+
+#: ../rules/base.xml.in.h:924
+msgid "Swap Ctrl and Caps Lock"
+msgstr "交換 Ctrl 和大寫鍵"
+
+#: ../rules/base.xml.in.h:925
+msgid "At left of 'A'"
+msgstr "於 A 左側"
+
+#: ../rules/base.xml.in.h:926
+msgid "At bottom left"
+msgstr "於左下角"
+
+#: ../rules/base.xml.in.h:927
+msgid "Right Ctrl as Right Alt"
+msgstr "右側 Ctrl 做為右側 Alt"
+
+#: ../rules/base.xml.in.h:928
+msgid "Menu as Right Ctrl"
+msgstr "Menu 做為右側 Ctrl"
+
+#: ../rules/base.xml.in.h:929
+msgid "Right Alt as Right Ctrl"
+msgstr "右側 Alt 做為右側 Ctrl"
+
+#: ../rules/base.xml.in.h:930
+msgid "Use keyboard LED to show alternative layout"
+msgstr "使用鍵盤 LED 以顯示替代配置"
+
+#: ../rules/base.xml.in.h:931
+msgid "Num Lock"
+msgstr "數字鍵臺鎖定"
+
+#: ../rules/base.xml.in.h:932
+msgid "Numeric keypad layout selection"
+msgstr "數字鍵臺配置選擇"
+
+#: ../rules/base.xml.in.h:933
+msgid "Legacy"
+msgstr "舊式"
+
+#: ../rules/base.xml.in.h:934
+msgid "Unicode additions (arrows and math operators)"
+msgstr "萬國碼附加 (箭頭和數學運算子)"
+
+#: ../rules/base.xml.in.h:935
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "萬國碼附加 (箭頭和數學運算子)。數學運算子於預設等級"
+
+#: ../rules/base.xml.in.h:936
+msgid "Legacy Wang 724"
+msgstr "舊式 Wang 724"
+
+#: ../rules/base.xml.in.h:937
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
+msgstr "Wang 724 數字鍵臺具備萬國碼附加 (箭頭和數學運算子)"
+
+#: ../rules/base.xml.in.h:938
+msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Wang 724 數字鍵臺具備萬國碼附加 (箭頭和數學運算子)。數學運算子於預設等級"
+
+#: ../rules/base.xml.in.h:939
+msgid "Hexadecimal"
+msgstr "十六進位"
+
+#: ../rules/base.xml.in.h:940
+msgid "ATM/phone-style"
+msgstr "自動櫃員機/電話樣式"
+
+#: ../rules/base.xml.in.h:941
+msgid "Numeric keypad delete key behaviour"
+msgstr "數字鍵臺刪除鍵行為"
+
+#: ../rules/base.xml.in.h:942
+msgid "Legacy key with dot"
+msgstr "舊式鍵附句點"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:944
+msgid "Legacy key with comma"
+msgstr "舊式鍵附逗號"
+
+#: ../rules/base.xml.in.h:945
+msgid "Four-level key with dot"
+msgstr "四等級鍵附句點"
+
+#: ../rules/base.xml.in.h:946
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "四等級鍵附句點,latin-9 限制"
+
+#: ../rules/base.xml.in.h:947
+msgid "Four-level key with comma"
+msgstr "四等級鍵附逗號"
+
+#: ../rules/base.xml.in.h:948
+msgid "Four-level key with momayyez"
+msgstr "四等級鍵附 momayyez"
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:951
+msgid "Four-level key with abstract separators"
+msgstr "四等級鍵附摘要分隔符號"
+
+#: ../rules/base.xml.in.h:952
+msgid "Semi-colon on third level"
+msgstr "分號於第三等級"
+
+#: ../rules/base.xml.in.h:953
+msgid "Caps Lock key behavior"
+msgstr "大寫鍵行為"
+
+#: ../rules/base.xml.in.h:954
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "大寫鍵使用內部大寫。Shift「暫停」大寫鍵"
+
+#: ../rules/base.xml.in.h:955
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "大寫鍵使用內部大寫。Shift 不影響大寫鍵"
+
+#: ../rules/base.xml.in.h:956
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "大寫鍵扮演 Shift 附鎖定。Shift「暫停」大寫鍵"
+
+#: ../rules/base.xml.in.h:957
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "大寫鍵扮演 Shift 附鎖定。Shift 不影響大寫鍵"
+
+#: ../rules/base.xml.in.h:958
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "大寫鍵切換一般字母的大寫"
+
+#: ../rules/base.xml.in.h:959
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "將大寫鍵做為額外的數字鍵臺鎖定"
+
+#: ../rules/base.xml.in.h:960
+msgid "Swap ESC and Caps Lock"
+msgstr "交換 ESC 和大寫鍵"
+
+#: ../rules/base.xml.in.h:961
+msgid "Make Caps Lock an additional ESC"
+msgstr "將大寫鍵做為額外的 ESC"
+
+#: ../rules/base.xml.in.h:962
+msgid "Make Caps Lock an additional Backspace"
+msgstr "將大寫鍵做為額外的退格鍵"
+
+#: ../rules/base.xml.in.h:963
+msgid "Make Caps Lock an additional Super"
+msgstr "將大寫鍵做為額外的 Super"
+
+#: ../rules/base.xml.in.h:964
+msgid "Make Caps Lock an additional Hyper"
+msgstr "將大寫鍵做為額外的 Hyper"
+
+#: ../rules/base.xml.in.h:965
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "大寫鍵會切換 Shift 因而會影響所有按鍵"
+
+#: ../rules/base.xml.in.h:966
+msgid "Caps Lock is disabled"
+msgstr "已停用大寫鍵"
+
+#: ../rules/base.xml.in.h:967
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "將大寫鍵做為額外的 Control 但是保留 Caps_Lock keysym"
+
+#: ../rules/base.xml.in.h:968
+msgid "Alt/Win key behavior"
+msgstr "Alt/Win 鍵功能"
+
+#: ../rules/base.xml.in.h:969
+msgid "Add the standard behavior to Menu key"
+msgstr "加入標準行為到 Menu 鍵"
+
+#: ../rules/base.xml.in.h:970
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt 和 Meta 都位於 Alt 鍵"
+
+#: ../rules/base.xml.in.h:971
+msgid "Alt is mapped to Win keys (and the usual Alt keys)"
+msgstr "Alt 被映射到 Win 鍵 (以及一般的 Alt 鍵)"
+
+#: ../rules/base.xml.in.h:972
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control 被映射到 Win 鍵 (以及一般的 Ctrl 鍵)"
+
+#: ../rules/base.xml.in.h:973
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control 被映射到 Alt 鍵,Alt 被映射到 Win 鍵"
+
+#: ../rules/base.xml.in.h:974
+msgid "Meta is mapped to Win keys"
+msgstr "Meta 被映射到 Win 鍵"
+
+#: ../rules/base.xml.in.h:975
+msgid "Meta is mapped to Left Win"
+msgstr "Meta 被映射到左側 Win"
+
+#: ../rules/base.xml.in.h:976
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper 被映射到 Win 鍵"
+
+#: ../rules/base.xml.in.h:977
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt 被映射到右側 Win,Super 被映射到 Menu"
+
+#: ../rules/base.xml.in.h:978
+msgid "Alt is swapped with Win"
+msgstr "Alt 被交換到 Win"
+
+#: ../rules/base.xml.in.h:979
+msgid "Compose key position"
+msgstr "Compose 鍵的位置"
+
+#: ../rules/base.xml.in.h:980
+msgid "3rd level of Left Win"
+msgstr "左側 Win 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:981
+msgid "3rd level of Right Win"
+msgstr "右側 Win 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:982
+msgid "3rd level of Menu"
+msgstr "Menu 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:983
+msgid "3rd level of Left Ctrl"
+msgstr "左側 Ctrl 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:984
+msgid "3rd level of Right Ctrl"
+msgstr "右側 Ctrl 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:985
+msgid "3rd level of Caps Lock"
+msgstr "Cap Lock 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:986
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "&lt;小於/大於&gt; 鍵的第三等級"
+
+#: ../rules/base.xml.in.h:987
+msgid "Pause"
+msgstr "暫停"
+
+#: ../rules/base.xml.in.h:988
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:989
+msgid "Miscellaneous compatibility options"
+msgstr "其它相容選項"
+
+#: ../rules/base.xml.in.h:990
+msgid "Default numeric keypad keys"
+msgstr "預設數字鍵臺鍵"
+
+#: ../rules/base.xml.in.h:991
+msgid "Numeric keypad keys always enter digits (as in Mac OS)"
+msgstr "數字鍵臺鍵一律輸入數字 (如同 Mac 作業系統)"
+
+#: ../rules/base.xml.in.h:992
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Shift 加數字鍵臺鍵作用與在 MS Windows 中相同"
+
+#: ../rules/base.xml.in.h:993
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift 不會取消數字鎖定,而是選擇第三等級"
+
+#: ../rules/base.xml.in.h:994
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "特殊鍵 (Ctrl+Alt+&lt;鍵&gt;) 由一個伺服器處理"
+
+#: ../rules/base.xml.in.h:995
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "蘋果鋁製鍵盤:模擬 PC 鍵 (列印,捲動鎖定,暫停,數字鎖定)"
+
+#: ../rules/base.xml.in.h:996
+msgid "Shift cancels Caps Lock"
+msgstr "Shift 取消大寫鍵"
+
+#: ../rules/base.xml.in.h:997
+msgid "Enable extra typographic characters"
+msgstr "啟用額外的印刷字元"
+
+#: ../rules/base.xml.in.h:998
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "兩個 Shift 鍵一起按會切換大寫鍵"
+
+#: ../rules/base.xml.in.h:999
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "兩個 Shift 鍵一起按會開啟大寫鍵,一個 Shift 鍵則關閉"
+
+#: ../rules/base.xml.in.h:1000
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "兩個 Shift 鍵一起按會切換 Shift 鎖定"
+
+#: ../rules/base.xml.in.h:1001
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "以 Shift + NumLock 切換 PointerKeys。"
+
+#: ../rules/base.xml.in.h:1002
+msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
+msgstr "允許以鍵盤動作中斷抓取 (警告:有安全風險)"
+
+#: ../rules/base.xml.in.h:1003
+msgid "Adding currency signs to certain keys"
+msgstr "加入貨幣符號到特定鍵"
+
+#: ../rules/base.xml.in.h:1004
+msgid "Euro on E"
+msgstr "歐元於 E"
+
+#: ../rules/base.xml.in.h:1005
+msgid "Euro on 2"
+msgstr "歐元於 2"
+
+#: ../rules/base.xml.in.h:1006
+msgid "Euro on 4"
+msgstr "歐元於 4"
+
+#: ../rules/base.xml.in.h:1007
+msgid "Euro on 5"
+msgstr "歐元於 5"
+
+#: ../rules/base.xml.in.h:1008
+msgid "Rupee on 4"
+msgstr "盧比於 4"
+
+#: ../rules/base.xml.in.h:1009
+msgid "Key to choose 5th level"
+msgstr "選擇第五等級的按鍵"
+
+#: ../rules/base.xml.in.h:1010
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;小於/大於&gt;選擇第五等級,當與另外的第五等級選擇鍵一起按時則鎖定"
+
+#: ../rules/base.xml.in.h:1011
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "右側 Alt 選擇第五等級,當與另外的第五等級選擇鍵一起按時則鎖定"
+
+#: ../rules/base.xml.in.h:1012
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "左側 Win 選擇第五等級,當與另外的第五等級選擇鍵一起按時則鎖定"
+
+#: ../rules/base.xml.in.h:1013
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "右側 Win 選擇第五等級,當與另外的第五等級選擇鍵一起按時則鎖定"
+
+#: ../rules/base.xml.in.h:1014
+msgid "Using space key to input non-breakable space character"
+msgstr "使用空白鍵輸入不可斷列的空白字元"
+
+#: ../rules/base.xml.in.h:1015
+msgid "Usual space at any level"
+msgstr "一般空白於任何等級"
+
+#: ../rules/base.xml.in.h:1016
+msgid "Non-breakable space character at second level"
+msgstr "不可斷列的空白字元於第二等級"
+
+#: ../rules/base.xml.in.h:1017
+msgid "Non-breakable space character at third level"
+msgstr "不可斷列的空白字元於第三等級"
+
+#: ../rules/base.xml.in.h:1018
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "不可斷列的空白字元於第三等級,沒有任何東西於第四等級"
+
+#: ../rules/base.xml.in.h:1019
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "不可斷列的空白字元於第三等級,細薄不可斷列的空白字元於第四等級"
+
+#: ../rules/base.xml.in.h:1020
+msgid "Non-breakable space character at fourth level"
+msgstr "不可斷列的空白字元於第四等級"
+
+#: ../rules/base.xml.in.h:1021
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "不可斷列的空白字元於第四等級,細薄不可斷列的空白字元於第六等級"
+
+#: ../rules/base.xml.in.h:1022
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "不可斷列的空白字元於第四等級,細薄不可斷列的空白字元於第六等級 (透過 Ctrl+Shift)"
+
+#: ../rules/base.xml.in.h:1023
+msgid "Zero-width non-joiner character at second level"
+msgstr "零寬度的非聯結字元於第二等級"
+
+#: ../rules/base.xml.in.h:1024
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "零寬度的非聯結字元於第二等級,零寬度的聯結字元於第三等級"
+
+#: ../rules/base.xml.in.h:1025
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "零寬度的非聯結字元於第二等級,零寬度的聯結字元於第三等級,不可斷列的空白字元於第四等級"
+
+#: ../rules/base.xml.in.h:1026
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "零寬度的非聯結字元於第二等級,不可斷列的空白字元於第三等級"
+
+#: ../rules/base.xml.in.h:1027
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "零寬度的非聯結字元於第二等級,不可斷列的空白字元於第三等級,沒有任何東西於第四等級"
+
+#: ../rules/base.xml.in.h:1028
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "零寬度的非聯結字元於第二等級,不可斷列的空白字元於第三等級,零寬度的聯結字元於第四等級"
+
+#: ../rules/base.xml.in.h:1029
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "零寬度的非聯結字元於第二等級,不可斷列的空白字元於第三等級,細薄不可斷列的空白字元於第四等級"
+
+#: ../rules/base.xml.in.h:1030
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "零寬度的非聯結字元於第三等級,零寬度的聯結字元於第四等級"
+
+#: ../rules/base.xml.in.h:1031
+msgid "Japanese keyboard options"
+msgstr "日語鍵盤選項"
+
+#: ../rules/base.xml.in.h:1032
+msgid "Kana Lock key is locking"
+msgstr "假名鎖定鍵正在鎖定"
+
+#: ../rules/base.xml.in.h:1033
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F 樣式退格"
+
+#: ../rules/base.xml.in.h:1034
+msgid "Make Zenkaku Hankaku an additional ESC"
+msgstr "將全角半角做為額外的 ESC"
+
+#: ../rules/base.xml.in.h:1035
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "加入世界語抑揚符號 (supersigno 軟體)"
+
+#: ../rules/base.xml.in.h:1036
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "到 Qwerty 鍵盤中的相應按鍵。"
+
+#: ../rules/base.xml.in.h:1037
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "到 Dvorak 鍵盤中的相應按鍵。"
+
+#: ../rules/base.xml.in.h:1038
+msgid "Maintain key compatibility with old Solaris keycodes"
+msgstr "保持與舊式昇陽鍵碼的相容性"
+
+#: ../rules/base.xml.in.h:1039
+msgid "Sun Key compatibility"
+msgstr "昇陽按鍵相容性"
+
+#: ../rules/base.xml.in.h:1040
+msgid "Key sequence to kill the X server"
+msgstr "砍除 X 伺服器的按鍵序列"
+
+#: ../rules/base.xml.in.h:1041
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + 退格鍵"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "apl"
+msgstr "apl"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "APL keyboard symbols"
+msgstr "APL 鍵盤符號"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Kutenai"
+msgstr "庫特內語"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Secwepemctsin"
+msgstr "蘇斯瓦語"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Multilingual (Canada, Sun Type 6/7)"
+msgstr "多語言 (加拿大,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "German (US keyboard with German letters)"
+msgstr "德語 (美式鍵盤附德語字母)"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "German (with Hungarian letters and no dead keys)"
+msgstr "德語 (附匈牙利語字母且無廢鍵)"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "German (Sun Type 6/7)"
+msgstr "德語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "Avestan"
+msgstr "阿維斯塔語"
+
+#: ../rules/base.extras.xml.in.h:20
+msgid "Lithuanian (US Dvorak with Lithuanian letters)"
+msgstr "立陶宛語 (美式 Dvorak 配置附立陶宛語字母)"
+
+#: ../rules/base.extras.xml.in.h:21
+msgid "Lithuanian (Sun Type 6/7)"
+msgstr "立陶宛語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:24
+msgid "Latvian (US Dvorak)"
+msgstr "拉脫維亞語 (美式 Dvorak 配置)"
+
+#: ../rules/base.extras.xml.in.h:25
+msgid "Latvian (US Dvorak, Y variant)"
+msgstr "拉脫維亞語 (美式 Dvorak 配置,Y 變體)"
+
+#: ../rules/base.extras.xml.in.h:26
+msgid "Latvian (US Dvorak, minus variant)"
+msgstr "拉脫維亞語 (美式 Dvorak 配置,減號變體)"
+
+#: ../rules/base.extras.xml.in.h:27
+msgid "Latvian (programmer US Dvorak)"
+msgstr "拉脫維亞語 (程式員美式 Dvorak 配置)"
+
+#: ../rules/base.extras.xml.in.h:28
+msgid "Latvian (programmer US Dvorak, Y variant)"
+msgstr "拉脫維亞語 (程式員美式 Dvorak 配置,Y 變體)"
+
+#: ../rules/base.extras.xml.in.h:29
+msgid "Latvian (programmer US Dvorak, minus variant)"
+msgstr "拉脫維亞語 (程式員美式 Dvorak 配置,減號變體)"
+
+#: ../rules/base.extras.xml.in.h:30
+msgid "Latvian (US Colemak)"
+msgstr "拉脫維亞語 (美式 Colemak 配置)"
+
+#: ../rules/base.extras.xml.in.h:31
+msgid "Latvian (US Colemak, apostrophe variant)"
+msgstr "拉脫維亞語 (美式 Colemak 配置,單引號變體)"
+
+#: ../rules/base.extras.xml.in.h:32
+msgid "Latvian (Sun Type 6/7)"
+msgstr "拉脫維亞語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:35
+msgid "English (US, international AltGr Unicode combining)"
+msgstr "英語 (美式,國際版 AltGr 萬國碼合併)"
+
+#: ../rules/base.extras.xml.in.h:36
+msgid "English (US, international AltGr Unicode combining, alternative)"
+msgstr "英語 (美式,國際版 AltGr 萬國碼合併,替代)"
+
+#: ../rules/base.extras.xml.in.h:37
+msgid "Atsina"
+msgstr "阿齊納語"
+
+#: ../rules/base.extras.xml.in.h:38
+msgid "Couer D'alene Salish"
+msgstr "南部內陸薩利希語"
+
+#: ../rules/base.extras.xml.in.h:39
+msgid "English (US, Sun Type 6/7)"
+msgstr "英語 (美式,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:42
+msgid "Polish (international with dead keys)"
+msgstr "波蘭語 (國際版附廢鍵)"
+
+#: ../rules/base.extras.xml.in.h:43
+msgid "Polish (Colemak)"
+msgstr "波蘭語 (Colemak 配置)"
+
+#: ../rules/base.extras.xml.in.h:44
+msgid "Polish (Sun Type 6/7)"
+msgstr "波蘭語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:48
+msgid "Crimean Tatar (Dobruja Q)"
+msgstr "克里米亞韃靼語 (Dobruja Q)"
+
+#: ../rules/base.extras.xml.in.h:49
+msgid "Romanian (ergonomic Touchtype)"
+msgstr "羅馬尼亞語 (人體工學觸控型式)"
+
+#: ../rules/base.extras.xml.in.h:50
+msgid "Romanian (Sun Type 6/7)"
+msgstr "羅馬尼亞語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:53
+msgid "Serbian (combining accents instead of dead keys)"
+msgstr "塞爾維亞語 (合併音調以代替廢鍵)"
+
+#: ../rules/base.extras.xml.in.h:56
+msgid "Russian (with Ukrainian-Belorussian layout)"
+msgstr "俄語 (附烏克蘭-白俄羅斯配置)"
+
+#: ../rules/base.extras.xml.in.h:57
+msgid "Russian (Sun Type 6/7)"
+msgstr "俄語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:60
+msgid "Armenian (OLPC phonetic)"
+msgstr "亞美尼亞語 (OLPC 音標)"
+
+#: ../rules/base.extras.xml.in.h:63
+msgid "Hebrew (Biblical, SIL phonetic)"
+msgstr "希伯來語 (Biblical,SIL 音標)"
+
+#: ../rules/base.extras.xml.in.h:66
+msgid "Arabic (Sun Type 6/7)"
+msgstr "阿拉伯語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:69
+msgid "Belgian (Sun Type 6/7)"
+msgstr "比利時語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:72
+msgid "Portuguese (Brazil, Sun Type 6/7)"
+msgstr "葡萄牙語 (巴西,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:75
+msgid "Czech (Sun Type 6/7)"
+msgstr "捷克語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:78
+msgid "Danish (Sun Type 6/7)"
+msgstr "丹麥語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:81
+msgid "Dutch (Sun Type 6/7)"
+msgstr "荷蘭語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:84
+msgid "Estonian (Sun Type 6/7)"
+msgstr "愛沙尼亞語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:87
+msgid "Finnish (Sun Type 6/7)"
+msgstr "芬蘭語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:89
+msgid "French (Sun Type 6/7)"
+msgstr "法語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:92
+msgid "Greek (Sun Type 6/7)"
+msgstr "希臘語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:95
+msgid "Italian (Sun Type 6/7)"
+msgstr "義大利語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:98
+msgid "Japanese (Sun Type 6)"
+msgstr "日語 (昇陽 Type 6)"
+
+#: ../rules/base.extras.xml.in.h:99
+msgid "Japanese (Sun Type 7 - pc compatible)"
+msgstr "日語 (昇陽 Type 7 - pc 相容)"
+
+#: ../rules/base.extras.xml.in.h:100
+msgid "Japanese (Sun Type 7 - sun compatible)"
+msgstr "日語 (昇陽 Type 7 - 昇陽相容)"
+
+#: ../rules/base.extras.xml.in.h:103
+msgid "Norwegian (Sun Type 6/7)"
+msgstr "挪威語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:105
+msgid "Portuguese (Sun Type 6/7)"
+msgstr "葡萄牙語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:108
+msgid "Slovak (Sun Type 6/7)"
+msgstr "斯洛伐克語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:111
+msgid "Spanish (Sun Type 6/7)"
+msgstr "西班牙語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:114
+msgid "Swedish (Sun Type 6/7)"
+msgstr "瑞典語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:116
+msgid "German (Switzerland, Sun Type 6/7)"
+msgstr "德語 (瑞士,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:117
+msgid "French (Switzerland, Sun Type 6/7)"
+msgstr "法語 (瑞士,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:120
+msgid "Turkish (Sun Type 6/7)"
+msgstr "土耳其語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:123
+msgid "Ukrainian (Sun Type 6/7)"
+msgstr "烏克蘭語 (昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:125
+msgid "English (UK, Sun Type 6/7)"
+msgstr "英語 (英式,昇陽 Type 6/7)"
+
+#: ../rules/base.extras.xml.in.h:128
+msgid "Korean (Sun Type 6/7)"
+msgstr "韓語 (昇陽 Type 6/7)"
diff --git a/xorg-server/xkeyboard-config/rules/base.ml_c.part b/xorg-server/xkeyboard-config/rules/base.ml_c.part
index ec8f02291..793ebe168 100644
--- a/xorg-server/xkeyboard-config/rules/base.ml_c.part
+++ b/xorg-server/xkeyboard-config/rules/base.ml_c.part
@@ -1,4 +1,5 @@
pc98 nec_vndr/jp = pc98(basic)
* jp = complete+japan
- olpc * = olpc
+ olpc * = olpc
+ olpcm * = olpc
* * = complete
diff --git a/xorg-server/xkeyboard-config/rules/base.ml_s.part b/xorg-server/xkeyboard-config/rules/base.ml_s.part
index 552693dbf..76c05d2b2 100644
--- a/xorg-server/xkeyboard-config/rules/base.ml_s.part
+++ b/xorg-server/xkeyboard-config/rules/base.ml_s.part
@@ -24,6 +24,8 @@
nokiasu8w * = nokia_vndr/su-8w(%l)
olpc $olpclayouts = olpc+%l%(m)
olpc * = olpc+%l%(v)
+ olpcm $olpclayouts = olpc+%l%(m)
+ olpcm * = olpc+%l%(v)
$thinkpads br = pc+br(thinkpad)
sl-c3x00 * = pc+sharp_vndr/sl-c3x00(basic)
ws003sh * = pc+sharp_vndr/ws003sh(basic)
diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in
index 1d346238e..450154bb5 100644
--- a/xorg-server/xkeyboard-config/rules/base.xml.in
+++ b/xorg-server/xkeyboard-config/rules/base.xml.in
@@ -1642,12 +1642,6 @@
<variantList>
<variant>
<configItem>
- <name>legacy</name>
- <_description>German (legacy)</_description>
- </configItem>
- </variant>
- <variant>
- <configItem>
<name>nodeadkeys</name>
<_description>German (Austria, eliminate dead keys)</_description>
</configItem>
@@ -3223,12 +3217,20 @@
<variant>
<configItem>
<name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <_shortDescription>ru</_shortDescription>
<_description>Russian (Germany, phonetic)</_description>
<languageList>
<iso639Id>rus</iso639Id>
</languageList>
</configItem>
</variant>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <_description>German (legacy)</_description>
+ </configItem>
+ </variant>
</variantList>
</layout>
<layout>
@@ -4266,6 +4268,12 @@
</variant>
<variant>
<configItem>
+ <name>mac</name>
+ <_description>Russian (Macintosh)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>srp</name>
<_description>Serbian (Russia)</_description>
<languageList><iso639Id>rus</iso639Id>
@@ -5115,7 +5123,7 @@
<name>CloGaelach</name>
<_description>CloGaelach</_description>
<languageList>
- <iso639Id>gla</iso639Id>
+ <iso639Id>gle</iso639Id>
</languageList>
</configItem>
</variant>
diff --git a/xorg-server/xkeyboard-config/rules/evdev.m_k.part b/xorg-server/xkeyboard-config/rules/evdev.m_k.part
index 810675463..783326b55 100644
--- a/xorg-server/xkeyboard-config/rules/evdev.m_k.part
+++ b/xorg-server/xkeyboard-config/rules/evdev.m_k.part
@@ -1,3 +1,5 @@
pc98 = evdev(pc98)
applealu_jis = evdev+macintosh(jisevdev)
+ olpc = evdev+olpc(olpc)
+ olpcm = evdev+olpc(olpcm)
* = evdev
diff --git a/xorg-server/xkeyboard-config/symbols/cd b/xorg-server/xkeyboard-config/symbols/cd
index 5e51535cc..a4f2fa2d2 100644
--- a/xorg-server/xkeyboard-config/symbols/cd
+++ b/xorg-server/xkeyboard-config/symbols/cd
@@ -52,10 +52,10 @@ xkb_symbols "basic" {
key <AB01> { [ w, W ] };
key <AB02> { [ x, X ] };
- key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+ key <AB03> { [ c, C ] };
key <AB04> { [ v, V ] };
key <AB05> { [ b, B ] };
- key <AB06> { [ n, N, 0x01000014B, 0x0100014A ] };
+ key <AB06> { [ n, N, 0x0100014B, 0x0100014A ] };
key <AB07> { [ comma, question, 0x01000327 ] };
key <AB08> { [ semicolon, period ] };
key <AB09> { [ colon, slash ] };
diff --git a/xorg-server/xkeyboard-config/symbols/es b/xorg-server/xkeyboard-config/symbols/es
index cf66f9b35..5adf1a2bb 100644
--- a/xorg-server/xkeyboard-config/symbols/es
+++ b/xorg-server/xkeyboard-config/symbols/es
@@ -158,10 +158,12 @@ xkb_symbols "mac" {
partial alphanumeric_keys
xkb_symbols "olpc" {
+ // http://wiki.laptop.org/go/OLPC_Spanish_Keyboard
+
include "us(basic)"
name[Group1]="Spanish";
- key <TLDE> { [ masculine, ordfeminine ] };
+ key <AE00> { [ masculine, ordfeminine ] };
key <AE01> { [ 1, exclam, bar ] };
key <AE02> { [ 2, quotedbl, at ] };
key <AE03> { [ 3, dead_grave, numbersign, grave ] };
@@ -180,7 +182,7 @@ xkb_symbols "olpc" {
key <AC10> { [ ntilde, Ntilde ] };
key <AC11> { [ plus, asterisk, dead_tilde ] };
- key <BKSL> { [ bracketright, braceright, section ] };
+ key <AC12> { [ bracketright, braceright, section ] };
key <AB08> { [ comma, semicolon ] };
key <AB09> { [ period, colon ] };
@@ -192,6 +194,47 @@ xkb_symbols "olpc" {
};
partial alphanumeric_keys
+xkb_symbols "olpcm" {
+
+ // Mechanical (non-membrane) OLPC Spanish keyboard layout.
+ // See: http://wiki.laptop.org/go/OLPC_Spanish_Non-membrane_Keyboard
+
+ include "us(basic)"
+ name[Group1]="Spain";
+
+ key <AE00> { [ questiondown, exclamdown, backslash ] };
+ key <AE01> { [ 1, exclam, bar ] };
+ key <AE02> { [ 2, quotedbl, at ] };
+ key <AE03> { [ 3, dead_grave, numbersign, grave ] };
+ key <AE04> { [ 4, dollar, asciitilde, dead_tilde ] };
+ key <AE05> { [ 5, percent, asciicircum, dead_circumflex ] };
+ key <AE06> { [ 6, ampersand, notsign ] };
+ key <AE07> { [ 7, slash, backslash ] }; // no '\' label on olpcm, leave for compatibility
+ key <AE08> { [ 8, parenleft, masculine ] };
+ key <AE09> { [ 9, parenright, ordfeminine ] };
+ key <AE10> { [ 0, equal ] };
+ key <AE11> { [ apostrophe, question ] };
+
+ key <AD03> { [ e, E, EuroSign ] };
+ key <AD11> { [ dead_acute, dead_diaeresis, dead_abovering, acute ] };
+ key <AD12> { [ plus, asterisk ] };
+
+ key <AC10> { [ ntilde, Ntilde ] };
+ // no AC11 or AC12 on olpcm
+
+ key <AB08> { [ comma, semicolon ] };
+ key <AB09> { [ period, colon ] };
+ key <AB10> { [ minus, underscore ] };
+
+ key <AA02> { [ less, greater ] };
+ key <AA06> { [ bracketleft, braceleft, ccedilla, Ccedilla ] };
+ key <AA07> { [ bracketright, braceright ] };
+
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
xkb_symbols "deadtilde" {
include "es(basic)"
diff --git a/xorg-server/xkeyboard-config/symbols/inet b/xorg-server/xkeyboard-config/symbols/inet
index 4c172faa2..839439a96 100644
--- a/xorg-server/xkeyboard-config/symbols/inet
+++ b/xorg-server/xkeyboard-config/symbols/inet
@@ -120,6 +120,8 @@ xkb_symbols "evdev" {
key <FK22> { [ XF86TouchpadOn ] };
key <FK23> { [ XF86TouchpadOff ] };
+ key <FK20> { [ XF86AudioMicMute ] };
+
// key <I120> { [ ] }; // KEY_MACRO
key <I126> { [ plusminus ] };
key <I128> { [ XF86LaunchA ] };
diff --git a/xorg-server/xkeyboard-config/symbols/olpc b/xorg-server/xkeyboard-config/symbols/olpc
index e9e950b1e..250e2c5d6 100644
--- a/xorg-server/xkeyboard-config/symbols/olpc
+++ b/xorg-server/xkeyboard-config/symbols/olpc
@@ -13,9 +13,9 @@ xkb_symbols "olpc" {
modifier_map Mod4 { KP_Prior }; // KP_Prior is the "O" game key
modifier_map Mod5 { KP_Next }; // KP_Next is the "X" game key
- key <I220> { [ XF86Search ] }; // search key
- key <I221> { [ XF86Meeting ] }; // fn+search key
+ key <I220> { [ XF86Search ] }; // search key (unpopulated on olpcm, harmless)
+ key <I221> { [ XF86Meeting ] }; // fn+search key (unpopulated on olpcm, harmless)
key <I236> { [ XF86Start ] }; // gear key (fn+space)
- key <I147> { [ XF86TaskPane ] }; // frame key (the top-right key)
- key <I224> { [ XF86Messenger ] }; // overlay key (next to frame key)
+ key <I147> { [ XF86TaskPane ] }; // frame key (the top-right key) (unpopulated on olpcm, harmless)
+ key <I224> { [ XF86Messenger ] }; // overlay key (next to frame key) (unpopulated on olpcm, harmless)
};
diff --git a/xorg-server/xkeyboard-config/symbols/ru b/xorg-server/xkeyboard-config/symbols/ru
index 457c9efaa..a761c30d0 100644
--- a/xorg-server/xkeyboard-config/symbols/ru
+++ b/xorg-server/xkeyboard-config/symbols/ru
@@ -656,3 +656,22 @@ partial alphanumeric_keys
xkb_symbols "sun_type6" {
include "sun_vndr/ru(sun_type6)"
};
+
+// Apple layout
+partial alphanumeric_keys
+xkb_symbols "mac" {
+include "ru(common)"
+
+ name[Group1]= "Russian (Macintosh)";
+
+ key <LSGT> { [ less, greater ] };
+ key <AE02> { [ 2, quotedbl ] };
+ key <AE03> { [ 3, numerosign ] };
+ key <AE04> { [ 4, percent ] };
+ key <AE05> { [ 5, colon ] };
+ key <AE06> { [ 6, comma ] };
+ key <AE07> { [ 7, period ] };
+ key <AE08> { [ 8, semicolon ] };
+ key <TLDE> { [ bracketright, bracketleft ] };
+ key <BKSL> { [ Cyrillic_io, Cyrillic_IO ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/us b/xorg-server/xkeyboard-config/symbols/us
index 11c971cf1..b34bedc0f 100644
--- a/xorg-server/xkeyboard-config/symbols/us
+++ b/xorg-server/xkeyboard-config/symbols/us
@@ -605,6 +605,8 @@ xkb_symbols "dvp" {
// lower row, left side
key <AB01> { [ apostrophe, quotedbl, dead_acute ] };
+
+ include "level3(ralt_switch)"
};
// phonetic layout for Russian letters on an US keyboard
@@ -1033,7 +1035,7 @@ xkb_symbols "olpc" {
key <AC07> { [ j, J, EuroSign, EuroSign ] };
key <AC10> { [ semicolon, colon, masculine, ordfeminine ] };
key <AC11> { [ apostrophe, quotedbl, currency, currency ] };
- key <BKSL> { [ backslash, bar, section, section ] };
+ key <AC12> { [ backslash, bar, section, section ] };
key <AB03> { [ c, C, ccedilla, Ccedilla ] };
key <AB06> { [ n, N, ntilde, Ntilde ] };
@@ -1054,6 +1056,63 @@ xkb_symbols "olpc2" {
include "group(olpc)"
};
+xkb_symbols "olpcm" {
+
+ include "us(basic)"
+ name[Group1]= "USA";
+
+ // Mechanical (non-membrane) OLPC int'l US English keyboard layout.
+ // See: http://wiki.laptop.org/go/OLPC_English_Non-membrane_Keyboard
+
+ key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
+ key <AE01> { [ 1, exclam, exclamdown, exclamdown ] };
+ key <AE02> { [ 2, at, notsign, notsign ] };
+ key <AE03> { [ 3, numbersign, 0x1000300, 0x1000300 ] }; // combining grave
+ key <AE04> { [ 4, dollar, 0x1000301, 0x1000301 ] }; // combining acute
+ key <AE05> { [ 5, percent, 0x1000306, 0x1000306 ] }; // combining breve above
+ key <AE06> { [ 6,asciicircum, 0x100030A, 0x100030A ] }; // combining ring above
+ key <AE07> { [ 7, ampersand, 0x1000302, 0x1000302 ] }; // combining circumflex above
+ key <AE08> { [ 8, asterisk, 0x100030C, 0x100030C ] }; // combining caron above
+ key <AE09> { [ 9, parenleft, 0x1000307, 0x1000307 ] }; // combining dot above
+ key <AE10> { [ 0, parenright, 0x1000308, 0x1000308 ] }; // combining diaeresis above
+ key <AE11> { [ minus, underscore, 0x1000304, 0x1000304 ] }; // combining macron above
+
+ key <AD01> { [ q, Q, Greek_omega, Greek_OMEGA ] };
+ key <AD02> { [ w, W, oslash, Oslash ] };
+ key <AD03> { [ e, E, oe, OE ] };
+ key <AD04> { [ r, R, 0x1000327, 0x1000327 ] }; // combining cedilla
+ key <AD05> { [ t, T, 0x100032E, 0x100032E ] }; // combining breve below
+ key <AD06> { [ y, Y, 0x1000325, 0x1000325 ] }; // combining ring below
+ key <AD07> { [ u, U, 0x100032D, 0x100032D ] }; // combining circumflex below
+ key <AD08> { [ i, I, 0x100032C, 0x100032C ] }; // combining caron below
+ key <AD09> { [ o, O, 0x1000323, 0x1000323 ] }; // combining dot below
+ key <AD10> { [ p, P, 0x1000324, 0x1000324 ] }; // combining diaeresis below
+ key <AD11> { [ bracketleft, braceleft, 0x1000331, 0x1000331 ] }; // combining macron below
+ key <AD12> { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below
+
+ key <AC01> { [ a, A, ae, AE ] };
+ key <AC02> { [ s, S, ssharp, 0x1001E9C ] }; // uppercase S sharp
+ key <AC03> { [ d, D, eth, ETH ] };
+ key <AC04> { [ f, F, thorn, THORN ] };
+ key <AC06> { [ h, H, sterling, sterling ] };
+ key <AC07> { [ j, J, EuroSign, EuroSign ] };
+ key <AC10> { [ semicolon, colon, masculine, ordfeminine ] };
+ // no AC11 or AC12 on olpcm
+
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB07> { [ m, M, mu, mu ] };
+ key <AB08> { [ comma, less, guillemotleft, guillemotleft ] };
+ key <AB09> { [ period, greater, guillemotright, guillemotright ] };
+ key <AB10> { [ slash, question, questiondown, questiondown ] };
+
+ key <AA02> { [ backslash, bar, section, section ] };
+ key <AA06> { [ equal, plus, 0x1000303, 0x1000303 ] };
+ key <AA07> { [ apostrophe, quotedbl, currency, currency ] };
+
+ include "level3(ralt_switch)"
+};
+
// Based on Cherokee Nation Official Layout
// http://www.cherokee.org/extras/downloads/font/Keyboard.htm